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
HTMLModeNativepour les pages riches en vecteurs,HTMLModeFlowpour la lecture en flux/mobilité, et le réglage par défaut fiable (aucuneModedéfinie) lorsque la fidélité visuelle est primordiale. - Appelez
Layer.SetVisible(false)avantSavepour masquer les calques de filigrane ou d’annotation par défaut tout en conservant le contenu adressable via l’objetLayer. - Définissez
TaggedContent.SetTitleetSetLanguageavant d’appelerPage.TagContent, car la validation PDF/UA vérifie les métadonnées au niveau du catalogue que ces méthodes écrivent. - Appelez
StructElement.SetAltsur chaque nœudStructFigure— les figures dépourvues de texte alternatif échouent la validation PDF/UA. - Utilisez
JSONExportOptions.Indentpour 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ème | Cause | Correction |
|---|---|---|
| La sortie HTML n’a aucun glyphe de texte sélectionnable | HTMLSaveOptions.Mode laissé à la valeur par défaut fidèle sans exigence de couche de texte | Définissez Mode: pdf.HTMLModeText pour un calque de texte visible et stylisé |
| L’exportation HTML perd l’apparence de la police source | NoFontEmbedding défini sur true | Laissez 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 erreur | Appelé avant que Document.TaggedContent() n’initialise l’arborescence | Appelez Document.TaggedContent() (et définissez le titre/la langue) avant le premier appel à TagContent |
ValidatePDFUA signale des figures non conformes | Un élément StructFigure n’a pas de texte alternatif | Appelez StructElement.SetAlt sur chaque nœud de figure |
Form.ImportJSON met à jour moins de champs que prévu | Les 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 correspondantes | Confirmez 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éthode | Description |
|---|---|
Document.SaveHTML / WriteHTML | Exportez le document vers HTML, contrôlé par HTMLSaveOptions |
HTMLSaveOptions | Configuration d’exportation HTML : mode, DPI, sous-ensemble de pages, gestion des ressources |
Document.AddLayer / Layers | Créer ou répertorier les groupes de contenu optionnels sur le document |
Page.BeginLayer / EndLayer | Marquer le contenu de la page comme appartenant à une couche |
Layer | Un groupe de contenu optionnel — nom et visibilité |
Document.TaggedContent | Interface pour l’arbre logique de la structure du document (PDF balisé) |
TaggedContent | Définit le titre/la langue du document et expose la racine de l’arborescence de structure |
Page.TagContent / TagArtifact | Appels de dessin d’accolade dans le contenu balisé et les éléments de structure |
StructElement | Un nœud de l’arborescence logique — enfants, texte alternatif, langue |
Form.ExportJSON / ImportJSON | Sérialiser ou appliquer les données du champ AcroForm en tant que JSON |
JSONExportOptions | Configuration d’export JSON : indentation, omit-empty |