介绍

Aspose.PDF FOSS for Go 现在可以将 PDF 文档导出为 HTML,在页面树上公开可选内容图层,并提供用于创建标记 PDF(可访问)文档的外观。此类新增功能扩展了 DocumentPageForm 类型,赋予文档管理能力,超越基本的打开/保存工作流:将 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.SaveHTMLDocument.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)并返回一个 *LayerDocument.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-go
package 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")
}

支持的格式

格式扩展名读取写入
PDFpdf-
HTMLhtml-
JSONjson-

开源与许可

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


入门指南

相关资源