Estas son algunas de las librerías para Java que puedes usar para generar reportes en diversos formatos, agregar gráficas y otros recursos útiles para mostrar datos al usuario final. Algunos proyectos disponen de una versión opensource, edición community y versiones comerciales.
JFreeChart es una biblioteca de gráficos hecha 100% Java que facilita a los desarrolladores mostrar gráficos de calidad profesional en tus aplicaciones. El amplio conjunto de características de JFreeChart incluye:
Una API consistente y bien documentada, que admite una amplia gama de tipos de gráficos
Diseño flexible que es fácil de ampliar, dirigida tanto a aplicaciones de servidor como del cliente.
Compatibilidad con muchos tipos de salida, incluidos los componentes Swing y JavaFX, archivos de imagen (incluidos PNG y JPEG) y formatos de archivos de gráficos vectoriales (incluidos PDF, EPS y SVG)
JFreeChart es de código abierto o más específicamente, software libre. Se distribuye bajo los términos de la GNU Lesser General Public Licence (LGPL), que permite su uso en aplicaciones propietarias.
JasperReport
JasperReport es una de las herramientas para reportes de código abierto más populares y ampliamente utilizadas. Se usa en cientos de miles de entornos de producción y presenta versiones tanto community como comerciales.
Formateo y visualización de reportes interactivos
Repositorio central seguro
Informe de programación y distribución
Interfaz de usuario personalizable y personalizable
BIRT
BIRT consta de varios componentes. Los componentes principales incluyen un diseñador de reportes y en tiempo de ejecución de BIRT, pero BIRT también proporciona tres componentes adicionales: un motor de gráficos, un diseñador de gráficos y un visor. Con estos componentes, podrías desarrollar y publicar informes como una solución independiente.
Listas
Gráficas
Tablas cruzadas
Cartas y documentos
Informas compuestos
Pentaho
Pentaho es una suite empresarial completa, que abarca una amplia gama de casos de uso desde reportes hasta minería de datos. La suite de Pentaho BI abarca varios proyectos de código abierto, de los cuales Pentaho Reporting es uno de ellos. Al igual que las otras herramientas, Pentaho Reporting tiene un amplio conjunto de funciones, listas para su uso en organizaciones empresariales.
Permite crear reportes en PDF, Excel, HTML, texto, archivo de texto enriquecido, XML y CSV.
SpagoBI
SpagoBI es otra suite de inteligencia empresarial completa. Algunas herramientas que incluye son, por ejemplo: reportes, gráficos, cockpits, minería de datos, ETL y mucho más. La empresa que respalda este desarrollo ofrece servicios profesionales como asistencia al usuario, mantenimiento, consultoría y capacitación.
Reportes en formatos HTML, PDF, XLS, XML, TXT, CSV, RTF
Análisis multidimensional (OLAP)
Gráficas
KPIs
Coopits Interactivos
Reportes ad-hoc
Muchas otras características.
KNIME
KNIME es una plataforma de análisis de código abierto, con orígenes en la investigación farmacéutica. Su uso se ha expandido a industrias como bancos, editores, fabricantes de automóviles, compañías de telecomunicaciones y otros.
KNIME proporciona una gama de características, que incluyen extensiones de colaboración y un portal web. El aprendizaje automático también está integrado, incluido el soporte de Weka.
ReportServer
ReportServer es otra plataforma de inteligencia empresarial de código abierto, con una edición comercial disponible también. ReportServer permite crear reportes, análisis ad-hoc, informes de Excel y Word y análisis OLAP multidimensionales.
Python trae mucho de serie, pero buena parte de lo que se hace con él a diario se apoya en librerías externas. Estas son las que más se usan, agrupadas por tarea y cada una con un ejemplo corto que puedes copiar y ejecutar.
Ten en cuenta que el nombre del paquete no siempre coincide con el del import: se instala pillow y se importa PIL, se instala beautifulsoup4 y se importa bs4.
Para…
Librería
Versión probada
Peticiones HTTP
requests
2.34.2
Barras de progreso
tqdm
4.70.1
Imágenes
Pillow
12.3.0
Cálculo numérico
NumPy
2.5.3
Tablas de datos
pandas
3.0.6
Gráficas
Matplotlib
3.11.2
Extraer datos de HTML
Beautiful Soup
4.15.0
Bases de datos
SQLAlchemy
2.1.4
APIs web
FastAPI
0.143.0
Pruebas
pytest
9.1.1
requests: peticiones HTTP
import requests
r = requests.get("https://httpbin.org/get", params={"lenguaje": "python"}, timeout=10)
print(r.status_code, r.headers["Content-Type"])
print(r.json()["args"])
r = requests.post("https://httpbin.org/post", json={"sitio": "decodigo.com"}, timeout=10)
print(r.json()["json"])
Con params se arma la cadena de consulta, con json= se envía un cuerpo JSON con su cabecera, y r.json() decodifica la respuesta. Pon siempre un timeout: sin él, una petición a un servidor que no responde puede quedarse esperando indefinidamente. Si solo necesitas algo puntual y no quieres dependencias, la biblioteca estándar también lo hace; lo vemos en peticiones HTTP sin dependencias.
tqdm: barras de progreso
from time import sleep
from tqdm import tqdm
total = 0
for n in tqdm(range(50), desc="Procesando", ncols=70):
total += n
sleep(0.02)
print("suma:", total)
salida, última línea de la barraProcesando: 100%|█████████████████████| 50/50 [00:01<00:00, 49.11it/s]
suma: 1225
Basta con envolver el iterable en tqdm(). La barra se va redibujando en la misma línea y muestra el avance, la velocidad y el tiempo que falta. Es muy útil en procesos largos, porque deja ver enseguida si el trabajo avanza o se ha atascado.
thumbnail reduce la imagen para que quepa en la caja que le das (200×200), pero conserva la proporción: por eso queda en 200×100 y no se deforma. Pillow abre y guarda los formatos habituales (PNG, JPEG, WebP, GIF…) y sirve para recortar, rotar, dibujar o cambiar el formato por lotes.
salidamedia: 21.14 máxima: 24.3
[65.3 69.8 75.74 67.64 71.78]
count sum mean
lenguaje
Python 3 400 133.333333
Java 2 175 87.500000
Go 1 40 40.000000
NumPy opera sobre arreglos completos de una vez: temps * 9 / 5 + 32 convierte las cinco temperaturas sin escribir ningún bucle, y además mucho más rápido que un bucle en Python. pandas se apoya en NumPy para trabajar con tablas: aquí agrupa por lenguaje y calcula el número de filas, la suma y la media de cada grupo en una sola línea. Si trabajas con archivos muy grandes, merece la pena mirar también Polars, una alternativa más reciente y muy rápida.
La gráfica que genera el ejemplo, tal cual. Los datos son inventados.
matplotlib.use("Agg") hace que dibuje directamente a un archivo, sin abrir ninguna ventana; así funciona también en un servidor o en un contenedor. En tu ordenador puedes quitarlo y llamar a plt.show() para ver la gráfica en pantalla.
Beautiful Soup: extraer datos de HTML
from bs4 import BeautifulSoup
html = """
<ul id="lenguajes">
<li class="activo"><a href="/python">Python</a></li>
<li><a href="/java">Java</a></li>
<li class="activo"><a href="/rust">Rust</a></li>
</ul>
"""
soup = BeautifulSoup(html, "html.parser")
for a in soup.select("#lenguajes li.activo a"):
print(a.text, "->", a["href"])
salidaPython -> /python
Rust -> /rust
select acepta selectores CSS, los mismos que se usan en las hojas de estilo, así que #lenguajes li.activo a se lee igual que en CSS. Para descargar la página se combina con requests. Si lo que necesitas es recorrer un sitio entero siguiendo enlaces, la herramienta adecuada es Scrapy. Y antes de extraer datos de un sitio, revisa sus condiciones de uso y su robots.txt.
SQLAlchemy: bases de datos
from sqlalchemy import create_engine, select, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Articulo(Base):
__tablename__ = "articulos"
id: Mapped[int] = mapped_column(primary_key=True)
titulo: Mapped[str] = mapped_column(String(100))
visitas: Mapped[int]
engine = create_engine("sqlite:///:memory:")
Base.metadata.create_all(engine)
with Session(engine) as s:
s.add_all([Articulo(titulo="Hola mundo", visitas=10),
Articulo(titulo="Leer CSV", visitas=42),
Articulo(titulo="Peticiones HTTP", visitas=27)])
s.commit()
consulta = select(Articulo).where(Articulo.visitas > 20).order_by(Articulo.visitas.desc())
for a in s.scalars(consulta):
print(a.titulo, a.visitas)
salidaLeer CSV 42
Peticiones HTTP 27
Cada tabla se define como una clase, y las consultas se escriben en Python en lugar de en SQL. Es el estilo de SQLAlchemy 2, con anotaciones de tipo (Mapped[int]). El mismo código funciona con SQLite, PostgreSQL o MySQL cambiando solo la cadena de conexión. Para SQLite sin ninguna librería externa, mira SQLite con Python.
FastAPI: APIs web
from fastapi import FastAPI
from fastapi.testclient import TestClient
from pydantic import BaseModel
app = FastAPI()
class Articulo(BaseModel):
titulo: str
visitas: int = 0
@app.get("/saludo/{nombre}")
def saludo(nombre: str):
return {"mensaje": f"Hola, {nombre}"}
@app.post("/articulos")
def crear(articulo: Articulo):
return {"creado": articulo.titulo, "visitas": articulo.visitas}
cliente = TestClient(app)
print(cliente.get("/saludo/Ana").json())
print(cliente.post("/articulos", json={"titulo": "FastAPI"}).json())
r = cliente.post("/articulos", json={"visitas": "muchas"})
print(r.status_code, [e["loc"][-1] + ": " + e["type"] for e in r.json()["detail"]])
FastAPI usa las anotaciones de tipo para validar lo que llega: en la última petición falta el título y visitas no es un número, así que responde con un error 422 que explica cada fallo, sin que hayas escrito ninguna validación. Aquí se prueba con TestClient, que llama a la API sin levantar un servidor; en producción se ejecuta con uvicorn.
Con las versiones actuales, TestClient avisa de que usar httpx está obsoleto y pide instalar httpx2. Por eso aparece en el pip install de arriba; con él, el aviso desaparece y el ejemplo funciona igual.
Si buscas un framework completo, con panel de administración, usuarios y plantillas incluidos, la referencia es Django. Para algo pequeño y sin estructura impuesta, Flask.
Las pruebas son funciones que empiezan por test_ y usan un assert normal. parametrize ejecuta la misma prueba con varios casos, y cada uno aparece por separado en el informe; pytest.raises comprueba que se lanza la excepción esperada.
Interfaces gráficas multiplataforma, también para móviles
La versión de 2019 de esta entrada incluía Twisted, un framework de red basado en eventos. Sigue existiendo, pero hoy, para la mayoría de los programas concurrentes, se usa asyncio, que viene con Python, o librerías construidas sobre él.
Entrada publicada en 2019 y revisada en octubre de 2026. Todo el código se ejecutó con Python 3.14.8 en un contenedor limpio, con las versiones de la tabla; las salidas están copiadas de esa ejecución.