Введение
Aspose.PDF FOSS для Go теперь экспортирует PDF-документы в HTML, предоставляет опциональные слои контента в дереве страниц и предлагает фасад для создания Tagged 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 можно преобразовать в настоящие элементы управления формой HTML с помощью InteractiveForms: true.
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.