agentscope-ai/CoPaw

Persönlicher KI-Assistent mit einsteckbaren Agentenfähigkeiten (PDF/Office-Verarbeitung, Terminplanung, Nachrichtenübersicht) und automatischem Laden benutzerdefinierter Fähigkeiten.

Was ist CoPaw?

CoPaw ist ein persönlicher KI-Assistent, der mit erweiterbaren Agentenfähigkeiten ausgestattet ist. Er unterstützt eine breite Palette von Aufgaben, darunter die Verarbeitung von PDF- und Office-Dokumenten, Terminplanung und das Erstellen von Nachrichtenübersichten. Die besondere Stärke liegt in der Möglichkeit, benutzerdefinierte Fähigkeiten automatisch zu laden, was eine hohe Anpassbarkeit an individuelle Workflows ermöglicht. Der Assistent ist in erster Linie für Entwickler und Power-User konzipiert, die ihre Produktivität durch automatisierte, KI-gesteuerte Prozesse steigern möchten. Er nutzt eine Kombination aus Python-Bibliotheken (wie pypdf, pdfplumber und reportlab) und Befehlszeilenwerkzeugen (wie qpdf und pdftotext) für die PDF-Verarbeitung. Darüber hinaus integriert er sich nahtlos in verschiedene Entwicklungsumgebungen und kann über die bereitgestellte Skriptschnittstelle gesteuert werden.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add agentscope-ai/CoPaw

Installed? Explore more Produktivität & Zusammenarbeit skills: steipete/gemini, steipete/gh-issues, steipete/skill-creator · View all 6 →

In Ihrer bevorzugten KI fragen

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

Dokumentation

Wichtig: Alle scripts/-Pfade sind relativ zu diesem Skill-Verzeichnis. Ausführen mit: cd {this_skill_dir} && python scripts/... Oder verwenden Sie den Parameter cwd von execute_shell_command.

PDF-Verarbeitungsleitfaden

Voraussetzungen

  • pypdf: Kernfunktionen zum Lesen und Schreiben von PDFs
  • pdfplumber: Text- und Tabellenextraktion
  • reportlab: PDF-Erstellung
  • pdftotext (poppler-utils): Befehlszeilen-Textextraktion
  • pdftoppm (poppler-utils): PDF-in-Bild-Konvertierung
  • qpdf: PDF-Manipulation (Zusammenführen, Aufteilen, Drehen, Entschlüsseln)

Übersicht

Dieser Leitfaden behandelt grundlegende PDF-Verarbeitungsvorgänge mit Python-Bibliotheken und Befehlszeilenwerkzeugen. Für erweiterte 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

# 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 die 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

Grundlegende PDF-Erstellung

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 Text 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-Tiefstellungs-/Hochstellungszeichen (₀₁₂₃₄₅₆₇₈₉, ⁰¹²³⁴⁵⁶⁷⁸⁹) in ReportLab-PDFs. Die integrierten Schriftarten enthalten diese Glyphen nicht, sodass sie als solide schwarze Kästchen dargestellt werden.

Verwenden Sie stattdessen die XML-Markup-Tags von ReportLab 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'])

Bei Canvas-gezeichnetem Text (nicht Paragraph-Objekten) passen Sie die Schriftgröße und -position manuell an, anstatt Unicode-Tiefstellungs-/Hochstellungszeichen zu verwenden.

Befehlszeilenwerkzeuge

pdftotext (poppler-utils)

# Text extrahieren
pdftotext input.pdf output.txt

# Text unter Beibehaltung des Layouts 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=mypassword --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

# Erfordert: pip install pytesseract pdf2image
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
Befehlszeilen-Zusammenführenqpdfqpdf --empty --pages ...
OCR für gescannte PDFspytesseractZuerst in Bild konvertieren
PDF-Formulare ausfüllenpdf-lib oder pypdf (siehe FORMS.md)Siehe FORMS.md

Nächste Schritte

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

Verwandte Skills