Communitygithub.com

TMYTiMidlY/skills

Verwenden Sie dieses Skill, wenn der Benutzer alles mit PDF-Dateien machen möchte. Dazu gehört das Lesen oder Extrahieren von Text/Tabellen aus PDFs, das Kombinieren oder Zusammenführen mehrerer PDFs zu einer, das Aufteilen von PDFs, das Drehen von Seiten und vieles mehr.

Was ist skills?

Dieses Skill bietet eine umfassende Anleitung zur Verarbeitung von PDF-Dateien mithilfe von Python-Bibliotheken und Befehlszeilenwerkzeugen. Es unterstützt die Bibliotheken pypdf, pdfplumber und reportlab sowie CLI-Tools wie pdftotext, qpdf und pdftk. Der Agent kann PDFs zusammenführen, aufteilen, Text und Tabellen extrahieren, Metadaten auslesen, Seiten drehen, Wasserzeichen hinzufügen und PDFs mit Passwörtern schützen. Für gescannte PDFs wird eine OCR-Lösung mit pytesseract und pdf2image bereitgestellt. Das Skill verweist auf eine REFERENCE.md für fortgeschrittene Themen und eine FORMS.md für das Ausfüllen von PDF-Formularen. Die Implementierung erfolgt über Python-Codebeispiele, die der Agent direkt ausführen kann.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add TMYTiMidlY/skills

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

PDF-Verarbeitungsanleitung

Überblick

Diese Anleitung behandelt grundlegende PDF-Verarbeitungsvorgänge mit Python-Bibliotheken und Befehlszeilenwerkzeugen. Für weiterführende Funktionen, JavaScript-Bibliotheken und detaillierte Beispiele siehe REFERENCE.md. Wenn Sie ein PDF-Formular ausfüllen müssen, lesen Sie FORMS.md und befolgen Sie dessen Anweisungen.

Schnellstart

from pypdf import PdfReader, PdfWriter

# Ein PDF lesen
reader = PdfReader("document.pdf")
print(f"Seiten: {len(reader.pages)}")

# Text extrahieren
text = ""
for page in reader.pages:
    text += page.extract_text()

Python-Bibliotheken

pypdf – Grundlegende Operationen

PDFs zusammenführen

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)

PDF aufteilen

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)

Metadaten extrahieren

reader = PdfReader("document.pdf")
meta = reader.metadata
print(f"Titel: {meta.title}")
print(f"Autor: {meta.author}")
print(f"Betreff: {meta.subject}")
print(f"Ersteller: {meta.creator}")

Seiten drehen

reader = PdfReader("input.pdf")
writer = PdfWriter()

page = reader.pages[0]
page.rotate(90)  # 90 Grad im Uhrzeigersinn drehen
writer.add_page(page)

with open("rotated.pdf", "wb") as output:
    writer.write(output)

pdfplumber – Text- und Tabellenextraktion

Text mit Layout extrahieren

import pdfplumber

with pdfplumber.open("document.pdf") as pdf:
    for page in pdf.pages:
        text = page.extract_text()
        print(text)

Tabellen extrahieren

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"Tabelle {j+1} auf Seite {i+1}:")
            for row in table:
                print(row)

Erweiterte Tabellenextraktion

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:  # Prüfen, ob Tabelle nicht leer ist
                df = pd.DataFrame(table[1:], columns=table[0])
                all_tables.append(df)

# Alle Tabellen kombinieren
if all_tables:
    combined_df = pd.concat(all_tables, ignore_index=True)
    combined_df.to_excel("extracted_tables.xlsx", index=False)

reportlab – PDFs erstellen

Einfaches PDF erstellen

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

c = canvas.Canvas("hello.pdf", pagesize=letter)
width, height = letter

# Text hinzufügen
c.drawString(100, height - 100, "Hallo Welt!")
c.drawString(100, height - 120, "Dies ist ein mit reportlab erstelltes PDF")

# Eine Linie hinzufügen
c.line(100, height - 140, 400, height - 140)

# Speichern
c.save()

PDF mit mehreren Seiten erstellen

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 = []

# Inhalt hinzufügen
title = Paragraph("Berichtstitel", styles['Title'])
story.append(title)
story.append(Spacer(1, 12))

body = Paragraph("Dies ist der Textkörper des Berichts. " * 20, styles['Normal'])
story.append(body)
story.append(PageBreak())

# Seite 2
story.append(Paragraph("Seite 2", styles['Heading1']))
story.append(Paragraph("Inhalt für Seite 2", styles['Normal']))

# PDF erstellen
doc.build(story)

