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
HTMLModeNativepro stránky s velkým množstvím vektorů,HTMLModeFlowpro reflow/mobilní čtení a věrnou výchozí možnost (žádnéModenenastaveno), když je nejdůležitá vizuální věrnost. - Zavolejte
Layer.SetVisible(false)předSave, abyste ve výchozím nastavení skryli vodoznak nebo vrstvy anotací, přičemž obsah zůstane adresovatelný pomocí objektuLayer. - Nastavte
TaggedContent.SetTitleaSetLanguagepřed volánímPage.TagContent, protože validace PDF/UA kontroluje metadata na úrovni katalogu, která tyto metody zapisují. - Zavolejte
StructElement.SetAltna každém uzluStructFigure— obrázky bez alternativního textu neprojdou validací PDF/UA. - Použijte
JSONExportOptions.Indentpro lidsky čitelný diff exportovaného stavu formuláře; vynechejte jej pro kompaktní stroj-strojové payloady.
Běžné problémy
| Problém | Příčina | Oprava |
|---|---|---|
| Výstup HTML nemá žádné vybratelné textové glyfy | HTMLSaveOptions.Mode ponechán na věrném výchozím nastavení bez požadavku na textovou vrstvu | Nastavte Mode: pdf.HTMLModeText pro viditelnou, stylovanou textovou vrstvu |
| Export HTML ztrácí vzhled zdrojového fontu | NoFontEmbedding nastaven na true | Nechte NoFontEmbedding false (výchozí), aby vložené fonty byly přebaleny jako WOFF @font-face data URL |
Page.TagContent vrací chybu | Voláno před tím, než Document.TaggedContent() inicializoval strukturu stromu | Zavolejte Document.TaggedContent() (a nastavte název/jazyk) před prvním voláním TagContent |
ValidatePDFUA hlásí nevyhovující obrázky | Prvek StructFigure nemá alternativní text | Zavolejte StructElement.SetAlt na každém uzlu obrázku |
Form.ImportJSON aktualizuje méně polí, než se očekávalo | Ná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žky | Potvrď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/metoda | Popis: |
|---|---|
Document.SaveHTML / WriteHTML | Exportujte dokument do HTML, řízený HTMLSaveOptions |
HTMLSaveOptions | HTML konfigurace exportu: režim, DPI, podmnožina stránek, zpracování zdrojů |
Document.AddLayer / Layers | Vytvořit nebo vypsat volitelné skupiny obsahu v dokumentu |
Page.BeginLayer / EndLayer | Označit obsah stránky jako patřící k vrstvě |
Layer | Volitelná skupina obsahu — název a viditelnost |
Document.TaggedContent | Fasáda pro logický strom struktury dokumentu (Tagged PDF) |
TaggedContent | Nastavuje název/jazyk dokumentu a zpřístupňuje kořen stromu struktury |
Page.TagContent / TagArtifact | Zahrnuje volání pro kreslení závorek v označeném obsahu a strukturovaných prvcích |
StructElement | Uzel v logickém stromu struktury— potomci, alternativní text, jazyk |
Form.ExportJSON / ImportJSON | Serializovat nebo použít data pole AcroForm jako JSON |
JSONExportOptions | JSON exportní konfigurace: odsazení, vynechat prázdné |