Dokumentenverwaltung

Dokumentenverwaltung

Dokumentenverwaltung

Document ist der Einstiegspunkt für jede hier behandelte Dokumentenverwaltungs-Operation: Öffnen und Speichern von Dateien, Exportieren nach HTML, Hinzufügen optionaler Inhaltsebenen, Erstellen von Tagged PDF und Lesen oder Schreiben von AcroForm-Daten. Page und Form werden über Document.Page(n) bzw. Document.Form() erreicht.


Öffnen und Speichern von Dokumenten

pdf.Open lädt ein PDF von einem Dateipfad; pdf.OpenWithPassword tut dasselbe für passwortgeschützte Dateien. Document.Save schreibt das Ergebnis in einen neuen Dateipfad.

doc, err := pdf.Open("input.pdf")
if err != nil {
	panic(err)
}

_, err = pdf.OpenWithPassword("locked.pdf", "userpassword")
if err != nil {
	panic(err)
}

err = doc.Save("output.pdf")

Exportieren nach HTML

Document.SaveHTML und Document.WriteHTML konvertieren ein Dokument nach HTML. HTMLSaveOptions.Mode wählt die Darstellung aus: HTMLModeText (sichtbarer formatierter Text über einem glyph-losen Raster-Hintergrund), HTMLModeNative (Seitengrafiken als eine inline SVG-Ebene) oder HTMLModeFlow (fließbarer HTML mit Überschriften und Absätzen in Lesereihenfolge). Wenn Mode nicht gesetzt ist, entsteht die getreue Vorgabe: ein ganzseitiges Raster mit einer transparenten, auswählbaren Textebene.

doc, _ := pdf.Open("input.pdf")

// Faithful mode (default)
doc.SaveHTML("out.html")

// Visible-text mode
doc.SaveHTML("out.html", pdf.HTMLSaveOptions{Mode: pdf.HTMLModeText})

// Multi-file output: external resources plus one HTML file per page
doc.SaveHTML("site/doc.html", pdf.HTMLSaveOptions{
    Mode: pdf.HTMLModeNative, ResourceDir: "assets", SplitPages: true,
})

// Page subset, custom raster DPI and title
doc.SaveHTML("part.html", pdf.HTMLSaveOptions{Pages: []int{1, 3}, DPI: 96, Title: "Report"})

Verwalten optionaler Inhaltsebenen

Document.AddLayer(name) erstellt eine neue Optional Content Group und gibt ein *Layer zurück; Document.Layers() listet alle bereits vorhandenen Ebenen auf. Page.BeginLayer / Page.EndLayer kennzeichnen Seiteninhalt als zu einer Ebene gehörend, und Layer.SetVisible(false) blendet diesen Inhalt aus.

doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)
layer := doc.AddLayer("Watermark")

page, _ := doc.Page(1)
page.BeginLayer(layer)
page.AddText("DRAFT", pdf.TextStyle{Font: pdf.FontHelveticaBold, Size: 48},
    pdf.Rectangle{LLX: 150, LLY: 400, URX: 450, URY: 460})
page.EndLayer()

layer.SetVisible(false)
doc.Save("layered.pdf")

Erstellung von getaggten (barrierefreien) PDFs

Document.TaggedContent() gibt die *TaggedContent Fassade zurück, die den logischen Strukturbaum des Dokuments besitzt und setzt die Katalog-Metadaten, die PDF/UA erfordert. Page.TagContent umschließt einen Zeichenaufruf in markiertem Inhalt und gibt ein *StructElement für diesen Knoten zurück.

doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)
tc := doc.TaggedContent()
tc.SetTitle("Quarterly Report")
tc.SetLanguage("en-US")
page, _ := doc.Page(1)

page.TagContent(tc.Root(), pdf.StructH1, func() error {
    return page.AddText("Quarterly Report", pdf.TextStyle{Font: pdf.FontHelveticaBold, Size: 24},
        pdf.Rectangle{LLX: 50, LLY: 760, URX: 545, URY: 800})
})
fig, _ := page.TagContent(tc.Root(), pdf.StructFigure, func() error {
    return page.AddImage("chart.png", pdf.Rectangle{LLX: 50, LLY: 540, URX: 300, URY: 680})
})
fig.SetAlt("Bar chart of Q3 sales by region") // required for figures

doc.Save("accessible.pdf")

Gruppierende Elemente verschachteln sich ebenfalls unter der Baumwurzel:

doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)
tc := doc.TaggedContent()
page, _ := doc.Page(1)

tbl := tc.Root().AddChild(pdf.StructTable)
row := tbl.AddChild(pdf.StructTR)
cell := row.AddChild(pdf.StructTD)
page.TagContent(cell, pdf.StructP, func() error { return nil })

Exportieren und Importieren von Formulardaten als JSON

Form.ExportJSON serialisiert jeden Feldtyp und Wert nach JSON ({"name": {"type": "text", "value": "Jane"}, ...}); Form.ImportJSON wendet eine JSON Nutzlast auf ein Formular an und gibt die Anzahl der aktualisierten Felder zurück. JSONExportOptions.Indent formatiert die Ausgabe leserlich.

doc, _ := pdf.Open("filled.pdf")
data, _ := doc.Form().ExportJSON(pdf.JSONExportOptions{Indent: true})

// Fill a template from a JSON payload; discard the applied-field count.
template, _ := pdf.Open("template.pdf")
_, _ = template.Form().ImportJSON(data)

