Introducción

Aspose.PDF FOSS para Go ahora exporta documentos PDF a HTML, expone capas de contenido opcional en el árbol de páginas y proporciona una fachada para crear documentos PDF etiquetado (accesible). Estas incorporaciones amplían los tipos Document, Page y Form con capacidades de gestión de documentos que van más allá de los flujos básicos de abrir/guardar: convertir un PDF en una página HTML autónoma, alternar la visibilidad del contenido en capas, marcar la estructura lógica para la conformidad PDF/UA, y intercambiar datos de campos AcroForm como JSON.

La biblioteca es un módulo Go, github.com/aspose-pdf-foss/aspose-pdf-foss-for-go, lanzado bajo la licencia MIT sin dependencias nativas de C o C++.

go get github.com/aspose-pdf-foss/aspose-pdf-foss-for-go

Esta publicación recorre los nuevos modos de exportación HTML, la gestión de contenido opcional (capa), la creación de contenido etiquetado y la exportación/importación de formularios JSON, cada uno basado en la superficie actual de API.


Características clave

Exportando PDF a HTML

Document.SaveHTML y Document.WriteHTML convierten un PDF cargado a HTML, controlado por HTMLSaveOptions.Mode (HTMLModeText para una capa de texto visible y seleccionable sobre un fondo raster sin glifos; HTMLModeNative para una capa vectorial SVG en línea; HTMLModeFlow para HTML refluible). Los campos interactivos AcroForm pueden convertirse en controles de formulario reales HTML con 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})

Capas de contenido opcional

Document.AddLayer crea un nuevo Grupo de contenido opcional (OCG) y devuelve un *Layer; Document.Layers enumera todas las capas que ya existen en el documento. Una página marca el contenido como perteneciente a una capa con Page.BeginLayer / Page.EndLayer. Layer.SetVisible(false) oculta el contenido de la capa por defecto.

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 etiquetado y accesibilidad

Document.TaggedContent devuelve la fachada *TaggedContent que posee el árbol de estructura lógica del documento. TaggedContent.SetTitle / SetLanguage establecen los metadatos a nivel de catálogo que requiere PDF/UA, y Page.TagContent encierra una llamada de dibujo en contenido marcado mientras añade un nodo *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

Exportar datos de formulario como JSON

Form.ExportJSON serializa el tipo y valor de cada campo AcroForm a JSON; Form.ImportJSON aplica una carga útil JSON de nuevo en un formulario y devuelve el número de campos que actualizó. JSONExportOptions.Indent formatea la salida de forma legible.

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)

Inicio rápido

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")
}

Formatos compatibles

FormatoExtensiónLeerEscribir
PDFpdf-
HTMLhtml-
JSONjson-

Código abierto y licencias

Aspose.PDF FOSS para Go se publica bajo la licencia MIT: sin restricciones de uso, sin tarifas de tiempo de ejecución y sin requisitos de registro para uso comercial o personal. El código fuente está alojado en github.com/aspose-pdf-foss/aspose-pdf-foss-for-go.


Primeros pasos

Recursos Relacionados