Documentbeheer

Documentbeheer

Document is het toegangspunt voor elke document-beheeroperatie die hier wordt behandeld: het openen en opslaan van bestanden, exporteren naar HTML, het toevoegen van optionele inhoudslagen, het maken van Tagged PDF, en het lezen of schrijven van AcroForm gegevens. Page en Form worden bereikt via Document.Page(n) en Document.Form().


Documenten openen en opslaan

pdf.Open laadt een PDF vanaf een bestandspad; pdf.OpenWithPassword doet hetzelfde voor met wachtwoord beschermde bestanden. Document.Save schrijft het resultaat naar een nieuw bestandspad.

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")

Exporteren naar HTML

Document.SaveHTML en Document.WriteHTML converteren een document naar HTML. HTMLSaveOptions.Mode selecteert de weergave: HTMLModeText (zichtbare gestileerde tekst boven een glyph-loze rasterachtergrond), HTMLModeNative (pagina-graphics als één inline SVG-laag), of HTMLModeFlow (herflowbaar HTML met koppen en alinea’s in leesvolgorde). Het niet instellen van Mode levert de getrouwe standaard op: een volledige paginaraster met een transparante selecteerbare tekstlaag.

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"})

Beheren van optionele inhoudslagen

Document.AddLayer(name) maakt een nieuwe Optional Content Group aan en retourneert een *Layer; Document.Layers() geeft elke reeds aanwezige laag weer. Page.BeginLayer / Page.EndLayer markeren paginainhoud als behorende tot een laag, en Layer.SetVisible(false) verbergt die inhoud.

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")

Tagged (toegankelijke) PDF’s bouwen

Document.TaggedContent() retourneert de *TaggedContent façade die de logische structuurboom van het document bezit en stelt de catalogusmetadata in die PDF/UA vereist. Page.TagContent omringt een tekenaanroep in gemarkeerde inhoud en retourneert een *StructElement voor die node.

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")

Groeperende elementen nestelen ook onder de boomwortel:

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 })

Formuliergegevens exporteren en importeren als JSON

Form.ExportJSON serialiseert elk veldtype en elke waarde naar JSON ({"name": {"type": "text", "value": "Jane"}, ...}); Form.ImportJSON past een JSON payload toe op een formulier en retourneert het aantal velden dat het heeft bijgewerkt. JSONExportOptions.Indent pretty-prints de output.

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)

Tips en best practices

  • Kies HTMLModeNative voor vectorintensieve pagina’s, HTMLModeFlow voor reflow/mobiel lezen, en de getrouwe standaard (geen Mode ingesteld) wanneer visuele getrouwheid het zwaarst weegt.
  • Roep Layer.SetVisible(false) aan vóór Save om watermerk- of annotatielaag(en) standaard te verbergen, terwijl de inhoud adresseerbaar blijft via het Layer object.
  • Stel TaggedContent.SetTitle en SetLanguage in voordat je Page.TagContent aanroept, aangezien PDF/UA validatie de catalogus-niveau metadata controleert die deze methoden schrijven.
  • Roep StructElement.SetAlt aan op elke StructFigure-knoop — afbeeldingen zonder alternatieve tekst falen de PDF/UA-validatie.
  • Gebruik JSONExportOptions.Indent voor menselijk leesbare diffing van geëxporteerde formulierstatus; laat het weg voor compacte machine-naar-machine payloads.

Veelvoorkomende problemen

ProbleemOorzaakOplossing
HTML output heeft geen selecteerbare glyphsHTMLSaveOptions.Mode blijft op de getrouwe standaard zonder een tekstlaagvereisteStel Mode: pdf.HTMLModeText in voor een zichtbare, gestileerde tekstlaag
HTML export verliest het oorspronkelijke lettertype-uiterlijkNoFontEmbedding ingesteld op trueLaat NoFontEmbedding false (standaard) zodat ingesloten lettertypen opnieuw worden verpakt als WOFF @font-face data-URL’s
Page.TagContent geeft een fout terugAangeroepen voordat Document.TaggedContent() de structuurboom initialiseerdeRoep Document.TaggedContent() aan (en stel titel/taal in) vóór de eerste TagContent-aanroep
ValidatePDFUA meldt niet-conforme figurenEen StructFigure-element heeft geen alt-tekstRoep StructElement.SetAlt aan op elke figuurnode
Form.ImportJSON werkt minder velden bij dan verwachtJSON payload-veldnamen komen niet overeen met de veldnamen van het doelformulier; import is tolerant en slaat niet-overeenkomende items overBevestig dat geëxporteerde veldnamen exact overeenkomen met de veldnamen van het doelformulier

FAQ

Welke HTML exportmodus moet ik gebruiken?

HTMLModeText voor de kleinste, volledig selecteerbare output; HTMLModeNative wanneer vector-fidelity (curves, native strokes) belangrijker is dan bestandsgrootte; HTMLModeFlow voor een herbruikbare, mobiel-vriendelijke leesindeling. Laat Mode oningesteld voor de getrouwe raster-plus-transparante-tekst standaard.

Kan ik alleen specifieke pagina’s exporteren naar HTML?

Ja. Stel HTMLSaveOptions.Pages in op een slice van paginanummers beginnend bij 1, bijv. pdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []int{1, 3}}}}.

Hoe verberg ik een laag standaard, maar laat ik een viewer deze weer inschakelen?

Roep Layer.SetVisible(false) aan vóór het opslaan. De laag blijft een adresseerbare Optional Content Group; Layer.IsVisible() rapporteert de huidige status.

Bevat de JSON formulierexport veldtypen?

Ja. Elk geëxporteerd veld is een JSON object met type en value sleutels, bijv. {"subscribe": {"type": "checkbox", "value": true}}.

Moet ik TagContent voor elk element aanroepen, of kan ik groepen direct nesten?

Beide. Page.TagContent wikkelt een tekenaanroep in en voegt een bladstructuurelement toe. Voor groeperende elementen (tabellen, lijsten), roep StructElement.AddChild aan op de boomwortel of een bovenliggend element om eerst de nesting op te bouwen, en tag vervolgens de bladinhoud eronder.


API Reference Samenvatting

Klasse/MethodeBeschrijving
Document.SaveHTML / WriteHTMLExporteer het document naar HTML, beheerd door HTMLSaveOptions
HTMLSaveOptionsHTML exportconfiguratie: modus, DPI, pagina subset, resourceafhandeling
Document.AddLayer / LayersMaak of lijst Optionele Inhoudsgroepen in het document
Page.BeginLayer / EndLayerMarkeer paginainhoud als behorend tot een laag
LayerEen optionele inhoudsgroep — naam en zichtbaarheid
Document.TaggedContentFacade voor de logische structuurboom van het document (Tagged PDF)
TaggedContentStelt de documenttitel/taal in en maakt de wortel van de structuurboom beschikbaar
Page.TagContent / TagArtifactHaakjes-tekenaanroepen in gemarkeerde inhoud en structuur-elementen
StructElementEen knoop in de logische structuurboom — kinderen, alt-tekst, taal
Form.ExportJSON / ImportJSONSerialiseer of pas AcroForm veldgegevens toe als JSON
JSONExportOptionsJSON exportconfiguratie: inspringen, lege weglaten

Zie ook

 Nederlands