Criar PDF Marcado usando C#
Criar um PDF Marcado significa adicionar (ou criar) certos elementos ao documento que permitirão que o documento seja validado de acordo com os requisitos do PDF/UA. Esses elementos são frequentemente chamados de Elementos de Estrutura.
O seguinte trecho de código também funciona com a biblioteca Aspose.PDF.Drawing .
Criando PDF Marcado (Cenário Simples)
Para criar elementos de estrutura em um Documento PDF Marcado, o Aspose.PDF oferece métodos para criar elementos de estrutura usando a interface ITaggedContent . O seguinte trecho de código mostra como criar um PDF Marcado que contém 2 elementos: cabeçalho e parágrafo.
.NET Core 3.1
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreateTaggedPdfDocument01 ()
{
// The path to the documents directory
var dataDir = RunExamples . GetDataDir_AsposePdf_WorkingDocuments ();
// Create PDF document
using ( var document = new Aspose . Pdf . Document ())
{
// Get Content for work with TaggedPdf
Aspose . Pdf . Tagged . ITaggedContent taggedContent = document . TaggedContent ;
var rootElement = taggedContent . RootElement ;
// Set Title and Language for Document
taggedContent . SetTitle ( "Tagged Pdf Document" );
taggedContent . SetLanguage ( "en-US" );
Aspose . Pdf . LogicalStructure . HeaderElement mainHeader = taggedContent . CreateHeaderElement ();
mainHeader . SetText ( "Main Header" );
Aspose . Pdf . LogicalStructure . 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 );
// Save Tagged PDF Document
document . Save ( dataDir + "TaggedPdfDocument_out.pdf" );
}
}
.NET 8
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreateTaggedPdfDocument01 ()
{
// The path to the documents directory
var dataDir = RunExamples . GetDataDir_AsposePdf_WorkingDocuments ();
// Create PDF Document
using var document = new Aspose . Pdf . Document ();
// Get Content for work with TaggedPdf
Aspose . Pdf . Tagged . ITaggedContent taggedContent = document . TaggedContent ;
var rootElement = taggedContent . RootElement ;
// Set Title and Language for Document
taggedContent . SetTitle ( "Tagged Pdf Document" );
taggedContent . SetLanguage ( "en-US" );
Aspose . Pdf . LogicalStructure . HeaderElement mainHeader = taggedContent . CreateHeaderElement ();
mainHeader . SetText ( "Main Header" );
Aspose . Pdf . LogicalStructure . 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 );
// Save Tagged PDF Document
document . Save ( dataDir + "TaggedPdfDocument_out.pdf" );
}
Obteremos o seguinte documento após a criação:
Em alguns casos, precisamos criar uma estrutura mais complexa, por exemplo, colocar citações em um parágrafo. Para criar a árvore de elementos de estrutura, devemos usar o método AppendChild . O seguinte trecho de código mostra como criar a árvore de elementos de estrutura de um Documento PDF Marcado:
.NET Core 3.1
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreateTaggedPdfDocument02 ()
{
// The path to the documents directory
var dataDir = RunExamples . GetDataDir_AsposePdf_WorkingDocuments ();
// Create PDF Document
using ( var document = new Aspose . Pdf . Document ())
{
// Get Content for work with TaggedPdf
Aspose . Pdf . Tagged . ITaggedContent taggedContent = document . TaggedContent ;
var rootElement = taggedContent . RootElement ;
// Set Title and Language for Document
taggedContent . SetTitle ( "Tagged Pdf Document" );
taggedContent . SetLanguage ( "en-US" );
Aspose . Pdf . LogicalStructure . HeaderElement header1 = taggedContent . CreateHeaderElement ( 1 );
header1 . SetText ( "Header Level 1" );
Aspose . Pdf . LogicalStructure . ParagraphElement paragraphWithQuotes = taggedContent . CreateParagraphElement ();
paragraphWithQuotes . StructureTextState . Font = Aspose . Pdf . Text . FontRepository . FindFont ( "Calibri" );
paragraphWithQuotes . AdjustPosition ( new Aspose . Pdf . Tagged . PositionSettings
{
Margin = new Aspose . Pdf . MarginInfo ( 10 , 5 , 10 , 5 )
});
Aspose . Pdf . LogicalStructure . 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. " );
Aspose . Pdf . LogicalStructure . 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 = Aspose . Pdf . Text . FontStyles . Bold | Aspose . Pdf . Text . FontStyles . Italic ;
Aspose . Pdf . LogicalStructure . 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 );
// Save Tagged PDF Document
document . Save ( dataDir + "TaggedPdfDocument_out.pdf" );
}
}
.NET 8
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreateTaggedPdfDocument02 ()
{
// The path to the documents directory
var dataDir = RunExamples . GetDataDir_AsposePdf_WorkingDocuments ();
// Create PDF Document
using var document = new Aspose . Pdf . Document ();
// Get Content for work with TaggedPdf
Aspose . Pdf . Tagged . ITaggedContent taggedContent = document . TaggedContent ;
var rootElement = taggedContent . RootElement ;
// Set Title and Language for Document
taggedContent . SetTitle ( "Tagged Pdf Document" );
taggedContent . SetLanguage ( "en-US" );
Aspose . Pdf . LogicalStructure . HeaderElement header1 = taggedContent . CreateHeaderElement ( 1 );
header1 . SetText ( "Header Level 1" );
Aspose . Pdf . LogicalStructure . ParagraphElement paragraphWithQuotes = taggedContent . CreateParagraphElement ();
paragraphWithQuotes . StructureTextState . Font = Aspose . Pdf . Text . FontRepository . FindFont ( "Calibri" );
paragraphWithQuotes . AdjustPosition ( new Aspose . Pdf . Tagged . PositionSettings
{
Margin = new Aspose . Pdf . MarginInfo ( 10 , 5 , 10 , 5 )
});
Aspose . Pdf . LogicalStructure . 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. " );
Aspose . Pdf . LogicalStructure . 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 = Aspose . Pdf . Text . FontStyles . Bold | Aspose . Pdf . Text . FontStyles . Italic ;
Aspose . Pdf . LogicalStructure . 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 );
// Save Tagged PDF Document
document . Save ( dataDir + "TaggedPdfDocument_out.pdf" );
}
Obteremos o seguinte documento após a criação:
Estilizando Estrutura de Texto
Para estilizar a estrutura de texto em um Documento PDF Marcado, o Aspose.PDF oferece as propriedades Font , FontSize , FontStyle e ForegroundColor da Classe StructureTextState . O seguinte trecho de código mostra como estilizar a estrutura de texto em um Documento PDF Marcado:
Ilustrando Elementos de Estrutura
Para ilustrar elementos de estrutura em um Documento PDF Marcado, o Aspose.PDF oferece a classe IllustrationElement . O seguinte trecho de código mostra como ilustrar elementos de estrutura em um Documento PDF Marcado:
Validar PDF Marcado
Aspose.PDF for .NET fornece a capacidade de validar um Documento PDF Marcado PDF/UA. A validação do padrão PDF/UA suporta:
Verificações para XObjects.
Verificações para Ações.
Verificações para Conteúdo Opcional.
Verificações para Arquivos Embutidos.
Verificações para Campos de Acroform (Validar Linguagem Natural e Nome Alternativo e Assinaturas Digitais).
Verificações para Campos de Formulário XFA.
Verificações para configurações de Segurança.
Verificações para Navegação.
Verificações para Anotações.
O trecho de código abaixo mostra como validar o Documento PDF Marcado. Os problemas correspondentes serão exibidos no relatório de log XML.
Ajustar posição da Estrutura de Texto
O seguinte trecho de código mostra como ajustar a posição da Estrutura de Texto no documento PDF Marcado:
.NET Core 3.1
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void AdjustPosition ()
{
// The path to the documents directory
var dataDir = RunExamples . GetDataDir_AsposePdf_WorkingDocuments ();
// Create PDF Document
using ( var document = new Aspose . Pdf . Document ())
{
// Get Content for work with TaggedPdf
var taggedContent = document . TaggedContent ;
// Set Title and Language for Document
taggedContent . SetTitle ( "Tagged Pdf Document" );
taggedContent . SetLanguage ( "en-US" );
// Create paragraph
var p = taggedContent . CreateParagraphElement ();
taggedContent . RootElement . AppendChild ( p );
p . SetText ( "Text." );
// Adjust position
p . AdjustPosition ( new Aspose . Pdf . Tagged . PositionSettings
{
HorizontalAlignment = Aspose . Pdf . HorizontalAlignment . None ,
Margin = new Aspose . Pdf . MarginInfo
{
Left = 300 ,
Right = 0 ,
Top = 20 ,
Bottom = 0
},
VerticalAlignment = Aspose . Pdf . VerticalAlignment . None ,
IsFirstParagraphInColumn = false ,
IsKeptWithNext = false ,
IsInNewPage = false ,
IsInLineParagraph = false
});
// Save Tagged PDF Document
document . Save ( dataDir + "AdjustTextPosition_out.pdf" );
}
}
.NET 8
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void AdjustPosition ()
{
// The path to the documents directory
var dataDir = RunExamples . GetDataDir_AsposePdf_WorkingDocuments ();
// Create PDF Document
using var document = new Aspose . Pdf . Document ();
// Get Content for work with TaggedPdf
var taggedContent = document . TaggedContent ;
// Set Title and Language for Document
taggedContent . SetTitle ( "Tagged Pdf Document" );
taggedContent . SetLanguage ( "en-US" );
// Create paragraph
var p = taggedContent . CreateParagraphElement ();
taggedContent . RootElement . AppendChild ( p );
p . SetText ( "Text." );
// Adjust position
p . AdjustPosition ( new Aspose . Pdf . Tagged . PositionSettings
{
HorizontalAlignment = Aspose . Pdf . HorizontalAlignment . None ,
Margin = new Aspose . Pdf . MarginInfo
{
Left = 300 ,
Right = 0 ,
Top = 20 ,
Bottom = 0
},
VerticalAlignment = Aspose . Pdf . VerticalAlignment . None ,
IsFirstParagraphInColumn = false ,
IsKeptWithNext = false ,
IsInNewPage = false ,
IsInLineParagraph = false
});
// Save Tagged PDF Document
document . Save ( dataDir + "AdjustTextPosition_out.pdf" );
}
O Aspose.PDF permite a geração automática de marcação de estrutura lógica básica ao converter um documento para PDF/UA-1. Os usuários podem então melhorar manualmente essa estrutura lógica básica, fornecendo informações adicionais sobre o conteúdo do documento.
Para gerar uma estrutura lógica do documento, crie uma instância da classe Aspose.Pdf.AutoTaggingSettings , defina sua propriedade AutoTaggingSettings.EnableAutoTagging como true e atribua-a à propriedade PdfFormatConversionOptions.AutoTaggingSettings .
Se o documento já tiver tags de estrutura lógica, habilitar a auto-tagging destruirá a estrutura lógica existente e gerará uma nova.
Você pode marcar campos de formulário interativos em um documento PDF para garantir que eles sejam incluídos na árvore de estrutura lógica para acessibilidade (PDF/UA). O trecho abaixo demonstra como criar um campo de formulário, registrá-lo no AcroForm e associá-lo a um elemento de estrutura /Form na árvore de estrutura.
.NET Core 3.1
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreatePdfWithTaggedFormField ()
{
// The path to the documents directory
var dataDir = RunExamples . GetDataDir_AsposePdf_WorkingDocuments ();
// Create PDF document
using ( var document = new Aspose . Pdf . Document ())
{
document . Pages . Add ();
// Get Content for work with TaggedPdf
Aspose . Pdf . Tagged . ITaggedContent taggedContent = document . TaggedContent ;
Aspose . Pdf . LogicalStructure . StructureElement rootElement = taggedContent . RootElement ;
// Create a visible signature form field (AcroForm)
var signatureField = new Aspose . Pdf . Forms . SignatureField ( document . Pages [ 1 ], new Aspose . Pdf . Rectangle ( 50 , 50 , 100 , 100 ));
signatureField . PartialName = "Signature1" ;
signatureField . AlternateName = "signature 1" ;
// Add the signature field to the document's AcroForm
document . Form . Add ( signatureField );
// Create a /Form structure element in the tag tree
Aspose . Pdf . LogicalStructure . FormElement form = taggedContent . CreateFormElement ();
form . AlternativeText = "form 1" ;
// Link the /Form tag to the signature field via an /OBJR reference
form . Tag ( signatureField );
// Add the /Form structure element to the document’s logical structure tree
rootElement . AppendChild ( form );
// Save PDF document
document . Save ( dataDir + "CreatePdfWithTaggedFormField_out.pdf" );
}
}
.NET 8
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreatePdfWithTaggedFormField ()
{
// The path to the documents directory
var dataDir = RunExamples . GetDataDir_AsposePdf_WorkingDocuments ();
// Create PDF document
using var document = new Aspose . Pdf . Document ();
document . Pages . Add ();
// Get Content for work with TaggedPdf
Aspose . Pdf . Tagged . ITaggedContent taggedContent = document . TaggedContent ;
Aspose . Pdf . LogicalStructure . StructureElement rootElement = taggedContent . RootElement ;
// Create a visible signature form field (AcroForm)
var signatureField = new Aspose . Pdf . Forms . SignatureField ( document . Pages [ 1 ], new Aspose . Pdf . Rectangle ( 50 , 50 , 100 , 100 ));
signatureField . PartialName = "Signature1" ;
signatureField . AlternateName = "signature 1" ;
// Add the signature field to the document's AcroForm
document . Form . Add ( signatureField );
// Create a /Form structure element in the tag tree
Aspose . Pdf . LogicalStructure . FormElement form = taggedContent . CreateFormElement ();
form . AlternativeText = "form 1" ;
// Link the /Form tag to the signature field via an /OBJR reference
form . Tag ( signatureField );
// Add the /Form structure element to the document’s logical structure tree
rootElement . AppendChild ( form );
// Save PDF document
document . Save ( dataDir + "CreatePdfWithTaggedFormField_out.pdf" );
}
Gere um documento PDF marcado com uma página de Índice (TOC) acessível.
Gere um PDF marcado que inclua uma página de índice acessível, que contenha um título de página e uma sublista aninhada.
.NET Core 3.1
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreatePdfWithTOCpageAdvanced ()
{
// The path to the documents directory
var dataDir = RunExamples . GetDataDir_AsposePdf_WorkingDocuments ();
// Create PDF document
using ( var doc = new Aspose . Pdf . Document ())
{
// Get tagged content for the PDF structure
Aspose . Pdf . Tagged . ITaggedContent content = doc . TaggedContent ;
Aspose . Pdf . LogicalStructure . StructureElement rootElement = content . RootElement ;
content . SetLanguage ( "en-US" );
// Add the table of contents (TOC) page
Aspose . Pdf . Page tocPage = doc . Pages . Add ();
tocPage . TocInfo = new Aspose . Pdf . TocInfo ();
tocPage . TocInfo . Title = new Aspose . Pdf . Text . TextFragment ( "Table of Contents" );
// Create a TOC structure element
Aspose . Pdf . LogicalStructure . TOCElement tocElement = content . CreateTOCElement ();
// Create a header element for the TOC page title
Aspose . Pdf . LogicalStructure . HeaderElement headerForTOCpageTitle = content . CreateHeaderElement ( 1 );
tocElement . LinkTocPageTitleToHeaderElement ( tocPage , headerForTOCpageTitle );
// Add the TOC page title header and TOC element to the document structure tree
rootElement . AppendChild ( headerForTOCpageTitle );
rootElement . AppendChild ( tocElement );
// Add a content page
doc . Pages . Add ();
// Create a header element and set its text
Aspose . Pdf . LogicalStructure . HeaderElement header = content . CreateHeaderElement ( 1 );
header . SetText ( "1. Header" );
// Add the header to the document structure
rootElement . AppendChild ( header );
// Create a TOC item (TOCI) element
Aspose . Pdf . LogicalStructure . TOCIElement toci = content . CreateTOCIElement ();
// Add the TOCI element to the TOC element
tocElement . AppendChild ( toci );
// Add an entry to the TOC page and link it to the TOCI element
header . AddEntryToTocPage ( tocPage , toci );
// Add a logical reference to the header within the TOCI element
toci . AddRef ( header );
// Create a list element for TOCI subitems
Aspose . Pdf . LogicalStructure . ListElement listElement = content . CreateListElement ();
for ( var i = 1 ; i <= 3 ; i ++)
{
// Create a list item (LI) element
Aspose . Pdf . LogicalStructure . ListLIElement li = content . CreateListLIElement ();
// Add the list item to the list element
listElement . AppendChild ( li );
// Create a sub-header element and set its properties
Aspose . Pdf . LogicalStructure . HeaderElement subHeader = content . CreateHeaderElement ( 2 );
subHeader . StructureTextState . FontSize = 14 ;
subHeader . Language = "en-US" ;
subHeader . SetText ( $@"1.{i} subheader " );
// Add an entry to the TOC page and link it to the LI element
subHeader . AddEntryToTocPage ( tocPage , li );
// Add a logical reference to the subheader element
li . AddRef ( subHeader );
// Create a paragraph element and set its text and language
Aspose . Pdf . LogicalStructure . ParagraphElement p = content . CreateParagraphElement ();
p . SetText ( "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." );
p . Language = "en-US" ;
// Add the sub-header and paragraph to the document structure
rootElement . AppendChild ( subHeader );
rootElement . AppendChild ( p );
}
// Add the list element as a child to the TOCI element
toci . AppendChild ( listElement );
// --- Additional TOC header example ---
// Create a second header element (see comments above for header 1)
Aspose . Pdf . LogicalStructure . HeaderElement header2 = content . CreateHeaderElement ( 1 );
header2 . SetText ( "2. Header" );
rootElement . AppendChild ( header2 );
Aspose . Pdf . LogicalStructure . TOCIElement toci2 = content . CreateTOCIElement ();
tocElement . AppendChild ( toci2 );
header2 . AddEntryToTocPage ( tocPage , toci2 );
toci2 . AddRef ( header2 );
// Save the PDF document
doc . Save ( dataDir + "CreatePdfWithTOCpageAdvanced_out.pdf" );
}
}
.NET 8
// For complete examples and data files, visit https://github.com/aspose-pdf/Aspose.PDF-for-.NET
private static void CreatePdfWithTOCpageAdvanced ()
{
// The path to the documents directory
var dataDir = RunExamples . GetDataDir_AsposePdf_WorkingDocuments ();
// Create PDF document
using var doc = new Aspose . Pdf . Document ();
// Get tagged content for the PDF structure
Aspose . Pdf . Tagged . ITaggedContent content = doc . TaggedContent ;
Aspose . Pdf . LogicalStructure . StructureElement rootElement = content . RootElement ;
content . SetLanguage ( "en-US" );
// Add the table of contents (TOC) page
Aspose . Pdf . Page tocPage = doc . Pages . Add ();
tocPage . TocInfo = new Aspose . Pdf . TocInfo ();
tocPage . TocInfo . Title = new Aspose . Pdf . Text . TextFragment ( "Table of Contents" );
// Create a TOC structure element
Aspose . Pdf . LogicalStructure . TOCElement tocElement = content . CreateTOCElement ();
// Create a header element for the TOC page title
Aspose . Pdf . LogicalStructure . HeaderElement headerForTOCpageTitle = content . CreateHeaderElement ( 1 );
tocElement . LinkTocPageTitleToHeaderElement ( tocPage , headerForTOCpageTitle );
// Add the TOC page title header and TOC element to the document structure tree
rootElement . AppendChild ( headerForTOCpageTitle );
rootElement . AppendChild ( tocElement );
// Add a content page
doc . Pages . Add ();
// Create a header element and set its text
Aspose . Pdf . LogicalStructure . HeaderElement header = content . CreateHeaderElement ( 1 );
header . SetText ( "1. Header" );
// Add the header to the document structure
rootElement . AppendChild ( header );
// Create a TOC item (TOCI) element
Aspose . Pdf . LogicalStructure . TOCIElement toci = content . CreateTOCIElement ();
// Add the TOCI element to the TOC element
tocElement . AppendChild ( toci );
// Add an entry to the TOC page and link it to the TOCI element
header . AddEntryToTocPage ( tocPage , toci );
// Add a logical reference to the header within the TOCI element
toci . AddRef ( header );
// Create a list element for TOCI subitems
Aspose . Pdf . LogicalStructure . ListElement listElement = content . CreateListElement ();
for ( var i = 1 ; i <= 3 ; i ++)
{
// Create a list item (LI) element
Aspose . Pdf . LogicalStructure . ListLIElement li = content . CreateListLIElement ();
// Add the list item to the list element
listElement . AppendChild ( li );
// Create a sub-header element and set its properties
Aspose . Pdf . LogicalStructure . HeaderElement subHeader = content . CreateHeaderElement ( 2 );
subHeader . StructureTextState . FontSize = 14 ;
subHeader . Language = "en-US" ;
subHeader . SetText ( $@"1.{i} subheader " );
// Add an entry to the TOC page and link it to the LI element
subHeader . AddEntryToTocPage ( tocPage , li );
// Add a logical reference to the subheader element
li . AddRef ( subHeader );
// Create a paragraph element and set its text and language
Aspose . Pdf . LogicalStructure . ParagraphElement p = content . CreateParagraphElement ();
p . SetText ( "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum." );
p . Language = "en-US" ;
// Add the sub-header and paragraph to the document structure
rootElement . AppendChild ( subHeader );
rootElement . AppendChild ( p );
}
// Add the list element as a child to the TOCI element
toci . AppendChild ( listElement );
// --- Additional TOC header example ---
// Create a second header element (see comments above for header 1)
Aspose . Pdf . LogicalStructure . HeaderElement header2 = content . CreateHeaderElement ( 1 );
header2 . SetText ( "2. Header" );
rootElement . AppendChild ( header2 );
Aspose . Pdf . LogicalStructure . TOCIElement toci2 = content . CreateTOCIElement ();
tocElement . AppendChild ( toci2 );
header2 . AddEntryToTocPage ( tocPage , toci2 );
toci2 . AddRef ( header2 );
// Save the PDF document
doc . Save ( dataDir + "CreatePdfWithTOCpageAdvanced_out.pdf" );
}