Inhaltsverzeichnis

Dieses Skript führt mehrere PDF-Dateien aus einer Dateispalte zu einem einzigen PDF-Dokument zusammen und speichert das Ergebnis zurück in die Zeile. Nützlich für das Zusammenführen von Rechnungen, Berichten oder anderen Dokumenten.

from seatable_api import Base, context
import pdfmerge
from io import BytesIO
import os

base = Base(context.api_token, context.server_url)
base.auth()

TABLE_NAME = "Documents"
FILES_COLUMN = "PDF Files"
RESULT_COLUMN = "Merged PDF"

rows = base.list_rows(TABLE_NAME)
for row in rows:
    files = row.get(FILES_COLUMN, [])
    if not files or len(files) < 2:
        continue
    if row.get(RESULT_COLUMN):
        continue

    # Download all PDFs
    tmp_files = []
    for i, f in enumerate(files):
        url = f if isinstance(f, str) else f.get('url', '')
        content = base.download_file(url)
        tmp_path = f"/tmp/pdf_{i}.pdf"
        with open(tmp_path, 'wb') as fh:
            fh.write(content)
        tmp_files.append(tmp_path)

    # Merge
    output_path = "/tmp/merged.pdf"
    pdfmerge.pdfmerge(tmp_files, output_path)

    # Upload
    with open(output_path, 'rb') as fh:
        info = base.upload_bytes_file("merged.pdf", fh.read())
    base.update_row(TABLE_NAME, row['_id'], {RESULT_COLUMN: [info.get('url')]})

    # Cleanup
    for f in tmp_files:
        os.remove(f)
    os.remove(output_path)

print("PDFs merged.")

Das Skript überspringt Zeilen, die bereits ein zusammengeführtes PDF haben oder weniger als zwei Dateien enthalten. Passen Sie die Spaltennamen an Ihre Tabellenstruktur an.

Die vollständige Funktionsreferenz finden Sie im SeaTable Developer Manual .