Dokumenthantering

Dokumenthantering

Document är ingångspunkten för varje dokumenthanteringsoperation som behandlas här: öppna och spara filer, exportera till HTML, lägga till valfria innehållslager, skapa Tagged PDF och läsa eller skriva AcroForm data. Page och Form nås via Document.Page(n) och Document.Form().


Öppna och spara dokument

pdf.Open läser in en PDF från en filsökväg; pdf.OpenWithPassword gör samma sak för lösenordsskyddade filer. Document.Save skriver resultatet till en ny filsökväg.

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

Exportera till HTML

Document.SaveHTML och Document.WriteHTML konverterar ett dokument till HTML. HTMLSaveOptions.Mode väljer representationen: HTMLModeText (synlig formaterad text över en glyflös rasterbakgrund), HTMLModeNative (sidgrafik som ett inbäddat SVG-lager), eller HTMLModeFlow (omflödesbar HTML med rubriker och stycken i läsordning). Att låta Mode vara odefinierad ger den trogna standarden: en hel sidrastrering med ett transparent markerbart textlager.

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

Hantera valfria innehållslager

Document.AddLayer(name) skapar en ny Optional Content Group och returnerar en *Layer; Document.Layers() listar varje lager som redan finns. Page.BeginLayer / Page.EndLayer markerar sidinnehåll som tillhör ett lager, och Layer.SetVisible(false) döljer det innehållet.

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

Bygga taggade (tillgängliga) PDF-filer

Document.TaggedContent() returnerar *TaggedContent-fasaden som äger dokumentets logiska strukturträd och sätter katalogmetadata som PDF/UA kräver. Page.TagContent omsluter ett ritningsanrop i markerat innehåll och returnerar en *StructElement för den noden.

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

Grupperande element nestar också under trädroten:

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

Exportera och importera formulärdata som JSON

Form.ExportJSON serialiserar varje fälttyp och värde till JSON ({"name": {"type": "text", "value": "Jane"}, ...}); Form.ImportJSON applicerar en JSON-payload på ett formulär och returnerar antalet fält som uppdaterades. JSONExportOptions.Indent pretty-printar utskriften.

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 och bästa praxis

  • Välj HTMLModeNative för vektortunga sidor, HTMLModeFlow för omläsning/mobil läsning, och den trogna standarden (ingen Mode angiven) när visuell trohet är viktigast.
  • Anropa Layer.SetVisible(false) före Save för att dölja vattenstämpel- eller annoteringslager som standard samtidigt som innehållet förblir adresserbart via Layer-objektet.
  • Ställ in TaggedContent.SetTitle och SetLanguage innan du anropar Page.TagContent, eftersom PDF/UA-valideringen kontrollerar katalognivå-metadata som dessa metoder skriver.
  • Anropa StructElement.SetAlt på varje StructFigure-nod — figurer utan alternativ text misslyckas med PDF/UA-validering.
  • Använd JSONExportOptions.Indent för mänskligt läsbar diff av exporterad formulärstatus; utelämna det för kompakt maskin-till-maskin-payload.

Vanliga problem

ProblemOrsakÅtgärd
HTML output har inga valbara textglyphsHTMLSaveOptions.Mode lämnas på troget standardvärde utan krav på textlagerAnge Mode: pdf.HTMLModeText för ett synligt, stylat textlager
HTML export förlorar källfontens utseendeNoFontEmbedding satt till trueLämna NoFontEmbedding false (standard) så att inbäddade typsnitt omsveps som WOFF @font-face data URLs
Page.TagContent returnerar ett felAnropas innan Document.TaggedContent() initierade strukturträdetAnropa Document.TaggedContent() (och sätt titel/språk) före det första TagContent-anropet
ValidatePDFUA rapporterar icke-konforma figurerEtt StructFigure-element har ingen alt-textAnropa StructElement.SetAlt på varje figurnod
Form.ImportJSON uppdaterar färre fält än förväntatJSON payload-fältnamn matchar inte målformulärets fältnamn; importen är tolerant och hoppar över icke-matchande posterBekräfta att exporterade fältnamn matchar målformulärets fältnamn exakt

FAQ

Vilket HTML-exportläge bör jag använda?

HTMLModeText för den minsta, fullt valbara utmatningen; HTMLModeNative när vektorfidelitet (kurvor, inhemska penseldrag) är viktigare än filstorlek; HTMLModeFlow för en omflödesbar, mobilvänlig läslayout. Lämna Mode oinställt för den trogna raster-plus-transparent-text-standard.

Kan jag exportera endast specifika sidor till HTML?

Ja. Ställ in HTMLSaveOptions.Pages till ett urval av 1-baserade sidnummer, t.ex. pdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []int{1, 3}}}}.

Hur döljer jag ett lager som standard men låter en betraktare slå på det igen?

Anropa Layer.SetVisible(false) innan du sparar. Lagret förblir en adresserbar Optional Content Group; Layer.IsVisible() rapporterar dess aktuella tillstånd.

Inkluderar JSON-formulärexporten fälttyper?

Ja. Varje exporterat fält är ett JSON-objekt med nycklarna type och value, t.ex. {"subscribe": {"type": "checkbox", "value": true}}.

Behöver jag anropa TagContent för varje element, eller kan jag nästla grupper direkt?

Båda. Page.TagContent omsluter ett ritningsanrop och lägger till ett bladstrukturelement. För att gruppera element (tabeller, listor), anropa StructElement.AddChild på trädets rot eller ett föräldraelement för att först bygga nästlingen, och tagga sedan bladinnehållet under.


API Reference Sammanfattning

Klass/MetodBeskrivning
Document.SaveHTML / WriteHTMLExportera dokumentet till HTML, styrt av HTMLSaveOptions
HTMLSaveOptionsHTML exportkonfiguration: läge, DPI, sidunderuppsättning, resurs-hantering
Document.AddLayer / LayersSkapa eller lista valfria innehållsgrupper i dokumentet
Page.BeginLayer / EndLayerMarkera sidinnehåll som tillhör ett lager
LayerEn valfri innehållsgrupp — namn och synlighet
Document.TaggedContentFacade för dokumentets logiska strukturträd (Tagged PDF)
TaggedContentStäller in dokumentets titel/språk och exponerar strukturträdets rot
Page.TagContent / TagArtifactKlammerritningsanrop i markerat innehåll och strukturelement
StructElementEn nod i det logiska struktenträdet — barn, alternativ text, språk
Form.ExportJSON / ImportJSONSerialisera eller tillämpa AcroForm fältdata som JSON
JSONExportOptionsJSON exportkonfiguration: indrag, utelämna tomma

Se även

 Svenska