Tipps und bewährte Verfahren

  • Wählen Sie HTMLModeNative für vektorreiche Seiten, HTMLModeFlow für Reflow-/Mobile-Lesung und die treue Standardeinstellung (kein Mode gesetzt), wenn die visuelle Treue am wichtigsten ist.
  • Rufen Sie Layer.SetVisible(false) vor Save auf, um Wasserzeichen- oder Anmerkungsebenen standardmäßig zu verbergen, während der Inhalt über das Layer-Objekt adressierbar bleibt.
  • Setzen Sie TaggedContent.SetTitle und SetLanguage, bevor Sie Page.TagContent aufrufen, da die PDF/UA-Validierung die katalogbasierten Metadaten prüft, die diese Methoden schreiben.
  • Rufen Sie StructElement.SetAlt für jeden StructFigure-Knoten auf — Abbildungen ohne Alternativtext bestehen die PDF/UA-Validierung nicht.
  • Verwenden Sie JSONExportOptions.Indent für menschenlesbare Unterschiede des exportierten Formularzustands; lassen Sie es bei kompakten Maschinen-zu-Maschinen-Payloads weg.

Häufige Probleme

ProblemUrsacheLösung
HTML Ausgabe hat keine auswählbaren TextglyphenHTMLSaveOptions.Mode bleibt bei getreuer Standardeinstellung ohne Anforderung einer TextebeneSetze Mode: pdf.HTMLModeText für eine sichtbare, formatierte Textebene
Export von HTML verliert das ursprüngliche SchriftbildNoFontEmbedding auf true gesetztLassen Sie NoFontEmbedding false (Standard), damit eingebettete Schriften als WOFF @font-face-Daten-URLs neu verpackt werden
Page.TagContent gibt einen Fehler zurückAufgerufen, bevor Document.TaggedContent() den Strukturbaum initialisiert hatRufen Sie Document.TaggedContent() auf (und setzen Sie Titel/Sprache) vor dem ersten Aufruf von TagContent
ValidatePDFUA meldet nicht konforme AbbildungenEin StructFigure-Element hat keinen Alt-TextRufen Sie StructElement.SetAlt für jeden Abbildungsknoten auf
Form.ImportJSON aktualisiert weniger Felder als erwartetJSON-Payload-Feldnamen stimmen nicht mit den Feldnamen des Zielformulars überein; der Import ist nachsichtig und überspringt nicht passende EinträgeBestätigen Sie, dass exportierte Feldnamen exakt mit den Zielformularfeldnamen übereinstimmen

FAQ

Welchen HTML-Exportmodus sollte ich verwenden?

HTMLModeText für die kleinste, vollständig auswählbare Ausgabe; HTMLModeNative, wenn die Vektortreue (Kurven, native Striche) wichtiger ist als die Dateigröße; HTMLModeFlow für ein nachflussfähiges, mobilfreundliches Leselayout. Lassen Sie Mode unverändert für die originalgetreue Raster-plus-transparenten-Text-Standard.

Kann ich nur bestimmte Seiten nach HTML exportieren?

Ja. Setzen Sie HTMLSaveOptions.Pages auf einen Ausschnitt von 1-basierten Seitenzahlen, z.B. pdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []int{1, 3}}}}.

Wie kann ich eine Ebene standardmäßig ausblenden, aber dem Betrachter erlauben, sie wieder einzuschalten?

Rufen Sie Layer.SetVisible(false) vor dem Speichern auf. Die Ebene bleibt eine adressierbare Optional Content Group; Layer.IsVisible() gibt ihren aktuellen Zustand zurück.

Enthält der JSON-Formularexport Feldtypen?

Ja. Jedes exportierte Feld ist ein JSON-Objekt mit den Schlüsseln type und value, z.B. {"subscribe": {"type": "checkbox", "value": true}}.

Muss ich TagContent für jedes Element aufrufen, oder kann ich Gruppen direkt verschachteln?

Beides. Page.TagContent umschließt einen Zeichenaufruf und fügt ein Blatt-Strukturelement hinzu. Für Gruppierungselemente (Tabellen, Listen) rufen Sie StructElement.AddChild an der Baumwurzel oder einem Elternelement auf, um die Verschachtelung zuerst aufzubauen, und kennzeichnen anschließend den darunter liegenden Blattinhalt.


API Reference Zusammenfassung

Klasse/MethodeBeschreibung
Document.SaveHTML / WriteHTMLExportieren Sie das Dokument nach HTML, gesteuert von HTMLSaveOptions
HTMLSaveOptionsHTML Exportkonfiguration: Modus, DPI, Seitenauswahl, Ressourcenverwaltung
Document.AddLayer / LayersErstellen oder Auflisten optionaler Inhaltsgruppen im Dokument
Page.BeginLayer / EndLayerMarkieren Sie Seiteninhalt als zu einer Ebene gehörig
LayerEine optionale Inhaltsgruppe — Name und Sichtbarkeit
Document.TaggedContentFassade für den logischen Strukturbaum des Dokuments (Tagged PDF)
TaggedContentSetzt Dokumenttitel/Sprache und stellt die Wurzel des Strukturbaums bereit
Page.TagContent / TagArtifactAufrufe zum Zeichnen von Klammern in markiertem Inhalt und Strukturelementen
StructElementEin Knoten im logischen Strukturbaum — Kinder, Alternativtext, Sprache
Form.ExportJSON / ImportJSONSerialisieren oder Anwenden von AcroForm-Felddaten als JSON
JSONExportOptionsJSON Exportkonfiguration: Einrückung, leere weglassen

Siehe auch

 Deutsch