CodeGym /Cursos /Python SELF ES /Otras bibliotecas para trabajar con PDF en Python

Otras bibliotecas para trabajar con PDF en Python

Python SELF ES
Nivel 43, Lección 1
Disponible

1. Introducción a PDFPlumber

Extracción de tablas y estructuras complejas con PDFPlumber

PDFPlumber es perfecto para extraer datos de PDF, especialmente tablas y estructuras complejas como columnas. Permite reconocer y extraer datos que son difíciles de obtener usando PyPDF2.

Instalación de PDFPlumber

Python

pip install pdfplumber

Extracción de tablas con PDFPlumber

Python

import pdfplumber

with pdfplumber.open("sample_with_table.pdf") as pdf:
    for page in pdf.pages:
        table = page.extract_table()
        if table:
            for row in table:
                print(row)

Este código extrae tablas de cada página del PDF, lo cual es útil para manejar reportes financieros y analíticos donde las tablas representan los datos principales.

2. Introducción a ReportLab

Creación de reportes PDF usando ReportLab

Si quieres crear un PDF desde cero, por ejemplo, para reportes o documentos automatizados, la biblioteca ReportLab ofrece funcionalidades flexibles para construir PDFs con texto, tablas, imágenes y gráficos.

Instalación de ReportLab

Python

pip install reportlab

Creación de un documento PDF simple

Python

from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas

# Creación del PDF
pdf_file = canvas.Canvas("generated_report.pdf", pagesize=A4)
width, height = A4

# Añadiendo el título
pdf_file.setFont("Helvetica-Bold", 16)
pdf_file.drawString(100, height - 100, "Reporte de ventas")

# Añadiendo texto
pdf_file.setFont("Helvetica", 12)
pdf_file.drawString(100, height - 130, "Este reporte contiene datos de ventas del último mes.")

# Guardando el PDF
pdf_file.showPage()
pdf_file.save()

Este código crea un PDF con un título y texto. También permite añadir logotipos, imágenes y otros elementos de diseño.

Creación de una tabla en PDF con ReportLab

Python

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle

# Datos para la tabla
data = [
    ["Mes", "Ventas"],
    ["Enero", "200"],
    ["Febrero", "300"],
    ["Marzo", "250"]
]

# Creando un PDF con una tabla
pdf_file = SimpleDocTemplate("sales_report.pdf", pagesize=A4)
table = Table(data)
table.setStyle(TableStyle([
    ('BACKGROUND', (0, 0), (-1, 0), colors.grey),
    ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
    ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
    ('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
    ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
    ('BACKGROUND', (0, 1), (-1, -1), colors.beige),
]))

# Construcción del PDF
elements = [table]
pdf_file.build(elements)

Este código crea una tabla y la guarda en un PDF. Usando ReportLab también puedes agregar estilos, cambiar colores, tamaños de fuente y formatear texto.

3. Regresando a PyPDF2

¿Por qué PyPDF2?

Como ya sabes, los documentos PDF son prácticamente un estándar para todo tipo de documentación, desde reportes hasta white papers. Pero cuando se trata de automatización, trabajar con PDFs en Python puede ser un verdadero dolor de cabeza. PyPDF2 te ayuda a salir de ese embrollo: permite extraer texto, combinar y dividir páginas, ¡y mucho más! Trabajar con ella es toda una delicia. En resumen, es como una buena taza de café por la mañana para un coder, solo que no te despierta, ¡te relaja!

Vamos a recorrer rápidamente las funciones básicas que nos ofrece PyPDF2. Esto te preparará para tareas más complejas, porque sin un inicio gradual uno puede perderse fácilmente.

Importación y ejemplo básico

Lo primero que necesitamos hacer es importar la biblioteca. Como el buen viejo `import this`, pero ahora va a ejecutar ciertas tareas.

Python

import PyPDF2

Como ejemplo simple, intentemos abrir un documento PDF y leerlo.

Python

# Abrimos un archivo en modo binario para lectura
with open('example.pdf', 'rb') as pdf_file:
    # Creamos un objeto PDFReader
    pdf_reader = PyPDF2.PdfReader(pdf_file)
    # Extraemos texto de la primera página
    page = pdf_reader.pages[0]
    text = page.extract_text()
    print(text)

Este código hace todo lo necesario para empezar: abre un documento PDF, extrae texto de la primera página y lo muestra. Simple y directo.

Descripción general de las funcionalidades de PyPDF2

PyPDF2 ofrece muchas funciones para trabajar con PDF:

  • Extracción de texto: ya lo vimos.
  • Combinar PDFs: creamos un nuevo documento PDF, combinando varios existentes.
  • División de páginas: seleccionamos las páginas necesarias y las guardamos en archivos separados.
  • Añadir anotaciones y comentarios: ¡esto ya es un nivel alto!

En este punto deberías tener una idea general de cómo funciona PyPDF2 y qué posibilidades ofrece. Por supuesto, no es posible dominar todo en una sola lección, pero vamos a aprender poco a poco lo que esta biblioteca tiene para ofrecer.

Feedback y errores típicos

Muchas veces el código no funciona a la primera, y cada aprendizaje se convierte en "cazar el bug". El error más común al usar PyPDF2 es una ruta incorrecta al archivo. Asegúrate de que tu documento PDF esté en el mismo directorio que tu script, o especifica la ruta completa. Además, no olvides abrir archivos en modo binario ('rb'), ya que ayuda a evitar problemas de codificación. Como dijo un sabio programador, "Los bugs no son errores en tu código, ¡son simplemente características inesperadas!"

1
Tarea
Python SELF ES, nivel 43, lección 1
Bloqueada
Extracción de texto usando la biblioteca PDFPlumber
Extracción de texto usando la biblioteca PDFPlumber
2
Tarea
Python SELF ES, nivel 43, lección 1
Bloqueada
Extracción de tablas de PDF con PDFPlumber
Extracción de tablas de PDF con PDFPlumber
3
Tarea
Python SELF ES, nivel 43, lección 1
Bloqueada
Creación de un informe PDF con tabla y encabezado usando ReportLab
Creación de un informe PDF con tabla y encabezado usando ReportLab
4
Tarea
Python SELF ES, nivel 43, lección 1
Bloqueada
Uso combinado de PDFPlumber y ReportLab
Uso combinado de PDFPlumber y ReportLab
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION