Créer un PDF balisé en utilisant C#
Créer un PDF balisé signifie ajouter (ou créer) certains éléments au document qui permettront de valider le document conformément aux exigences PDF/UA. Ces éléments sont souvent appelés Éléments de Structure.
Le code suivant fonctionne également avec la bibliothèque Aspose.PDF.Drawing.
Création d’un PDF balisé (Scénario Simple)
Pour créer des éléments de structure dans un document PDF balisé, Aspose.PDF propose des méthodes pour créer un élément de structure en utilisant l’interface ITaggedContent. Le code suivant montre comment créer un PDF balisé qui contient 2 éléments : en-tête et paragraphe.
private static void CreateTaggedPdfDocument01()
{
// Créer le document PDF
var document = new Document();
// Obtenir le contenu pour travailler avec TaggedPdf
ITaggedContent taggedContent = document.TaggedContent;
var rootElement = taggedContent.RootElement;
// Définir le titre et la langue pour le document
taggedContent.SetTitle("Document PDF balisé");
taggedContent.SetLanguage("en-US");
//
HeaderElement mainHeader = taggedContent.CreateHeaderElement();
mainHeader.SetText("En-tête principal");
ParagraphElement paragraphElement = taggedContent.CreateParagraphElement();
paragraphElement.SetText("Lorem ipsum dolor sit amet, consectetur adipiscing elit. " +
"Aenean nec lectus ac sem faucibus imperdiet. Sed ut erat ac magna ullamcorper hendrerit. " +
"Cras pellentesque libero semper, gravida magna sed, luctus leo. Fusce lectus odio, laoreet" +
"nec ullamcorper ut, molestie eu elit. Interdum et malesuada fames ac ante ipsum primis in faucibus." +
"Aliquam lacinia sit amet elit ac consectetur. Donec cursus condimentum ligula, vitae volutpat" +
"sem tristique eget. Nulla in consectetur massa. Vestibulum vitae lobortis ante. Nulla ullamcorper" +
"pellentesque justo rhoncus accumsan. Mauris ornare eu odio non lacinia. Aliquam massa leo, rhoncus" +
"ac iaculis eget, tempus et magna. Sed non consectetur elit. Sed vulputate, quam sed lacinia luctus," +
"ipsum nibh fringilla purus, vitae posuere risus odio id massa. Cras sed venenatis lacus.");
rootElement.AppendChild(mainHeader);
rootElement.AppendChild(paragraphElement);
// Sauvegarder le document PDF balisé
document.Save("C:\\Samples\\TaggedPDF\\Sample1.pdf");
}
Nous obtiendrons un document suivant après création :
Création de PDF balisé avec des éléments imbriqués (Création d’une arborescence d’éléments de structure)
Dans certains cas, nous avons besoin de créer une structure plus complexe, par exemple placer des citations dans un paragraphe. Pour créer une arborescence d’éléments de structure, nous devrions utiliser la méthode AppendChild. Le fragment de code suivant montre comment créer une arborescence d’éléments de structure d’un document PDF balisé :
private static void CreateTaggedPdfDocument02()
{
// Créer un document PDF
var document = new Document();
// Obtenir le contenu pour travailler avec TaggedPdf
ITaggedContent taggedContent = document.TaggedContent;
var rootElement = taggedContent.RootElement;
// Définir le titre et la langue du document
taggedContent.SetTitle("Document PDF balisé");
taggedContent.SetLanguage("en-US");
HeaderElement header1 = taggedContent.CreateHeaderElement(1);
header1.SetText("Niveau d'en-tête 1");
ParagraphElement paragraphWithQuotes = taggedContent.CreateParagraphElement();
paragraphWithQuotes.StructureTextState.Font = FontRepository.FindFont("Calibri");
paragraphWithQuotes.StructureTextState.MarginInfo = new MarginInfo(10, 5, 10, 5);
SpanElement spanElement1 = taggedContent.CreateSpanElement();
spanElement1.SetText("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean nec lectus ac sem faucibus imperdiet. Sed ut erat ac magna ullamcorper hendrerit. Cras pellentesque libero semper, gravida magna sed, luctus leo. Fusce lectus odio, laoreet nec ullamcorper ut, molestie eu elit. Interdum et malesuada fames ac ante ipsum primis in faucibus. Aliquam lacinia sit amet elit ac consectetur. Donec cursus condimentum ligula, vitae volutpat sem tristique eget. Nulla in consectetur massa. Vestibulum vitae lobortis ante. Nulla ullamcorper pellentesque justo rhoncus accumsan. Mauris ornare eu odio non lacinia. Aliquam massa leo, rhoncus ac iaculis eget, tempus et magna. Sed non consectetur elit. ");
QuoteElement quoteElement = taggedContent.CreateQuoteElement();
quoteElement.SetText("Sed vulputate, quam sed lacinia luctus, ipsum nibh fringilla purus, vitae posuere risus odio id massa.");
quoteElement.StructureTextState.FontStyle = FontStyles.Bold | FontStyles.Italic;
SpanElement spanElement2 = taggedContent.CreateSpanElement();
spanElement2.SetText(" Sed non consectetur elit.");
paragraphWithQuotes.AppendChild(spanElement1);
paragraphWithQuotes.AppendChild(quoteElement);
paragraphWithQuotes.AppendChild(spanElement2);
rootElement.AppendChild(header1);
rootElement.AppendChild(paragraphWithQuotes);
// Sauvegarder le document PDF balisé
document.Save("C:\\Samples\\TaggedPDF\\Sample2.pdf");
}
Nous obtiendrons le document suivant après sa création :
Structurer le style de texte
Pour structurer le style de texte dans un document PDF balisé, Aspose.PDF propose les propriétés Font, FontSize, FontStyle et ForegroundColor de la classe StructureTextState. Le fragment de code suivant montre comment styliser la structure de texte dans un document PDF balisé :
// Pour des exemples complets et des fichiers de données, veuillez aller à https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// Le chemin vers le répertoire des documents.
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();
// Créer un document PDF
Document document = new Document();
// Obtenir le contenu pour travailler avec TaggedPdf
ITaggedContent taggedContent = document.TaggedContent;
// Définir le titre et la langue pour le document
taggedContent.SetTitle("Document PDF balisé");
taggedContent.SetLanguage("en-US");
ParagraphElement p = taggedContent.CreateParagraphElement();
taggedContent.RootElement.AppendChild(p);
// En développement
p.StructureTextState.FontSize = 18F;
p.StructureTextState.ForegroundColor = Color.Red;
p.StructureTextState.FontStyle = FontStyles.Italic;
p.SetText("Texte rouge en italique.");
// Sauvegarder le document PDF balisé
document.Save(dataDir + "StyleTextStructure.pdf");
Illustration des éléments de structure
Afin d’illustrer les éléments de structure dans un document PDF balisé, Aspose.PDF propose la classe IllustrationElement. Le fragment de code suivant montre comment illustrer les éléments de structure dans un document PDF balisé :
// Pour des exemples complets et des fichiers de données, veuillez aller à https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// Le chemin vers le répertoire des documents.
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();
// Créer un document PDF
Document document = new Document();
// Obtenir le contenu pour travailler avec TaggedPdf
ITaggedContent taggedContent = document.TaggedContent;
// Définir le titre et la langue pour le document
taggedContent.SetTitle("Document PDF balisé");
taggedContent.SetLanguage("en-US");
// En développement
IllustrationElement figure1 = taggedContent.CreateFigureElement();
taggedContent.RootElement.AppendChild(figure1);
figure1.AlternativeText = "Figure Un";
figure1.Title = "Image 1";
figure1.SetTag("Fig1");
figure1.SetImage("image.png");
// Sauvegarder le document PDF balisé
document.Save(dataDir + "IllustrationStructureElements.pdf");
Valider le PDF Tagué
Aspose.PDF pour .NET offre la capacité de valider un document PDF tagué PDF/UA. La validation de la norme PDF/UA inclut :
- Vérifications des XObjects
- Vérifications des Actions
- Vérifications du Contenu Optionnel
- Vérifications des Fichiers Incorporés
- Vérifications des Champs de l’Acroform (Valider la Langue Naturelle et le Nom Alternatif et les Signatures Numériques)
- Vérifications des Champs de Formulaire XFA
- Vérifications des Paramètres de Sécurité
- Vérifications de la Navigation
- Vérifications des Annotations
Le fragment de code ci-dessous montre comment valider le document PDF tagué. Les problèmes correspondants seront affichés dans le rapport de journalisation XML.
// Pour des exemples complets et des fichiers de données, veuillez aller à https://github.com/aspose-pdf/Aspose.PDF-for-.NET
// Le chemin vers le répertoire des documents.
string dataDir = RunExamples.GetDataDir_AsposePdf_WorkingDocuments();
string inputFileName = dataDir + "StructureElements.pdf";
string outputLogName = dataDir + "ua-20.xml";
using (var document = new Aspose.Pdf.Document(inputFileName))
{
bool isValid = document.Validate(outputLogName, Aspose.Pdf.PdfFormat.PDF_UA_1);
}