Gestion de documents

Gestion de documents

Document est le point d’entrée pour chaque opération de gestion de documents décrite ici: ouverture et enregistrement de fichiers, exportation vers HTML, ajout de calques de contenu optionnels, création de PDF balisé, ainsi que la lecture ou l’écriture des données AcroForm. Page et Form sont accessibles via Document.Page(n) et Document.Form().


Ouverture et enregistrement des documents

pdf.Open charge un PDF à partir d’un chemin de fichier; pdf.OpenWithPassword fait de même pour les fichiers protégés par mot de passe. Document.Save écrit le résultat vers un nouveau chemin de fichier.

doc, err := pdf.Open("input.pdf")
if err != nil {
	panic(err)
}

_, err = pdf.OpenWithPassword("locked.pdf", "userpassword")
if err != nil {
	panic(err)
}

err = doc.Save("output.pdf")

Exportation vers HTML

Document.SaveHTML et Document.WriteHTML convertissent un document en HTML. HTMLSaveOptions.Mode sélectionne la représentation: HTMLModeText (texte stylisé visible sur un fond raster sans glyphes), HTMLModeNative (graphismes de page sous forme d’une seule couche SVG en ligne), ou HTMLModeFlow (reflowable HTML avec titres et paragraphes dans l’ordre de lecture). Laisser Mode non défini produit le comportement par défaut fidèle: un raster de page complète avec une couche de texte transparente et sélectionnable.

doc, _ := pdf.Open("input.pdf")

// Faithful mode (default)
doc.SaveHTML("out.html")

// Visible-text mode
doc.SaveHTML("out.html", pdf.HTMLSaveOptions{Mode: pdf.HTMLModeText})

// Multi-file output: external resources plus one HTML file per page
doc.SaveHTML("site/doc.html", pdf.HTMLSaveOptions{
    Mode: pdf.HTMLModeNative, ResourceDir: "assets", SplitPages: true,
})

// Page subset, custom raster DPI and title
doc.SaveHTML("part.html", pdf.HTMLSaveOptions{Pages: []int{1, 3}, DPI: 96, Title: "Report"})

Gestion des calques de contenu optionnels

Document.AddLayer(name) crée un nouveau groupe de contenu optionnel et renvoie un *Layer; Document.Layers() répertorie chaque calque déjà présent. Page.BeginLayer / Page.EndLayer marquent le contenu de la page comme appartenant à un calque, et Layer.SetVisible(false) masque ce contenu.

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)
doc.Save("layered.pdf")

Création de PDF balisés (accessibles)

Document.TaggedContent() renvoie la façade *TaggedContent qui possède l’arborescence de structure logique du document et définit les métadonnées du catalogue requises par PDF/UA. Page.TagContent encadre un appel de dessin dans du contenu balisé et renvoie un *StructElement pour ce nœud.

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

Les éléments groupés s’imbrent également sous la racine de l’arbre:

doc := pdf.NewDocumentFromFormat(pdf.PageFormatA4)
tc := doc.TaggedContent()
page, _ := doc.Page(1)

tbl := tc.Root().AddChild(pdf.StructTable)
row := tbl.AddChild(pdf.StructTR)
cell := row.AddChild(pdf.StructTD)
page.TagContent(cell, pdf.StructP, func() error { return nil })

Exportation et importation des données de formulaire au format JSON

Form.ExportJSON sérialise chaque type de champ et valeur vers JSON ({"name": {"type": "text", "value": "Jane"}, ...}); Form.ImportJSON applique une charge utile JSON à un formulaire et renvoie le nombre de champs mis à jour. JSONExportOptions.Indent formate joliment la sortie.

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)

Conseils et bonnes pratiques

  • Choisissez HTMLModeNative pour les pages riches en vecteurs, HTMLModeFlow pour la lecture en flux/mobilité, et le réglage par défaut fiable (aucune Mode définie) lorsque la fidélité visuelle est primordiale.
  • Appelez Layer.SetVisible(false) avant Save pour masquer les calques de filigrane ou d’annotation par défaut tout en conservant le contenu adressable via l’objet Layer.
  • Définissez TaggedContent.SetTitle et SetLanguage avant d’appeler Page.TagContent, car la validation PDF/UA vérifie les métadonnées au niveau du catalogue que ces méthodes écrivent.
  • Appelez StructElement.SetAlt sur chaque nœud StructFigure — les figures dépourvues de texte alternatif échouent la validation PDF/UA.
  • Utilisez JSONExportOptions.Indent pour un diff lisible par l’humain de l’état du formulaire exporté ; omettez-le pour des charges utiles compactes machine-à-machine.

