// pdf-go: PDF-Bibliothek in reinem Go

PDFs lesen, prüfen und signieren, in reinem Go

PDF Go liest PDF-Dateien Byte für Byte, prüft ihre Struktur, repariert nur auf Wunsch und schreibt sie wieder. Signaturen, Verschlüsselung, Textextraktion und Rendering sind dabei. Dafür genügt die Go-Standardbibliothek, ganz ohne CGo und Module von Dritten.

  • licenseAGPL-3.0
  • commercialavailable
  • depsgo stdlib only
  • releasev0.1.0-alpha.1
$ pdfgo validate -repair rechnung.pdf
status: failed
checks_passed: false
PDF.REPAIR.STARTXREF: startxref did not identify the current cross-reference section
PDF.XREF.START_OFFSET: startxref 309 does not point to an xref section or stream

$ pdfgo repair rechnung.pdf rechnung-repariert.pdf; echo $?
4
$ pdfgo info rechnung-repariert.pdf
PDF 1.7
pages: 1
diagnostics: 0

$ 

Warum PDF Go

Rechnungen, Verträge und Lieferscheine kommen als PDF. Wer sie automatisch verarbeitet, braucht eine Bibliothek, die nichts verschluckt. Sie muss beschädigte Dateien erkennen, jede Reparatur offen melden und frühere Fassungen einer Datei lesbar halten. Und sie soll sich ohne C-Abhängigkeiten in einen Go-Dienst einbauen lassen. Genau dafür haben wir PDF Go geschrieben.

Was in der Bibliothek steckt

  • pdf.OpenFile(ctx, path, opts)

    Lesen ohne Raten

    Exakte Werte, Querverweistabellen und -streams, Objektstreams und inkrementelle Revisionen. Im Modus Strict wird fehlerhafte Eingabe abgelehnt. Repair schaltest du ausdrücklich ein, und jede Reparatur steht danach in den Diagnosen.

  • document.ResolveRevision(…)

    Frühere Fassungen lesen

    Ältere Revisionen einer Datei lassen sich gezielt auflösen, auch Objekte, die eine spätere Änderung ersetzt oder gelöscht hat. So siehst du, was vor einer Änderung oder Signatur in der Datei stand.

  • pdfgo validate --json

    Struktur prüfen

    Header von PDF 1.0 bis 2.0, Querverweise, Trailer, Streamlängen und linearisierte Dateien. Der Bericht liefert jeden Befund mit Code, als Text oder JSON, und eindeutige Exit-Codes für deine Pipeline.

  • pdfgo sign · pdfgo verify

    Signieren und prüfen

    Detached CMS-Signaturen werden inkrementell in benannte Formularfelder geschrieben, mehrere Signaturen bleiben erhalten. Beim Prüfen kontrolliert PDF Go den ByteRange und das Vertrauen gegen deine X.509-Wurzeln.

  • pdfgo encrypt · pdfgo decrypt

    Verschlüsseln

    Der Standard Security Handler R2 bis R6 mit RC4, AES-128 und AES-256. Neue Dateien verschlüsselt PDF Go mit R6 und AES-256.

  • pdfgo extract · pdfgo render

    Text und Bild

    Text kommt in Inhaltsreihenfolge über ToUnicode heraus, ohne zu raten. Seiten mit Vektoren, Bildern, TrueType- und Type3-Schriften rendert PDF Go als PNG.

  • document.BeginEdit()

    Bearbeiten und schreiben

    Änderungen laufen in isolierten Transaktionen. Danach schreibst du die Datei deterministisch neu oder hängst die Änderung inkrementell an.

Quickstart

  1. Nimm die Bibliothek mit go get in dein Modul auf. Du brauchst Go 1.26 oder neuer.
  2. Öffne eine Datei im Modus Strict und lies Katalog, Seiten und Objekte.
  3. Installiere das Kommandozeilenwerkzeug pdfgo für Prüfung, Reparatur, Signatur und Rendering.
  4. Werte in deiner Pipeline die Exit-Codes aus: 3 steht für fehlgeschlagene Prüfungen, 4 für eine reparierte Datei.
$ go get gitlab.schukai.com/oss/libraries/go/documents/pdf@v0.1.0-alpha.1
$ go install gitlab.schukai.com/oss/libraries/go/documents/pdf/cmd/pdfgo@v0.1.0-alpha.1

document, err := pdf.OpenFile(ctx, "vertrag.pdf", pdf.OpenOptions{
    Mode: pdf.Strict,
})
// …
fmt.Printf("PDF %s, %d pages\n", document.Version(), len(pages))

Darauf kannst du dich verlassen

  • Nur die Go-Standardbibliothek.Kein CGo und keine Module von Dritten. go list -m all zeigt genau ein Modul.
  • Selbst geschrieben, klare Herkunft.Code, Regeltabellen und Testdateien stammen von uns. Aus anderen PDF-Implementierungen wird nichts übernommen; die ISO-Normen dienen als Spezifikation.
  • Ein Bericht, der sagt, was geprüft wurde.Der Prüfbericht trennt bestandene Prüfungen (checks_passed) von vollständiger Profilabdeckung (complete). So weißt du genau, worauf ein Ergebnis beruht.
  • Grenzen statt Überraschungen.Konfigurierbare Limits, Abbruch über context, sicherer paralleler Zugriff und kein Netzwerkzugriff von sich aus.
  • Getestet, wie ein Parser es braucht.Zur Release-Prüfung gehören Tests mit Race-Detector und go vet, dazu Fuzzing mit beschädigten Eingaben.

Lizenzen

  • Open Source unter AGPL-3.0.Für Open-Source-Projekte nutzt du PDF Go unter der GNU Affero General Public License, Version 3.
  • Kommerzielle Lizenz für deine Software.Du willst PDF Go in einem Produkt oder Dienst einsetzen, ohne deinen Code unter der AGPL offenzulegen? Dafür bieten wir eine kommerzielle Lizenz an. Schreib uns, wir machen dir ein Angebot.

FAQ

Welches Release ist aktuell?

Aktuell ist v0.1.0-alpha.1 vom 28. Oktober 2026. Bis zur Version 1.0 kann sich die API noch ändern. Jede Änderung steht im Changelog des Repositorys.

Brauche ich C-Bibliotheken oder fremde Go-Module?

Nein. PDF Go baut mit CGO_ENABLED=0 und nutzt nur die Go-Standardbibliothek. Dein Binary bleibt statisch und lässt sich leicht prüfen.

Was bedeuten die Exit-Codes von pdfgo?

0 für Erfolg, 1 für Aufruf- oder Dateifehler, 2 für Verarbeitungsfehler, 3 für fehlgeschlagene Prüfungen und 4 für eine reparierte Datei. 5 und 6 melden, dass eine Prüfung noch nicht vollständig ist oder eine manuelle Durchsicht braucht.

Wo bekomme ich eine kommerzielle Lizenz oder Unterstützung?

Bei uns. Schreib uns, wofür du PDF Go einsetzen willst, dann bekommst du ein Angebot für Lizenz und Unterstützung.

PDF-Verarbeitung in deiner Software?

Wir sind die Entwickler hinter PDF Go. Ob Belegeingang, Archiv oder Signaturablauf: Wir lizenzieren die Bibliothek für dein Produkt oder bauen die PDF-Verarbeitung gleich mit dir ein.