介绍
Aspose.PDF FOSS for 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 for Go 在 MIT 许可证下发布:没有使用限制、没有运行时费用,也无需为商业或个人用途注册。源代码托管在 github.com/aspose-pdf-foss/aspose-pdf-foss-for-go。