Belge Yönetimi
Belge Yönetimi
Document burada ele alınan her belge yönetimi işlemi için giriş noktasıdır: dosyaları açma ve kaydetme, HTML’a dışa aktarma, isteğe bağlı içerik katmanları ekleme, Etiketli PDF oluşturma ve AcroForm verilerini okuma veya yazma. Page ve Form, Document.Page(n) ve Document.Form() aracılığıyla erişilir.
Belgeleri Açma ve Kaydetme
pdf.Open bir dosya yolundan PDF yükler; pdf.OpenWithPassword şifre korumalı dosyalar için aynı işlemi yapar. Document.Save sonucu yeni bir dosya yoluna yazar.
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’a Dışa Aktarma
Document.SaveHTML ve Document.WriteHTML bir belgeyi HTML’a dönüştürür. HTMLSaveOptions.Mode temsili seçer: HTMLModeText (glif içermeyen bir raster arka plan üzerinde görünen biçimlendirilmiş metin), HTMLModeNative (sayfa grafikleri tek bir satır içi SVG katmanı olarak), veya HTMLModeFlow (başlıklar ve paragraflar okuma sırasına göre düzenlenmiş yeniden akışkan HTML). Mode ayarlanmadan bırakılırsa, tam sayfa raster ve şeffaf seçilebilir metin katmanı içeren sadık varsayılan üretilir.
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"})İsteğe Bağlı İçerik Katmanlarını Yönetme
Document.AddLayer(name) yeni bir Opsiyonel İçerik Grubu oluşturur ve bir *Layer döndürür; Document.Layers() zaten mevcut olan her katmanı listeler. Page.BeginLayer / Page.EndLayer sayfa içeriğini bir katmana ait olarak işaretler ve Layer.SetVisible(false) o içeriği gizler.
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")Etiketli (Erişilebilir) PDF’ler Oluşturma
Document.TaggedContent(), belgenin mantıksal yapı ağacına sahip olan *TaggedContent arayüzünü döndürür ve katalog meta verilerini PDF/UA gerektirdiği şekilde ayarlar. Page.TagContent, işaretli içerikte bir çizim çağrısını parantez içine alır ve o düğüm için bir *StructElement döndürür.
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")Elemanları gruplayarak ağaç kökünün altında da iç içe yerleştirir:
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 })Form Verilerini JSON olarak Dışa Aktarma ve İçe Aktarma
Form.ExportJSON, her alan türünü ve değerini JSON ({"name": {"type": "text", "value": "Jane"}, ...}) içine serileştirir; Form.ImportJSON, bir forma JSON yükünü uygular ve güncellediği alan sayısını döndürür. JSONExportOptions.Indent, çıktıyı güzel bir şekilde biçimler.
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)İpuçları ve En İyi Uygulamalar
- Vektör ağırlıklı sayfalar için
HTMLModeNative, yeniden akış/mobil okuma içinHTMLModeFlowve görsel doğruluğun en çok önem taşıdığı durumlarda sadık varsayılanı (hiçModeayarlanmamış) seçin. - Varsayılan olarak filigran veya açıklama katmanlarını gizlemek için
Layer.SetVisible(false)öğesiniSaveöğesinden önce çağırın ve içeriğiLayernesnesi aracılığıyla adreslenebilir tutun. TaggedContent.SetTitleveSetLanguageöğeleriniPage.TagContentçağırmadan önce ayarlayın; çünkü PDF/UA doğrulaması bu yöntemlerin yazdığı katalog düzeyindeki meta verileri kontrol eder.- Her
StructFiguredüğümündeStructElement.SetAltöğesini çağırın — alternatif metni olmayan şekiller PDF/UA doğrulamasında başarısız olur. - Dışa aktarılan form durumunun insan tarafından okunabilir farkını almak için
JSONExportOptions.Indentkullanın; kompakt makine-makine yükleri için ise atlayın.
Yaygın Sorunlar
| Sorun | Neden | Çözüm |
|---|---|---|
| HTML çıktısında seçilebilir metin glifleri yok | HTMLSaveOptions.Mode metin katmanı gereksinimi olmadan sadık varsayılan olarak bırakıldı | Görünür, stillendirilmiş bir metin katmanı için Mode: pdf.HTMLModeText ayarlayın. |
| HTML dışa aktarımı, kaynak font görünümünü yitirir | NoFontEmbedding true olarak ayarlandı | NoFontEmbedding false (varsayılan) bırakın, böylece gömülü fontlar WOFF @font-face veri URL’leri olarak yeniden paketlenir |
Page.TagContent bir hata döndürür | Document.TaggedContent() yapı ağacını başlatmadan önce çağrıldı | İlk TagContent çağrısından önce Document.TaggedContent()‘ı (ve başlık/dil ayarlayarak) çağırın |
ValidatePDFUA uyumsuz figürleri rapor eder | Bir StructFigure öğesinin alt metni yok | Her figür düğümünde StructElement.SetAlt‘ı çağırın |
Form.ImportJSON beklenenden daha az alan günceller | JSON yük verisi alan adları hedef form alan adlarıyla eşleşmiyor; içe aktarım hoşgörülüdür ve eşleşmeyen girişleri atlar | Dışa aktarılan alan adlarının hedef form alan adlarıyla tam olarak eşleştiğini doğrulayın |
FAQ
HTML ihracat modundan hangisini kullanmalıyım?
HTMLModeText en küçük, tamamen seçilebilir çıktı için; HTMLModeNative vektör doğruluğunun (eğriler, yerel darbeler) dosya boyutundan daha önemli olduğu durumlarda; HTMLModeFlow yeniden akışa uygun, mobil dostu bir okuma düzeni için. Mode ayarını bırakın, böylece gerçekçi raster-artı-saydam-metin varsayılanı kullanılır.
Yalnızca belirli sayfaları HTML’a dışa aktarabilir miyim?
Evet. HTMLSaveOptions.Pages‘ı 1 tabanlı sayfa numaralarının bir dilimine ayarlayın, ör. pdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []int{1, 3}}}}.
Bir katmanı varsayılan olarak nasıl gizlerim ancak bir görüntüleyicinin tekrar açmasını sağlarım?
Layer.SetVisible(false)‘ı kaydetmeden önce çağırın. Katman, adreslenebilir bir Optional Content Group olarak kalır; Layer.IsVisible() mevcut durumunu rapor eder.
JSON form dışa aktarımı alan türlerini içeriyor mu?
Evet. Dışa aktarılan her alan, type ve value anahtarlarına sahip bir JSON nesnesidir, ör. {"subscribe": {"type": "checkbox", "value": true}}.
Her öğe için TagContent’ı çağırmam gerekiyor mu, yoksa grupları doğrudan iç içe yerleştirebilir miyim?
Her ikisi de. Page.TagContent, bir çizim çağrısını sarar ve bir yaprak yapı öğesi ekler. Öğeleri gruplamak (tablolar, listeler) için, önce ağaç kökü ya da bir üst öğe üzerinde StructElement.AddChild‘ı çağırarak iç içe yapıyı oluşturun, ardından altındaki yaprak içeriği etiketleyin.
API Reference Özet
| Sınıf/Yöntem | Açıklama |
|---|---|
Document.SaveHTML / WriteHTML | Belgeyi HTML’ye dışa aktar, HTMLSaveOptions tarafından kontrol edilir |
HTMLSaveOptions | HTML dışa aktarma yapılandırması: mod, DPI, sayfa alt kümesi, kaynak yönetimi |
Document.AddLayer / Layers | Belge üzerinde İsteğe Bağlı İçerik Grupları oluşturun veya listeleyin |
Page.BeginLayer / EndLayer | Sayfa içeriğini bir katmana ait olarak işaretle |
Layer | İsteğe Bağlı İçerik Grubu — ad ve görünürlük |
Document.TaggedContent | Belgenin mantıksal yapı ağacı için bir arayüz (Etiketli PDF) |
TaggedContent | Belge başlığını/dilini ayarlar ve yapı ağacının kökünü ortaya çıkarır |
Page.TagContent / TagArtifact | İşaretli içerik ve yapı öğelerinde köşeli parantez çizim çağrıları |
StructElement | Mantıksal yapı ağacındaki bir düğüm — çocuklar, alternatif metin, dil |
Form.ExportJSON / ImportJSON | AcroForm alan verilerini JSON olarak serileştir veya uygula |
JSONExportOptions | JSON dışa aktarma yapılandırması: girinti, omit-empty |