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
HTMLModeNativevoor vectorintensieve pagina’s,HTMLModeFlowvoor reflow/mobiel lezen, en de getrouwe standaard (geenModeingesteld) wanneer visuele getrouwheid het zwaarst weegt. - Roep
Layer.SetVisible(false)aan vóórSaveom watermerk- of annotatielaag(en) standaard te verbergen, terwijl de inhoud adresseerbaar blijft via hetLayerobject. - Stel
TaggedContent.SetTitleenSetLanguagein voordat jePage.TagContentaanroept, aangezien PDF/UA validatie de catalogus-niveau metadata controleert die deze methoden schrijven. - Roep
StructElement.SetAltaan op elkeStructFigure-knoop — afbeeldingen zonder alternatieve tekst falen de PDF/UA-validatie. - Gebruik
JSONExportOptions.Indentvoor menselijk leesbare diffing van geëxporteerde formulierstatus; laat het weg voor compacte machine-naar-machine payloads.
Veelvoorkomende problemen
| Probleem | Oorzaak | Oplossing |
|---|---|---|
| HTML output heeft geen selecteerbare glyphs | HTMLSaveOptions.Mode blijft op de getrouwe standaard zonder een tekstlaagvereiste | Stel Mode: pdf.HTMLModeText in voor een zichtbare, gestileerde tekstlaag |
| HTML export verliest het oorspronkelijke lettertype-uiterlijk | NoFontEmbedding ingesteld op true | Laat NoFontEmbedding false (standaard) zodat ingesloten lettertypen opnieuw worden verpakt als WOFF @font-face data-URL’s |
Page.TagContent geeft een fout terug | Aangeroepen voordat Document.TaggedContent() de structuurboom initialiseerde | Roep Document.TaggedContent() aan (en stel titel/taal in) vóór de eerste TagContent-aanroep |
ValidatePDFUA meldt niet-conforme figuren | Een StructFigure-element heeft geen alt-tekst | Roep StructElement.SetAlt aan op elke figuurnode |
Form.ImportJSON werkt minder velden bij dan verwacht | JSON payload-veldnamen komen niet overeen met de veldnamen van het doelformulier; import is tolerant en slaat niet-overeenkomende items over | Bevestig 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/Methode | Beschrijving |
|---|---|
Document.SaveHTML / WriteHTML | Exporteer het document naar HTML, beheerd door HTMLSaveOptions |
HTMLSaveOptions | HTML exportconfiguratie: modus, DPI, pagina subset, resourceafhandeling |
Document.AddLayer / Layers | Maak of lijst Optionele Inhoudsgroepen in het document |
Page.BeginLayer / EndLayer | Markeer paginainhoud als behorend tot een laag |
Layer | Een optionele inhoudsgroep — naam en zichtbaarheid |
Document.TaggedContent | Facade voor de logische structuurboom van het document (Tagged PDF) |
TaggedContent | Stelt de documenttitel/taal in en maakt de wortel van de structuurboom beschikbaar |
Page.TagContent / TagArtifact | Haakjes-tekenaanroepen in gemarkeerde inhoud en structuur-elementen |
StructElement | Een knoop in de logische structuurboom — kinderen, alt-tekst, taal |
Form.ExportJSON / ImportJSON | Serialiseer of pas AcroForm veldgegevens toe als JSON |
JSONExportOptions | JSON exportconfiguratie: inspringen, lege weglaten |