Tief- und Hochstellungen

WICHTIG: Verwenden Sie niemals Unicode-Tief-/Hochstellungszeichen (₀₁₂₃₄₅₆₇₈₉, ⁰¹²³⁴⁵⁶⁷⁸⁹) in ReportLab-PDFs. Die integrierten Schriftarten enthalten diese Glyphen nicht, was dazu führt, dass sie als schwarze Kästchen dargestellt werden.

Verwenden Sie stattdessen ReportLabs XML-Markup-Tags in Paragraph-Objekten:

from reportlab.platypus import Paragraph
from reportlab.lib.styles import getSampleStyleSheet

styles = getSampleStyleSheet()

# Tiefstellungen: <sub>-Tag verwenden
chemical = Paragraph("H<sub>2</sub>O", styles['Normal'])

# Hochstellungen: <super>-Tag verwenden
squared = Paragraph("x<super>2</super> + y<super>2</super>", styles['Normal'])

Für Canvas-gezeichneten Text (keine Paragraph-Objekte) passen Sie Schriftgröße und Position manuell an, anstatt Unicode-Tief-/Hochstellungen zu verwenden.

Befehlszeilenwerkzeuge

pdftotext (poppler-utils)

# Text extrahieren
pdftotext input.pdf output.txt

# Text mit Layout extrahieren
pdftotext -layout input.pdf output.txt

# Bestimmte Seiten extrahieren
pdftotext -f 1 -l 5 input.pdf output.txt  # Seiten 1-5

qpdf

# PDFs zusammenführen
qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf

# Seiten aufteilen
qpdf input.pdf --pages . 1-5 -- pages1-5.pdf
qpdf input.pdf --pages . 6-10 -- pages6-10.pdf

# Seiten drehen
qpdf input.pdf output.pdf --rotate=+90:1  # Seite 1 um 90 Grad drehen

# Passwort entfernen
qpdf --password=meinpasswort --decrypt encrypted.pdf decrypted.pdf

pdftk (falls verfügbar)

# Zusammenführen
pdftk file1.pdf file2.pdf cat output merged.pdf

# Aufteilen
pdftk input.pdf burst

# Drehen
pdftk input.pdf rotate 1east output rotated.pdf

Häufige Aufgaben

Text aus gescannten PDFs extrahieren

# Ausführen mit: uv run --with pytesseract --with pdf2image script.py
import pytesseract
from pdf2image import convert_from_path

# PDF in Bilder konvertieren
images = convert_from_path('scanned.pdf')

# OCR für jede Seite
text = ""
for i, image in enumerate(images):
    text += f"Seite {i+1}:\n"
    text += pytesseract.image_to_string(image)
    text += "\n\n"

print(text)

Wasserzeichen hinzufügen

from pypdf import PdfReader, PdfWriter

# Wasserzeichen erstellen (oder vorhandenes laden)
watermark = PdfReader("watermark.pdf").pages[0]

# Auf alle Seiten anwenden
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)

Bilder extrahieren

# Mit pdfimages (poppler-utils)
pdfimages -j input.pdf output_prefix

# Extrahiert alle Bilder als output_prefix-000.jpg, output_prefix-001.jpg usw.

Passwortschutz

from pypdf import PdfReader, PdfWriter

reader = PdfReader("input.pdf")
writer = PdfWriter()

for page in reader.pages:
    writer.add_page(page)

# Passwort hinzufügen
writer.encrypt("userpassword", "ownerpassword")

with open("encrypted.pdf", "wb") as output:
    writer.write(output)

Kurzreferenz

AufgabeBestes WerkzeugBefehl/Code
PDFs zusammenführenpypdfwriter.add_page(page)
PDFs aufteilenpypdfEine Seite pro Datei
Text extrahierenpdfplumberpage.extract_text()
Tabellen extrahierenpdfplumberpage.extract_tables()
PDFs erstellenreportlabCanvas oder Platypus
Zusammenführen über CLIqpdfqpdf --empty --pages ...
Gescannte PDFs OCRpytesseractZuerst in Bild konvertieren
PDF-Formulare ausfüllenpdf-lib oder pypdf (siehe FORMS.md)Siehe FORMS.md

Nächste Schritte

  • Für erweiterte pypdfium2-Nutzung siehe REFERENCE.md
  • Für JavaScript-Bibliotheken (pdf-lib) siehe REFERENCE.md
  • Wenn Sie ein PDF-Formular ausfüllen müssen, folgen Sie den Anweisungen in FORMS.md
  • Für Fehlerbehebungsleitfäden siehe REFERENCE.md

Verwandte Skills