مقدمه
Aspose.PDF FOSS برای Go اکنون اسناد PDF را به HTML صادر میکند، لایههای محتوای اختیاری را در درخت صفحه نمایش میدهد و یک واسط برای نوشتن اسناد PDF برچسبگذاریشده (قابل دسترس) فراهم میکند. این افزودهها انواع Document، Page و Form را با قابلیتهای مدیریت سند گسترش میدهند که فراتر از جریانهای پایه باز/ذخیره هستند: تبدیل PDF به صفحهٔ خودکفا HTML، تغییر وضعیت نمایش محتوای لایهای، علامتگذاری ساختار منطقی برای انطباق PDF/UA، و تبادل دادههای فیلد AcroForm به صورت JSON.
این کتابخانه یک ماژول Go است، github.com/aspose-pdf-foss/aspose-pdf-foss-for-go، تحت مجوز MIT منتشر شده و هیچ وابستگی بومی C یا C++ ندارد.
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-goاین پست به بررسی حالتهای جدید صادرات HTML، مدیریت محتوای اختیاری (لایه)، نوشتن محتوای برچسبگذاریشده، و صادرات/واردات فرم JSON میپردازد — که هر کدام بر پایهٔ سطح فعلی API استوار هستند.
ویژگیهای کلیدی
صادرات PDF به HTML
Document.SaveHTML و Document.WriteHTML یک PDF بارگذاریشده را به HTML تبدیل میکنند، که توسط HTMLSaveOptions.Mode کنترل میشود (HTMLModeText برای لایه متنی قابل مشاهده و انتخابی بر روی پسزمینه رستری بدون گلیف؛ HTMLModeNative برای لایه برداری SVG درونخطی؛ HTMLModeFlow برای HTML قابل بازجریان). فیلدهای تعاملی AcroForm میتوانند با InteractiveForms: true به کنترلهای فرم واقعی HTML تبدیل شوند.
doc, _ := pdf.Open("input.pdf")
// Faithful mode (default): full page raster + transparent selectable text layer.
doc.SaveHTML("out.html")
// Visible-text mode: real styled HTML text over a glyph-less background raster.
doc.SaveHTML("out.html", pdf.HTMLSaveOptions{Mode: pdf.HTMLModeText})
// Native mode: page graphics as one inline SVG layer.
doc.SaveHTML("out.html", pdf.HTMLSaveOptions{Mode: pdf.HTMLModeNative})
// Flow mode: reflowable HTML, paragraphs and headings in reading order.
doc.SaveHTML("article.html", pdf.HTMLSaveOptions{Mode: pdf.HTMLModeFlow})
// Interactive forms become fillable HTML controls.
doc.SaveHTML("form.html", pdf.HTMLSaveOptions{Mode: pdf.HTMLModeText, InteractiveForms: true})
لایههای محتوا اختیاری
Document.AddLayer یک گروه محتوا اختیاری (OCG) جدید ایجاد میکند و یک *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) // hide the watermark by default
doc.Save("layered.pdf")
PDF برچسبدار و دسترسیپذیری
Document.TaggedContent واسط *TaggedContent را که درخت ساختار منطقی سند را در اختیار دارد برمیگرداند. TaggedContent.SetTitle / SetLanguage متادیتا در سطح کاتالوگ را که 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.ValidatePDFUA() is now Conformant
صادرات دادههای فرم بهصورت JSON
Form.ExportJSON نوع و مقدار هر فیلد AcroForm را به JSON سریالسازی میکند؛ 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)
شروع سریع
go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-gopackage main
import (
"fmt"
pdf "github.com/aspose-pdf-foss/aspose-pdf-foss-for-go"
)
func main() {
doc, err := pdf.Open("input.pdf")
if err != nil {
panic(err)
}
err = doc.SaveHTML("out.html", pdf.HTMLSaveOptions{Mode: pdf.HTMLModeText})
if err != nil {
panic(err)
}
fmt.Println("HTML export complete")
}
فرمتهای پشتیبانیشده
| قالب | پسوند | خواندن | نوشتن |
|---|---|---|---|
| بله | - | ||
| HTML | html | - | بله |
| JSON | json | - | بله |
منبع باز و مجوزها
Aspose.PDF FOSS برای Go تحت مجوز MIT منتشر شده است: هیچ محدودیت استفادهای وجود ندارد، هزینهٔ زمان اجرا نیست و نیازی به ثبتنام برای استفاده تجاری یا شخصی نیست. کد منبع در github.com/aspose-pdf-foss/aspose-pdf-foss-for-go میزبانی میشود.