Problèmes courants

ProblèmeCauseCorrection
La sortie HTML n’a aucun glyphe de texte sélectionnableHTMLSaveOptions.Mode laissé à la valeur par défaut fidèle sans exigence de couche de texteDéfinissez Mode: pdf.HTMLModeText pour un calque de texte visible et stylisé
L’exportation HTML perd l’apparence de la police sourceNoFontEmbedding défini sur trueLaissez NoFontEmbedding false (par défaut) afin que les polices intégrées soient reconditionnées en tant que URL de données WOFF @font-face
Page.TagContent renvoie une erreurAppelé avant que Document.TaggedContent() n’initialise l’arborescenceAppelez Document.TaggedContent() (et définissez le titre/la langue) avant le premier appel à TagContent
ValidatePDFUA signale des figures non conformesUn élément StructFigure n’a pas de texte alternatifAppelez StructElement.SetAlt sur chaque nœud de figure
Form.ImportJSON met à jour moins de champs que prévuLes noms de champs du payload JSON ne correspondent pas aux noms des champs du formulaire cible ; l’importation est tolérante et ignore les entrées non correspondantesConfirmez que les noms de champs exportés correspondent exactement aux noms de champs du formulaire cible

FAQ

Quel mode d’exportation HTML devrais-je utiliser ?

HTMLModeText pour la sortie la plus petite et entièrement sélectionnable ; HTMLModeNative lorsque la fidélité vectorielle (courbes, traits natifs) prime sur la taille du fichier ; HTMLModeFlow pour une mise en page lisible, adaptative et optimisée pour le mobile. Laissez Mode non défini pour le comportement par défaut fidèle raster+texte transparent.

Puis-je exporter uniquement des pages spécifiques vers HTML?

Oui. Définissez HTMLSaveOptions.Pages sur une tranche de numéros de pages à partir de 1, par ex. pdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []intpdf.HTMLSaveOptions{Pages: []int{1, 3}}}}.

Comment masquer une couche par défaut tout en permettant à l’utilisateur de la réactiver?

Appelez Layer.SetVisible(false) avant d’enregistrer. La couche reste un groupe de contenu optionnel adressable; Layer.IsVisible() indique son état actuel.

L’exportation du formulaire JSON inclut-elle les types de champs?

Oui. Chaque champ exporté est un objet JSON contenant les clés type et value, par ex. {"subscribe": {"type": "checkbox", "value": true}}.

Dois-je appeler TagContent pour chaque élément ou puis-je imbriquer les groupes directement?

Les deux. Page.TagContent encapsule un appel de dessin et ajoute un élément de feuille de structure. Pour regrouper des éléments (tables, listes), appelez StructElement.AddChild sur la racine de l’arbre ou sur un élément parent afin de créer d’abord l’imbrication, puis marquez le contenu de la feuille en dessous.


API Reference Résumé

Classe/MéthodeDescription
Document.SaveHTML / WriteHTMLExportez le document vers HTML, contrôlé par HTMLSaveOptions
HTMLSaveOptionsConfiguration d’exportation HTML : mode, DPI, sous-ensemble de pages, gestion des ressources
Document.AddLayer / LayersCréer ou répertorier les groupes de contenu optionnels sur le document
Page.BeginLayer / EndLayerMarquer le contenu de la page comme appartenant à une couche
LayerUn groupe de contenu optionnel — nom et visibilité
Document.TaggedContentInterface pour l’arbre logique de la structure du document (PDF balisé)
TaggedContentDéfinit le titre/la langue du document et expose la racine de l’arborescence de structure
Page.TagContent / TagArtifactAppels de dessin d’accolade dans le contenu balisé et les éléments de structure
StructElementUn nœud de l’arborescence logique — enfants, texte alternatif, langue
Form.ExportJSON / ImportJSONSérialiser ou appliquer les données du champ AcroForm en tant que JSON
JSONExportOptionsConfiguration d’export JSON : indentation, omit-empty

Voir aussi

 Français