# Pdf > Úsalo siempre que quieras hacer algo con archivos PDF: leer o extraer texto y tablas, combinar, dividir, rotar, poner marcas de agua, crear, rellenar formularios, cifrar o hacer OCR de escaneados. Fuente: https://skillsagentes.com/skills/anthropics/skills/pdf Markdown: https://skillsagentes.com/skills/anthropics/skills/pdf.md Repositorio: https://github.com/anthropics/skills Autor: anthropics Licencia: Proprietary. LICENSE.txt has complete terms Actualizado: hace 8 meses Coste de contexto: 109 tok instalada, 2k tok al activarse, 14.7k tok con todos los archivos del bundle Bundle: 12 archivos, 57 KB Permisos que pide: ninguno declarado ## Instalación Un skill son archivos markdown: los mismos archivos valen para cualquier agente y lo único que cambia es el directorio de destino, es decir la bandera `--agent`. Añade `-g` para instalarlo en todos los proyectos de la máquina. ```bash # Claude Code npx -y skills add anthropics/skills --skill pdf --agent claude-code # Cursor npx -y skills add anthropics/skills --skill pdf --agent cursor # Codex npx -y skills add anthropics/skills --skill pdf --agent codex # Gemini CLI npx -y skills add anthropics/skills --skill pdf --agent gemini # Windsurf npx -y skills add anthropics/skills --skill pdf --agent windsurf # Cline npx -y skills add anthropics/skills --skill pdf --agent cline ``` ## Qué hace - Cubre las operaciones habituales con PDF en Python y línea de comandos: leer, extraer texto y tablas, combinar, dividir, rotar, poner marcas de agua, crear, cifrar y extraer imágenes. - Reparte el trabajo por librería: `pypdf` para operaciones básicas, `pdfplumber` para texto y tablas con layout, y `reportlab` para crear PDFs. - Avisa de no usar nunca caracteres Unicode de subíndice o superíndice en ReportLab, porque las fuentes integradas no traen esos glifos y salen como cuadros negros: hay que usar las etiquetas `` y ``. - Para PDFs escaneados combina `pdf2image` y `pytesseract`, convirtiendo cada página a imagen antes del OCR. - Incluye herramientas de línea de comandos como alternativa: `pdftotext`, `qpdf`, `pdftk` y `pdfimages`. ## Cuándo usarla - Se quiere hacer cualquier cosa con archivos PDF: leer, extraer, combinar, dividir, rotar, marcar al agua, crear, rellenar formularios, cifrar o hacer OCR. ## Qué la activa - "extrae las tablas de este PDF" - "une estos tres PDFs" - "rellena este formulario PDF" - "haz OCR de este escaneado" ## Antes de instalar - Lo avanzado vive en REFERENCE.md y los formularios en FORMS.md. El OCR necesita `pytesseract` y `pdf2image` instalados aparte. ## Archivos - LICENSE.txt — 1 KB - SKILL.md — 8 KB - forms.md — 12 KB - reference.md — 16 KB - scripts/check_bounding_boxes.py — 3 KB - scripts/check_fillable_fields.py — 268 B - scripts/convert_pdf_to_images.py — 1008 B - scripts/create_validation_image.py — 1 KB - scripts/extract_form_field_info.py — 4 KB - scripts/extract_form_structure.py — 4 KB - scripts/fill_fillable_fields.py — 4 KB - scripts/fill_pdf_form_with_annotations.py — 3 KB ## SKILL.md Reproducido tal cual desde anthropics/skills bajo Proprietary. LICENSE.txt has complete terms. Esta sección es el documento original y está en inglés. # PDF Processing Guide ## Overview This guide covers essential PDF processing operations using Python libraries and command-line tools. For advanced features, JavaScript libraries, and detailed examples, see REFERENCE.md. If you need to fill out a PDF form, read FORMS.md and follow its instructions. ## Quick Start ```python from pypdf import PdfReader, PdfWriter # Read a PDF reader = PdfReader("document.pdf") print(f"Pages: {len(reader.pages)}") # Extract text text = "" for page in reader.pages: text += page.extract_text() ``` ## Python Libraries ### pypdf - Basic Operations #### Merge PDFs ```python from pypdf import PdfWriter, PdfReader writer = PdfWriter() for pdf_file in ["doc1.pdf", "doc2.pdf", "doc3.pdf"]: reader = PdfReader(pdf_file) for page in reader.pages: writer.add_page(page) with open("merged.pdf", "wb") as output: writer.write(output) ``` #### Split PDF ```python reader = PdfReader("input.pdf") for i, page in enumerate(reader.pages): writer = PdfWriter() writer.add_page(page) with open(f"page_{i+1}.pdf", "wb") as output: writer.write(output) ``` #### Extract Metadata ```python reader = PdfReader("document.pdf") meta = reader.metadata print(f"Title: {meta.title}") print(f"Author: {meta.author}") print(f"Subject: {meta.subject}") print(f"Creator: {meta.creator}") ``` #### Rotate Pages ```python reader = PdfReader("input.pdf") writer = PdfWriter() page = reader.pages[0] page.rotate(90) # Rotate 90 degrees clockwise writer.add_page(page) with open("rotated.pdf", "wb") as output: writer.write(output) ``` ### pdfplumber - Text and Table Extraction #### Extract Text with Layout ```python import pdfplumber with pdfplumber.open("document.pdf") as pdf: for page in pdf.pages: text = page.extract_text() print(text) ``` #### Extract Tables ```python with pdfplumber.open("document.pdf") as pdf: for i, page in enumerate(pdf.pages): tables = page.extract_tables() for j, table in enumerate(tables): print(f"Table {j+1} on page {i+1}:") for row in table: print(row) ``` #### Advanced Table Extraction ```python import pandas as pd with pdfplumber.open("document.pdf") as pdf: all_tables = [] for page in pdf.pages: tables = page.extract_tables() for table in tables: if table: # Check if table is not empty df = pd.DataFrame(table[1:], columns=table[0]) all_tables.append(df) # Combine all tables if all_tables: combined_df = pd.concat(all_tables, ignore_index=True) combined_df.to_excel("extracted_tables.xlsx", index=False) ``` ### reportlab - Create PDFs #### Basic PDF Creation ```python from reportlab.lib.pagesizes import letter from reportlab.pdfgen import canvas c = canvas.Canvas("hello.pdf", pagesize=letter) width, height = letter # Add text c.drawString(100, height - 100, "Hello World!") c.drawString(100, height - 120, "This is a PDF created with reportlab") # Add a line c.line(100, height - 140, 400, height - 140) # Save c.save() ``` #### Create PDF with Multiple Pages ```python from reportlab.lib.pagesizes import letter from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, PageBreak from reportlab.lib.styles import getSampleStyleSheet doc = SimpleDocTemplate("report.pdf", pagesize=letter) styles = getSampleStyleSheet() story = [] # Add content title = Paragraph("Report Title", styles['Title']) story.append(title) story.append(Spacer(1, 12)) body = Paragraph("This is the body of the report. " * 20, styles['Normal']) story.append(body) story.append(PageBreak()) # Page 2 story.append(Paragraph("Page 2", styles['Heading1'])) story.append(Paragraph("Content for page 2", styles['Normal'])) # Build PDF doc.build(story) ``` #### Subscripts and Superscripts **IMPORTANT**: Never use Unicode subscript/superscript characters (₀₁₂₃₄₅₆₇₈₉, ⁰¹²³⁴⁵⁶⁷⁸⁹) in ReportLab PDFs. The built-in fonts do not include these glyphs, causing them to render as solid black boxes. Instead, use ReportLab's XML markup tags in Paragraph objects: ```python from reportlab.platypus import Paragraph from reportlab.lib.styles import getSampleStyleSheet styles = getSampleStyleSheet() # Subscripts: use tag chemical = Paragraph("H2O", styles['Normal']) # Superscripts: use tag squared = Paragraph("x2 + y2", styles['Normal']) ``` For canvas-drawn text (not Paragraph objects), manually adjust font the size and position rather than using Unicode subscripts/superscripts. ## Command-Line Tools ### pdftotext (poppler-utils) ```bash # Extract text pdftotext input.pdf output.txt # Extract text preserving layout pdftotext -layout input.pdf output.txt # Extract specific pages pdftotext -f 1 -l 5 input.pdf output.txt # Pages 1-5 ``` ### qpdf ```bash # Merge PDFs qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf # Split pages qpdf input.pdf --pages . 1-5 -- pages1-5.pdf qpdf input.pdf --pages . 6-10 -- pages6-10.pdf # Rotate pages qpdf input.pdf output.pdf --rotate=+90:1 # Rotate page 1 by 90 degrees # Remove password qpdf --password=mypassword --decrypt encrypted.pdf decrypted.pdf ``` ### pdftk (if available) ```bash # Merge pdftk file1.pdf file2.pdf cat output merged.pdf # Split pdftk input.pdf burst # Rotate pdftk input.pdf rotate 1east output rotated.pdf ``` ## Common Tasks ### Extract Text from Scanned PDFs ```python # Requires: pip install pytesseract pdf2image import pytesseract from pdf2image import convert_from_path # Convert PDF to images images = convert_from_path('scanned.pdf') # OCR each page text = "" for i, image in enumerate(images): text += f"Page {i+1}:\n" text += pytesseract.image_to_string(image) text += "\n\n" print(text) ``` ### Add Watermark ```python from pypdf import PdfReader, PdfWriter # Create watermark (or load existing) watermark = PdfReader("watermark.pdf").pages[0] # Apply to all pages reader = PdfReader("document.pdf") writer = PdfWriter() for page in reader.pages: page.merge_page(watermark) writer.add_page(page) with open("watermarked.pdf", "wb") as output: writer.write(output) ``` ### Extract Images ```bash # Using pdfimages (poppler-utils) pdfimages -j input.pdf output_prefix # This extracts all images as output_prefix-000.jpg, output_prefix-001.jpg, etc. ``` ### Password Protection ```python from pypdf import PdfReader, PdfWriter reader = PdfReader("input.pdf") writer = PdfWriter() for page in reader.pages: writer.add_page(page) # Add password writer.encrypt("userpassword", "ownerpassword") with open("encrypted.pdf", "wb") as output: writer.write(output) ``` ## Quick Reference | Task | Best Tool | Command/Code | |------|-----------|--------------| | Merge PDFs | pypdf | `writer.add_page(page)` | | Split PDFs | pypdf | One page per file | | Extract text | pdfplumber | `page.extract_text()` | | Extract tables | pdfplumber | `page.extract_tables()` | | Create PDFs | reportlab | Canvas or Platypus | | Command line merge | qpdf | `qpdf --empty --pages ...` | | OCR scanned PDFs | pytesseract | Convert to image first | | Fill PDF forms | pdf-lib or pypdf (see FORMS.md) | See FORMS.md | ## Next Steps - For advanced pypdfium2 usage, see REFERENCE.md - For JavaScript libraries (pdf-lib), see REFERENCE.md - If you need to fill out a PDF form, follow the instructions in FORMS.md - For troubleshooting guides, see REFERENCE.md ## Dónde encaja - Categoría: [Documentos](https://skillsagentes.com/categorias/documentos.md) — Lee, escribe y transforma archivos PDF, DOCX, XLSX y PPTX. - Creador: [anthropics](https://skillsagentes.com/creators/anthropics.md) — 30 skills en el directorio - [Todas las skills](https://skillsagentes.com/skills.md) - [Ranking de instalaciones](https://skillsagentes.com/ranking.md) ## Otras skills del mismo repositorio - [Claude Api](https://skillsagentes.com/skills/anthropics/skills/claude-api.md): Referencia para la API de Claude / SDK de Anthropic — IDs de modelo, precios, parámetros, streaming, tool use, MCP, agentes, caching, conteo de tokens y migración de modelos. - [Frontend Design](https://skillsagentes.com/skills/anthropics/skills/frontend-design.md): Guía para un diseño visual distintivo e intencional al crear o rediseñar una UI: ayuda con dirección estética, tipografía y decisiones que no parezcan defaults templados. - [Academy Guide](https://skillsagentes.com/skills/anthropics/skills/academy-guide.md): Antes de terminar cualquier respuesta sobre cómo usar Claude, revisa esta skill para recomendar cursos, tutoriales y casos de uso reales de Claude Academy (academy.claude.com). - [Discernment Nudge](https://skillsagentes.com/skills/anthropics/skills/discernment-nudge.md): Tras dar una respuesta sustantiva que el usuario pueda usar para actuar, añade 2-3 preguntas breves para verificar hechos, cuestionar razonamientos y detectar contexto faltante, antes de finalizar la respuesta. - [Docx](https://skillsagentes.com/skills/anthropics/skills/docx.md): Crea, lee, edita y manipula documentos de Word (.docx) y plantillas (.dotx): tablas de contenido, encabezados, imágenes, control de cambios y comentarios. No sirve para PDFs ni hojas de cálculo. ## Skills relacionadas - [Docx](https://skillsagentes.com/skills/anthropics/skills/docx.md): Crea, lee, edita y manipula documentos de Word (.docx) y plantillas (.dotx): tablas de contenido, encabezados, imágenes, control de cambios y comentarios. No sirve para PDFs ni hojas de cálculo. - [Pptx](https://skillsagentes.com/skills/anthropics/skills/pptx.md): Úsalo siempre que haya un archivo .pptx o .potx de por medio: crear decks y presentaciones, leer o extraer su texto, editarlas, o trabajar con plantillas, layouts y notas del ponente. - [Xlsx](https://skillsagentes.com/skills/anthropics/skills/xlsx.md): Úsalo siempre que una hoja de cálculo sea la entrada o la salida principal: abrir, leer, editar o arreglar .xlsx, .csv o .tsv, crear una desde cero, o limpiar datos tabulares desordenados. - [Documentation And Adrs](https://skillsagentes.com/skills/addyosmani/agent-skills/documentation-and-adrs.md): Registra decisiones y documentación. Úsalo para documentar una decisión de arquitectura (ADR), al cambiar APIs públicas, al lanzar funcionalidades, o para dejar constancia del contexto que futuros ingenieros y agentes necesitarán. - [Docx](https://skillsagentes.com/skills/k-dense-ai/scientific-agent-skills/docx.md): Crea, lee, edita y manipula documentos Word (.docx) y plantillas (.dotx): informes, memos, cartas, tablas de contenido, imágenes, buscar-reemplazar, cambios controlados y comentarios. --- Skills Agentes · [Índice de páginas en markdown](https://skillsagentes.com/sitemap.md) · [Inicio](https://skillsagentes.com/index.md)