Dokumentumkezelés
Dokumentumkezelés
Document az itt bemutatott minden dokumentumkezelési művelet kiindulópontja: fájlok megnyitása és mentése, exportálás HTML formátumba, opcionális tartalmi rétegek hozzáadása, Tagged PDF szerkesztése, valamint AcroForm adatok olvasása vagy írása. Page és Form a Document.Page(n) és Document.Form() segítségével érhetők el.
Dokumentumok megnyitása és mentése
pdf.Open PDF-et tölt be egy fájlútvonalról; pdf.OpenWithPassword ugyanígy jár el jelszóval védett fájlok esetén. Document.Save az eredményt egy új fájlútvonalra írja.
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")Exportálás HTML formátumba
Document.SaveHTML és Document.WriteHTML dokumentumot konvertálnak HTML formátumba. HTMLSaveOptions.Mode határozza meg a megjelenítést: HTMLModeText (látható, formázott szöveg egy glif nélküli raszter háttér felett), HTMLModeNative (oldalgrafika egyetlen beágyazott SVG rétegként), vagy HTMLModeFlow (újraformázható HTML címsorokkal és bekezdésekkel olvasási sorrendben). Ha Mode nincs beállítva, a hiteles alapértelmezés érvényesül: egy teljes oldalraszter átlátszó, kijelölhető szövegréteggel.
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"})Opcionális tartalomrétegek kezelése
Document.AddLayer(name) létrehoz egy új Optional Content Groupot, és visszaad egy *Layer; Document.Layers() felsorolja az összes már meglévő réteget. Page.BeginLayer / Page.EndLayer a lap tartalmát egy réteghez rendelik, a Layer.SetVisible(false) pedig elrejti azt.
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")Címkézett (hozzáférhető) PDF-ek létrehozása
Document.TaggedContent() visszaadja a *TaggedContent felületet, amely a dokumentum logikai struktúrafáját birtokolja, és beállítja a katalógus metaadatait, ahogy a PDF/UA megköveteli. Page.TagContent zárójelez egy rajzolási hívást a megjelölt tartalomban, és visszaad egy *StructElement az adott csomóponthoz.
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")Az elemek csoportosítása is a fa gyökerébe ágyazódik:
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 })Űrlapadatok exportálása és importálása JSON formátumban
Form.ExportJSON sorosít minden mezőtípust és értéket a JSON formátumba ({"name": {"type": "text", "value": "Jane"}, ...}); Form.ImportJSON egy JSON terhet alkalmaz az űrlapra, és visszaadja a frissített mezők számát. JSONExportOptions.Indent szépen formázza a kimenetet.
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)Tippek és bevált gyakorlatok
- Válassza a
HTMLModeNativebeállítást vektor-intenzív oldalakhoz, aHTMLModeFlowbeállítást újrafolyamozott/mobil olvasáshoz, és a megbízható alapértelmezettet (nincsModebeállítva), amikor a vizuális hűség a legfontosabb. - A
Layer.SetVisible(false)használataSaveelőtt alapértelmezés szerint elrejti a vízjelet vagy a megjegyzésrétegeket, miközben a tartalom elérhető marad aLayerobjektumon keresztül. - Állítsa be a
TaggedContent.SetTitleés aSetLanguageértékeit aPage.TagContentmeghívása előtt, mivel a PDF/UA ellenőrzés a katalógusszintű metaadatokat vizsgálja, amelyeket ezek a módszerek írnak. - A
StructElement.SetAltmindenStructFigurecsomóponton történő alkalmazása – a helyettesítő szöveg nélküli ábrák nem felelnek meg a PDF/UA ellenőrzésnek. - Használja a
JSONExportOptions.Indentelemet az exportált űrlapállapot ember által olvasható összehasonlításához; hagyja el, ha tömör gép-közti adatcsomagra van szükség.
Gyakori problémák
| Probléma | Ok | Javítás |
|---|---|---|
| HTML kimenetben nincsenek kiválasztható szövegjegyek | HTMLSaveOptions.Mode a hiteles alapértelmezett értéken marad, szövegrétegkövetelmény nélkül | Állítsa be a Mode: pdf.HTMLModeText értéket egy látható, formázott szövegréteghez. |
| HTML exportálásakor elveszik a forrási betűkészlet megjelenése | NoFontEmbedding beállítva true | Hagyja NoFontEmbedding false (alapértelmezett) értéken, hogy a beágyazott betűkészletek újra WOFF @font-face adat-URL-ként legyenek csomagolva |
Page.TagContent hibát ad vissza | A Document.TaggedContent() a struktúrafa inicializálása előtt lett meghívva | Használja a Document.TaggedContent() (és állítsa be a címet/nyelvet) az első TagContent hívás előtt |
ValidatePDFUA nem megfelelő ábrákat jelent | A StructFigure elemnek nincs alternatív szövege | Alkalmazza a StructElement.SetAlt minden ábra csomóponton |
Form.ImportJSON kevesebb mezőt frissít a vártnál | JSON terhelési mezőnevek nem egyeznek a cél űrlap mezőneveivel; az import engedékeny és kihagyja a nem egyező bejegyzéseket | Erősítse meg, hogy az exportált mezőnevek pontosan egyeznek a cél űrlapmezőnevekkel |
FAQ
Melyik HTML export módot használjam?
HTMLModeText a legkisebb, teljesen kiválasztható kimenethez; HTMLModeNative akkor, ha a vektorfidelitás (görbék, natív vonások) fontosabb a fájlméretnél; HTMLModeFlow egy újraolvaszttható, mobilbarát olvasási elrendezéshez. Hagyja a Mode beállítást üresen a hűséges raster-plusz-átlátszó-szöveg alapértelmezetthez.
Exportálhatok csak bizonyos oldalakat a HTML?
Igen. Állítsa be a HTMLSaveOptions.Pages értékét 1-től számozott oldalszámok szeletére, például pdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []int{1, 3}}}}.
Hogyan rejthetem el egy réteget alapértelmezés szerint, de lehetővé tehetem, hogy a néző visszakapcsolja?
A mentés előtt hajtsa végre a Layer.SetVisible(false) hívást. A réteg továbbra is egy címezhető Opcionális Tartalomcsoport marad; a Layer.IsVisible() jelzi a jelenlegi állapotát.
A JSON űrlap-export tartalmazza-e a mező típusait?
Igen. Minden exportált mező egy JSON objektum, amely type és value kulcsokkal rendelkezik, például {"subscribe": {"type": "checkbox", "value": true}}.
Szükséges minden elemnél meghívni a TagContent-t, vagy csoportokat közvetlenül beágyazhatok?
Mindkettő. A Page.TagContent egy rajzolási hívást burkol körbe, és egy levél struktúraelemet ad hozzá. Csoportosító elemek (táblázatok, listák) esetén a StructElement.AddChild hívását alkalmazza a fa gyökerén vagy egy szülőelemen, hogy először felépítse a beágyazást, majd címkézze meg az alatta lévő levél tartalmat.
API Reference Összefoglaló
| Osztály/Módszer | Leírás |
|---|---|
Document.SaveHTML / WriteHTML | Exportálja a dokumentumot a(z) HTML formátumba, a(z) HTMLSaveOptions által vezérelve |
HTMLSaveOptions | HTML export beállítások: mód, DPI, oldal részhalmaz, erőforráskezelés |
Document.AddLayer / Layers | Hozzon létre vagy sorolja fel az opcionális tartalmi csoportokat a dokumentumban |
Page.BeginLayer / EndLayer | Jelölje meg az oldal tartalmát, mint egy réteghez tartozó |
Layer | Opcionális tartalmi csoport — név és láthatóság |
Document.TaggedContent | Felület a dokumentum logikai struktúrafája (Tagged PDF) számára |
TaggedContent | Beállítja a dokumentum címét/nyelvét, és feltárja a struktúrafa gyökerét |
Page.TagContent / TagArtifact | Zárójelezett rajzolási hívások a megjelölt tartalomban és a struktúraelemekben |
StructElement | Egy csomópont a logikai struktúrafában — gyermekek, alternatív szöveg, nyelv |
Form.ExportJSON / ImportJSON | Sorosítsa vagy alkalmazza a AcroForm mező adatát JSON formátumban |
JSONExportOptions | JSON export beállítás: behúzás, üres elhagyása |