दस्तावेज़ प्रबंधन
दस्तावेज़ प्रबंधन
Document यहाँ कवर किए गए प्रत्येक दस्तावेज़-प्रबंधन ऑपरेशन का प्रवेश बिंदु है: फ़ाइलें खोलना और सहेजना, HTML में निर्यात करना, वैकल्पिक सामग्री परतें जोड़ना, टैग्ड PDF बनाना, और AcroForm डेटा पढ़ना या लिखना। Page और Form Document.Page(n) और Document.Form() के माध्यम से पहुंचे जाते हैं।
दस्तावेज़ खोलना और सहेजना
pdf.Open फ़ाइल पथ से एक PDF लोड करता है; pdf.OpenWithPassword पासवर्ड-संरक्षित फ़ाइलों के लिए वही करता है। Document.Save परिणाम को एक नए फ़ाइल पथ पर लिखता है।
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")HTML में निर्यात
Document.SaveHTML और Document.WriteHTML दस्तावेज़ को HTML में परिवर्तित करते हैं। HTMLSaveOptions.Mode प्रतिनिधित्व चुनता है: HTMLModeText (ग्लिफ़-रहित रास्टर पृष्ठभूमि पर दृश्य शैलीबद्ध पाठ), HTMLModeNative (पृष्ठ ग्राफ़िक्स एक इनलाइन SVG परत के रूप में), या HTMLModeFlow (शीर्षकों और पैराग्राफ़ों के साथ पढ़ने के क्रम में पुनः-प्रवाहित होने वाला HTML)। Mode को अनसेट छोड़ने से विश्वसनीय डिफ़ॉल्ट मिलता है: पारदर्शी चयन योग्य पाठ परत के साथ पूर्ण पृष्ठ रास्टर।
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"})वैकल्पिक सामग्री परतों का प्रबंधन
Document.AddLayer(name) एक नया Optional Content Group बनाता है और एक *Layer लौटाता है; Document.Layers() पहले से मौजूद हर लेयर को सूचीबद्ध करता है। Page.BeginLayer / Page.EndLayer पेज सामग्री को किसी लेयर से संबंधित चिह्नित करते हैं, और Layer.SetVisible(false) वह सामग्री छिपा देता है।
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")टैग्ड (पहुंचयोग्य) PDFs बनाना
Document.TaggedContent() वह *TaggedContent फ़सादा लौटाता है जो दस्तावेज़ के लॉजिकल स्ट्रक्चर ट्री का स्वामी है और कैटलॉग मेटाडाटा सेट करता है जैसा कि PDF/UA की आवश्यकता है। Page.TagContent मार्क्ड कंटेंट में एक ड्रॉइंग कॉल को कोष्ठक में रखता है और उस नोड के लिए एक *StructElement लौटाता है।
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")एलिमेंट्स को समूहित करना भी ट्री रूट के तहत नेस्ट होता है:
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 })फ़ॉर्म डेटा को JSON के रूप में निर्यात और आयात करना
Form.ExportJSON हर फ़ील्ड प्रकार और मान को JSON ({"name": {"type": "text", "value": "Jane"}, ...}) में सीरियलाइज़ करता है; Form.ImportJSON फ़ॉर्म पर एक JSON पेलोड लागू करता है और अपडेट किए गए फ़ील्डों की संख्या लौटाता है। JSONExportOptions.Indent आउटपुट को सुंदर रूप से प्रिंट करता है।
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)टिप्स और सर्वोत्तम प्रथाएँ
- वेक्टर-भारी पृष्ठों के लिए
HTMLModeNativeचुनें, रीफ़्लो/मोबाइल पढ़ने के लिएHTMLModeFlow, और जब दृश्य सटीकता सबसे अधिक महत्त्वपूर्ण हो तो विश्वसनीय डिफ़ॉल्ट (कोईModeसेट नहीं) चुनें। - डिफ़ॉल्ट रूप से वाटरमार्क या एनोटेशन लेयर्स को छिपाने के लिए
Layer.SetVisible(false)कोSaveसे पहले कॉल करें, जबकि सामग्री कोLayerऑब्जेक्ट के माध्यम से एड्रेसेबल रखा जाए। TaggedContent.SetTitleऔरSetLanguageकोPage.TagContentको कॉल करने से पहले सेट करें, क्योंकि PDF/UA वैलिडेशन उन मेथड्स द्वारा लिखे गए कैटलॉग-लेवल मेटाडाटा की जाँच करता है।- हर
StructFigureनोड परStructElement.SetAltकॉल करें — वैकल्पिक टेक्स्ट के बिना फ़िगर्स PDF/UA वैलिडेशन में फेल हो जाते हैं। - एक्सपोर्टेड फ़ॉर्म स्टेट के मानव-पठनीय डिफ़िंग के लिए
JSONExportOptions.Indentका उपयोग करें; कॉम्पैक्ट मशीन-टू-मशीन पेलोड के लिए इसे छोड़ दें।
सामान्य समस्याएँ
| समस्या | कारण | समाधान |
|---|---|---|
| HTML आउटपुट में कोई चयन योग्य टेक्स्ट glyphs नहीं हैं | HTMLSaveOptions.Mode को विश्वसनीय डिफ़ॉल्ट पर छोड़ दिया गया, बिना टेक्स्ट लेयर की आवश्यकता के | एक दृश्यमान, स्टाइल किए गए टेक्स्ट लेयर के लिए Mode: pdf.HTMLModeText सेट करें |
| HTML निर्यात में स्रोत फ़ॉन्ट की उपस्थिति खो जाती है | NoFontEmbedding को true पर सेट किया गया | छोड़ें NoFontEmbedding false (डिफ़ॉल्ट) ताकि एम्बेडेड फ़ॉन्ट्स को WOFF @font-face डेटा URLs के रूप में पुनः रैप किया जा सके |
Page.TagContent एक त्रुटि लौटाता है | Document.TaggedContent() ने संरचना ट्री को प्रारंभ करने से पहले कॉल किया गया | पहले TagContent कॉल से पहले Document.TaggedContent() को कॉल करें (और शीर्षक/भाषा सेट करें) |
ValidatePDFUA असंगत आंकड़े रिपोर्ट करता है | एक StructFigure तत्व में alt टेक्स्ट नहीं है | प्रत्येक figure नोड पर StructElement.SetAlt को कॉल करें |
Form.ImportJSON अपेक्षा से कम फ़ील्ड अपडेट करता है | JSON payload फ़ील्ड नाम लक्ष्य फ़ॉर्म फ़ील्ड नामों से मेल नहीं खाते; import लचीला है और अनमिलित प्रविष्टियों को छोड़ देता है | सुनिश्चित करें कि निर्यात किए गए फ़ील्ड नाम लक्ष्य फ़ॉर्म फ़ील्ड नामों से बिल्कुल मेल खाते हों |
FAQ
मुझे कौन सा HTML एक्सपोर्ट मोड उपयोग करना चाहिए?
HTMLModeText सबसे छोटे, पूरी तरह से सिलेक्टेबल आउटपुट के लिए; HTMLModeNative जब वेक्टर फिडेलिटी (कर्व्स, नेटिव स्ट्रोक्स) फ़ाइल आकार से अधिक महत्वपूर्ण हो; HTMLModeFlow रीफ़्लोएबल, मोबाइल-फ्रेंडली रीडिंग लेआउट के लिए। विश्वसनीय रास्टर-प्लस-ट्रांसपेरेंट-टेक्स्ट डिफ़ॉल्ट के लिए Mode को अनसेट रखें।
क्या मैं केवल विशिष्ट पृष्ठों को HTML में निर्यात कर सकता हूँ?
हाँ। HTMLSaveOptions.Pages को 1-आधारित पृष्ठ संख्याओं के स्लाइस पर सेट करें, उदाहरण के लिए pdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []int{1, 3}}}}।
डिफ़ॉल्ट रूप से लेयर को कैसे छुपाएँ और दर्शक को इसे फिर से टॉगल करने दें?
सहेजने से पहले Layer.SetVisible(false) को कॉल करें। लेयर एक पता लगाने योग्य Optional Content Group बनी रहती है; Layer.IsVisible() उसकी वर्तमान स्थिति की रिपोर्ट करता है।
क्या JSON फ़ॉर्म निर्यात में फ़ील्ड प्रकार शामिल होते हैं?
हाँ। प्रत्येक निर्यातित फ़ील्ड एक JSON ऑब्जेक्ट है जिसमें type और value कुंजियाँ होती हैं, उदाहरण के लिए {"subscribe": {"type": "checkbox", "value": true}}।
क्या मुझे प्रत्येक तत्व के लिए TagContent को कॉल करना आवश्यक है, या मैं समूहों को सीधे नेस्ट कर सकता हूँ?
दोनों। Page.TagContent एक ड्रॉइंग कॉल को रैप करता है और एक लीफ़ स्ट्रक्चर एलिमेंट जोड़ता है। समूहित तत्वों (टेबल, सूची) के लिए, पहले ट्री रूट या किसी पैरेंट एलिमेंट पर StructElement.AddChild को कॉल करके नेस्टिंग बनाएं, फिर नीचे लीफ़ कंटेंट को टैग करें।
API Reference सारांश
| क्लास/मेथड | विवरण |
|---|---|
Document.SaveHTML / WriteHTML | दस्तावेज़ को HTML में निर्यात करें, जिसे HTMLSaveOptions द्वारा नियंत्रित किया जाता है |
HTMLSaveOptions | HTML निर्यात विन्यास: मोड, DPI, पृष्ठ उपसमुच्चय, संसाधन हैंडलिंग |
Document.AddLayer / Layers | दस्तावेज़ पर वैकल्पिक सामग्री समूह बनाएँ या सूचीबद्ध करें |
Page.BeginLayer / EndLayer | पृष्ठ सामग्री को एक लेयर से संबंधित के रूप में चिह्नित करें |
Layer | एक वैकल्पिक सामग्री समूह — नाम और दृश्यता |
Document.TaggedContent | दस्तावेज़ के तर्कसंगत संरचना पेड़ के लिए फ़ेसाड (Tagged PDF) |
TaggedContent | दस्तावेज़ का शीर्षक/भाषा सेट करता है और structure tree root को उजागर करता है |
Page.TagContent / TagArtifact | Bracket drawing calls को मार्क्ड कंटेंट और स्ट्रक्चर एलिमेंट्स में |
StructElement | logical structure tree में एक node — children, alt text, language |
Form.ExportJSON / ImportJSON | सीरियलाइज़ या लागू करें AcroForm फ़ील्ड डेटा को JSON के रूप में |
JSONExportOptions | JSON निर्यात कॉन्फ़िगरेशन: इंडेंटेशन, खाली को छोड़ें |