Správa dokumentů

Správa dokumentů

Document je vstupním bodem pro každou operaci správy dokumentů, která je zde pokryta: otevírání a ukládání souborů, export do HTML, přidávání volitelných vrstev obsahu, vytváření Tagged PDF a čtení nebo zápis dat AcroForm. Page a Form jsou dosažitelné přes Document.Page(n) a Document.Form().


Otevírání a ukládání dokumentů

pdf.Open načte PDF z cesty k souboru; pdf.OpenWithPassword provede totéž pro soubory chráněné heslem. Document.Save zapíše výsledek na novou cestu k souboru.

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

Exportování do HTML

Document.SaveHTML a Document.WriteHTML převádějí dokument do HTML. HTMLSaveOptions.Mode vybírá reprezentaci: HTMLModeText (viditelný stylovaný text nad rastrovým pozadím bez glifu), HTMLModeNative (grafika stránky jako jedna vložená SVG vrstva) nebo HTMLModeFlow (přetékavý HTML s nadpisy a odstavci ve čtecím pořadí). Pokud není Mode nastaveno, vznikne věrná výchozí podoba: plná stránka rastrového obrazu s průhlednou vrstvou výběrového textu.

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

Správa volitelných vrstev obsahu

Document.AddLayer(name) vytvoří novou volitelnou skupinu obsahu a vrátí *Layer; Document.Layers() vypíše všechny již existující vrstvy. Page.BeginLayer / Page.EndLayer označují obsah stránky jako patřící k vrstvě a Layer.SetVisible(false) tento obsah skryje.

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

Vytváření označených (přístupných) PDF

Document.TaggedContent() vrací *TaggedContent fasádu, která vlastní logický strom struktury dokumentu, a nastavuje metadata katalogu požadovaná PDF/UA. Page.TagContent uzavírá volání kreslení v označeném obsahu a vrací *StructElement pro tento uzel.

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

Skupinové elementy se také vnořují pod kořen stromu:

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

Export a import dat formuláře jako JSON

Form.ExportJSON serializuje každý typ pole a jeho hodnotu do JSON ({"name": {"type": "text", "value": "Jane"}, ...}); Form.ImportJSON aplikuje JSON payload na formulář a vrací počet polí, která aktualizoval. JSONExportOptions.Indent pěkně formátuje výstup.

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)

Tipy a osvědčené postupy

  • Zvolte HTMLModeNative pro stránky s velkým množstvím vektorů, HTMLModeFlow pro reflow/mobilní čtení a věrnou výchozí možnost (žádné Mode nenastaveno), když je nejdůležitá vizuální věrnost.
  • Zavolejte Layer.SetVisible(false) před Save, abyste ve výchozím nastavení skryli vodoznak nebo vrstvy anotací, přičemž obsah zůstane adresovatelný pomocí objektu Layer.
  • Nastavte TaggedContent.SetTitle a SetLanguage před voláním Page.TagContent, protože validace PDF/UA kontroluje metadata na úrovni katalogu, která tyto metody zapisují.
  • Zavolejte StructElement.SetAlt na každém uzlu StructFigure — obrázky bez alternativního textu neprojdou validací PDF/UA.
  • Použijte JSONExportOptions.Indent pro lidsky čitelný diff exportovaného stavu formuláře; vynechejte jej pro kompaktní stroj-strojové payloady.

Běžné problémy

ProblémPříčinaOprava
Výstup HTML nemá žádné vybratelné textové glyfyHTMLSaveOptions.Mode ponechán na věrném výchozím nastavení bez požadavku na textovou vrstvuNastavte Mode: pdf.HTMLModeText pro viditelnou, stylovanou textovou vrstvu
Export HTML ztrácí vzhled zdrojového fontuNoFontEmbedding nastaven na trueNechte NoFontEmbedding false (výchozí), aby vložené fonty byly přebaleny jako WOFF @font-face data URL
Page.TagContent vrací chybuVoláno před tím, než Document.TaggedContent() inicializoval strukturu stromuZavolejte Document.TaggedContent() (a nastavte název/jazyk) před prvním voláním TagContent
ValidatePDFUA hlásí nevyhovující obrázkyPrvek StructFigure nemá alternativní textZavolejte StructElement.SetAlt na každém uzlu obrázku
Form.ImportJSON aktualizuje méně polí, než se očekávaloNázvy polí payloadu JSON neodpovídají názvům polí cílového formuláře; import je tolerantní a přeskočí neodpovídající položkyPotvrďte, že exportovaná názvy polí přesně odpovídají názvům polí cílového formuláře

FAQ

Který exportní režim HTML mám použít?

HTMLModeText pro nejmenší, plně vybíratelný výstup; HTMLModeNative, když je důležitější věrnost vektorů (křivky, nativní tahy) než velikost souboru; HTMLModeFlow pro přizpůsobitelný, mobilně přátelský čtecí rozvržení. Nechte Mode nenastavené pro výchozí nastavení raster-plus-transparent-text.

Mohu exportovat jen konkrétní stránky do HTML?

Ano. Nastavte HTMLSaveOptions.Pages na úsek čísel stránek počínajících od 1, např. pdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []int{1, 3}}}}.

Jak mohu vrstvu ve výchozím nastavení skrýt, ale umožnit divákovi ji znovu zapnout?

Zavolejte Layer.SetVisible(false) před uložením. Vrstva zůstává adresovatelnou Optional Content Group; Layer.IsVisible() hlásí její aktuální stav.

Zahrnuje export formuláře JSON typy polí?

Ano. Každé exportované pole je objekt JSON s klíči type a value, např. {"subscribe": {"type": "checkbox", "value": true}}.

Musím volat TagContent pro každý prvek, nebo mohu skupiny vnořit přímo?

Obojí. Page.TagContent obaluje volání kreslení a přidává listový strukturální prvek. Pro seskupování prvků (tabulky, seznamy) zavolejte StructElement.AddChild na kořen stromu nebo nadřazený prvek, abyste nejprve vytvořili vnoření, a pak označte podřazený listový obsah.


API Reference Shrnutí

Třída/metodaPopis:
Document.SaveHTML / WriteHTMLExportujte dokument do HTML, řízený HTMLSaveOptions
HTMLSaveOptionsHTML konfigurace exportu: režim, DPI, podmnožina stránek, zpracování zdrojů
Document.AddLayer / LayersVytvořit nebo vypsat volitelné skupiny obsahu v dokumentu
Page.BeginLayer / EndLayerOznačit obsah stránky jako patřící k vrstvě
LayerVolitelná skupina obsahu — název a viditelnost
Document.TaggedContentFasáda pro logický strom struktury dokumentu (Tagged PDF)
TaggedContentNastavuje název/jazyk dokumentu a zpřístupňuje kořen stromu struktury
Page.TagContent / TagArtifactZahrnuje volání pro kreslení závorek v označeném obsahu a strukturovaných prvcích
StructElementUzel v logickém stromu struktury— potomci, alternativní text, jazyk
Form.ExportJSON / ImportJSONSerializovat nebo použít data pole AcroForm jako JSON
JSONExportOptionsJSON exportní konfigurace: odsazení, vynechat prázdné

Viz také:

 Čeština