Travailler avec des tables dans les PDF balisés en Python
Créer un tableau dans Tagged PDF
En suivant les étapes ci-dessus, vous pouvez générer un tableau sémantiquement riche et accessible dans un document PDF à l’aide d’Aspose.PDF for Python. Le fichier résultant répond aux normes de conformité PDF/UA-1, garantissant la compatibilité avec les lecteurs d’écran et les technologies d’assistance. Ceci est idéal pour les cas d’utilisation liés à la conformité réglementaire, à l’audit d’accessibilité et à la publication de contenus inclusifs.
Le fragment de code suivant montre comment créer un tableau dans le document Tagged PDF :
- Créez un nouveau document PDF balisé.
- Définir les métadonnées du document.
- Créer la structure du tableau.
- Créer la ligne d’en-tête du tableau.
- Créer des lignes de corps de tableau avec des cellules.
- Créer une ligne de pied de tableau.
- Définir l’attribut de résumé du tableau.
- Enregistrez le Tagged PDF.
import aspose.pdf as ap
import sys
from os import path
def create_table(outfile):
# Create PDF document
with ap.Document() as document:
tagged_content = document.tagged_content
tagged_content.set_title("Example table")
tagged_content.set_language("en-US")
# Get root structure element
root_element = tagged_content.root_element
table_element = tagged_content.create_table_element()
root_element.append_child(table_element, True)
table_element.border = ap.BorderInfo(ap.BorderSide.ALL, 1.2, ap.Color.dark_blue)
table_t_head_element = table_element.create_t_head()
table_t_body_element = table_element.create_t_body()
table_t_foot_element = table_element.create_t_foot()
row_count = 50
col_count = 4
head_tr_element = table_t_head_element.create_tr()
head_tr_element.alternative_text = "Head Row"
head_tr_element.background_color = ap.Color.light_gray
for column_index in range(col_count):
th_element = head_tr_element.create_th()
th_element.set_text(f"Head {column_index}")
th_element.background_color = ap.Color.green_yellow
th_element.border = ap.BorderInfo(ap.BorderSide.ALL, 4.0, ap.Color.gray)
th_element.is_no_border = True
th_element.margin = ap.MarginInfo(16.0, 2.0, 8.0, 2.0)
th_element.alignment = ap.HorizontalAlignment.RIGHT
for row_index in range(row_count):
tr_element = table_t_body_element.create_tr()
tr_element.alternative_text = f"Row {row_index}"
for column_index in range(col_count):
col_span = 1
row_span = 1
if column_index == 1 and row_index == 1:
col_span = 2
row_span = 2
elif (row_index == 1 and column_index == 2) or (
row_index == 2 and column_index in (1, 2)
):
continue
td_element = tr_element.create_td()
td_element.set_text(f"Cell [{row_index}, {column_index}]")
td_element.background_color = ap.Color.yellow
td_element.border = ap.BorderInfo(ap.BorderSide.ALL, 4.0, ap.Color.gray)
td_element.is_no_border = False
td_element.margin = ap.MarginInfo(8.0, 2.0, 8.0, 2.0)
td_element.alignment = ap.HorizontalAlignment.CENTER
cell_text_state = ap.text.TextState()
cell_text_state.foreground_color = ap.Color.dark_blue
cell_text_state.font_size = 7.5
cell_text_state.font_style = ap.text.FontStyles.BOLD
cell_text_state.font = ap.text.FontRepository.find_font("Arial")
td_element.default_cell_text_state = cell_text_state
td_element.is_word_wrapped = True
td_element.vertical_alignment = ap.VerticalAlignment.CENTER
td_element.col_span = col_span
td_element.row_span = row_span
foot_tr_element = table_t_foot_element.create_tr()
foot_tr_element.alternative_text = "Foot Row"
foot_tr_element.background_color = ap.Color.light_sea_green
for column_index in range(col_count):
td_element = foot_tr_element.create_td()
td_element.set_text(f"Foot {column_index}")
td_element.alignment = ap.HorizontalAlignment.CENTER
td_element.structure_text_state.font_size = 7
td_element.structure_text_state.font_style = ap.text.FontStyles.BOLD
table_attributes = table_element.attributes.get_attributes(
ap.logicalstructure.AttributeOwnerStandard.TABLE
)
summary_attribute = ap.logicalstructure.StructureAttribute(
ap.logicalstructure.AttributeKey.SUMMARY
)
summary_attribute.set_string_value("The summary text for table")
table_attributes.set_attribute(summary_attribute)
# Save Tagged PDF Document
document.save(outfile)
Élément de tableau de style
- Créez un nouveau document PDF balisé.
- Définir le titre du document et la langue.
- Créer un élément de structure de tableau.
- Configurer les lignes et colonnes répétitives.
- Ajouter l’en-tête, le corps et le pied de page.
- Enregistrez le document PDF balisé.
L’extrait de code suivant montre comment styliser une table dans un document Tagged PDF :
import aspose.pdf as ap
import sys
from os import path
def style_table(outfile):
# Create PDF document
with ap.Document() as document:
tagged_content = document.tagged_content
tagged_content.set_title("Example table style")
tagged_content.set_language("en-US")
# Get root structure element
root_element = tagged_content.root_element
# Create table structure element
table_element = tagged_content.create_table_element()
root_element.append_child(table_element, True)
table_element.background_color = ap.Color.beige
table_element.border = ap.BorderInfo(ap.BorderSide.ALL, 0.80, ap.Color.gray)
table_element.alignment = ap.HorizontalAlignment.CENTER
table_element.broken = ap.TableBroken.VERTICAL
table_element.column_adjustment = ap.ColumnAdjustment.AUTO_FIT_TO_WINDOW
table_element.column_widths = "80 80 80 80 80"
table_element.default_cell_border = ap.BorderInfo(
ap.BorderSide.ALL, 0.50, ap.Color.dark_blue
)
table_element.default_cell_padding = ap.MarginInfo(16.0, 2.0, 8.0, 2.0)
table_element.default_cell_text_state.foreground_color = ap.Color.dark_cyan
table_element.default_cell_text_state.font_size = 8.0
table_element.default_column_width = "70"
table_element.is_broken = False
table_element.is_borders_included = True
table_element.left = 0.0
table_element.top = 40.0
table_element.repeating_columns_count = 2
table_element.repeating_rows_count = 3
row_style = ap.text.TextState()
row_style.background_color = ap.Color.light_coral
table_element.repeating_rows_style = row_style
table_t_head_element = table_element.create_t_head()
table_t_body_element = table_element.create_t_body()
table_t_foot_element = table_element.create_t_foot()
row_count = 10
col_count = 5
head_tr_element = table_t_head_element.create_tr()
head_tr_element.alternative_text = "Head Row"
for col_index in range(col_count):
th_element = head_tr_element.create_th()
th_element.set_text(f"Head {col_index}")
for row_index in range(row_count):
tr_element = table_t_body_element.create_tr()
tr_element.alternative_text = f"Row {row_index}"
for col_index in range(col_count):
td_element = tr_element.create_td()
td_element.set_text(f"Cell [{row_index}, {col_index}]")
foot_tr_element = table_t_foot_element.create_tr()
foot_tr_element.alternative_text = "Foot Row"
for col_index in range(col_count):
td_element = foot_tr_element.create_td()
td_element.set_text(f"Foot {col_index}")
# Save Tagged PDF Document
document.save(outfile)
Style de ligne de tableau
Aspose.PDF for Python via .NET permet de styliser une ligne de tableau dans un document Tagged PDF. Afin de styliser une ligne de tableau, vous pouvez utiliser les propriétés de TableTRElement class. Voici la liste des propriétés que vous pouvez utiliser pour styliser une ligne de tableau :
- background_color.
- border.
- default_cell_border.
- min_row_height.
- fixed_row_height.
- is_in_new_page.
- is_row_broken.
- default_cell_text_state.
- default_cell_padding.
- vertical_alignment.
L’extrait de code suivant montre comment styliser une ligne de tableau dans le document Tagged PDF :
import aspose.pdf as ap
import sys
from os import path
def style_table_row(outfile):
# Create PDF document
with ap.Document() as document:
tagged_content = document.tagged_content
tagged_content.set_title("Example table style")
tagged_content.set_language("en-US")
# Get root structure element
root_element = tagged_content.root_element
# Create table structure element
table_element = tagged_content.create_table_element()
root_element.append_child(table_element, True)
table_t_head_element = table_element.create_t_head()
table_t_body_element = table_element.create_t_body()
table_t_foot_element = table_element.create_t_foot()
row_count = 7
col_count = 3
head_tr_element = table_t_head_element.create_tr()
head_tr_element.alternative_text = "Head Row"
for col_index in range(col_count):
th_element = head_tr_element.create_th()
th_element.set_text(f"Head {col_index}")
for row_index in range(row_count):
tr_element = table_t_body_element.create_tr()
tr_element.alternative_text = f"Row {row_index}"
tr_element.background_color = ap.Color.light_goldenrod_yellow
tr_element.border = ap.BorderInfo(
ap.BorderSide.ALL, 0.75, ap.Color.dark_gray
)
tr_element.default_cell_border = ap.BorderInfo(
ap.BorderSide.ALL, 0.50, ap.Color.blue
)
tr_element.min_row_height = 100.0
tr_element.fixed_row_height = 120.0
tr_element.is_in_new_page = row_index % 3 == 1
tr_element.is_row_broken = True
cell_text_state = ap.text.TextState()
cell_text_state.foreground_color = ap.Color.red
tr_element.default_cell_text_state = cell_text_state
tr_element.default_cell_padding = ap.MarginInfo(16.0, 2.0, 8.0, 2.0)
tr_element.vertical_alignment = ap.VerticalAlignment.BOTTOM
for col_index in range(col_count):
td_element = tr_element.create_td()
td_element.set_text("Cell [{0}, {1}]".format(row_index, col_index))
foot_tr_element = table_t_foot_element.create_tr()
foot_tr_element.alternative_text = "Foot Row"
for col_index in range(col_count):
td_element = foot_tr_element.create_td()
td_element.set_text("Foot {}".format(col_index))
# Save Tagged PDF Document
document.save(outfile)
Style de cellule de tableau
Aspose.PDF for Python via .NET permet de styliser une cellule de tableau dans un document Tagged PDF. Afin de styliser une cellule de tableau, vous pouvez utiliser les propriétés de ÉlémentCelluleTableau class. Voici la liste des propriétés que vous pouvez utiliser pour styliser une cellule de tableau :
- background_color.
- border.
- is_no_border.
- margin.
- alignment.
- default_cell_text_state.
- is_word_wrapped.
- vertical_alignment.
- col_span.
- row_span.
L’extrait de code suivant montre comment mettre en forme une cellule de tableau dans le document Tagged PDF :
import aspose.pdf as ap
import sys
from os import path
def style_table_cell(outfile):
# Create PDF document
with ap.Document() as document:
tagged_content = document.tagged_content
tagged_content.set_title("Example table cell style")
tagged_content.set_language("en-US")
# Get root structure element
root_element = tagged_content.root_element
# Create table structure element
table_element = tagged_content.create_table_element()
root_element.append_child(table_element, True)
table_t_head_element = table_element.create_t_head()
table_t_body_element = table_element.create_t_body()
table_t_foot_element = table_element.create_t_foot()
row_count = 4
col_count = 4
head_tr_element = table_t_head_element.create_tr()
head_tr_element.alternative_text = "Head Row"
for col_index in range(col_count):
th_element = head_tr_element.create_th()
th_element.set_text("Head {}".format(col_index))
th_element.background_color = ap.Color.green_yellow
th_element.border = ap.BorderInfo(ap.BorderSide.ALL, 4.0, ap.Color.gray)
th_element.is_no_border = True
th_element.margin = ap.MarginInfo(16.0, 2.0, 8.0, 2.0)
th_element.alignment = ap.HorizontalAlignment.RIGHT
for row_index in range(row_count):
tr_element = table_t_body_element.create_tr()
tr_element.alternative_text = "Row {}".format(row_index)
for col_index in range(col_count):
col_span = 1
row_span = 1
if col_index == 1 and row_index == 1:
col_span = 2
row_span = 2
elif (row_index == 1 and col_index == 2) or (
row_index == 2 and col_index in (1, 2)
):
continue
td_element = tr_element.create_td()
td_element.set_text("Cell [{}, {}]".format(row_index, col_index))
td_element.background_color = ap.Color.yellow
td_element.border = ap.BorderInfo(ap.BorderSide.ALL, 4.0, ap.Color.gray)
td_element.is_no_border = False
td_element.margin = ap.MarginInfo(8.0, 2.0, 8.0, 2.0)
td_element.alignment = ap.HorizontalAlignment.CENTER
cell_text_state = ap.text.TextState()
cell_text_state.foreground_color = ap.Color.dark_blue
cell_text_state.font_size = 7.5
cell_text_state.font_style = ap.text.FontStyles.BOLD
cell_text_state.font = ap.text.FontRepository.find_font("Arial")
td_element.default_cell_text_state = cell_text_state
td_element.is_word_wrapped = True
td_element.vertical_alignment = ap.VerticalAlignment.CENTER
td_element.col_span = col_span
td_element.row_span = row_span
foot_tr_element = table_t_foot_element.create_tr()
foot_tr_element.alternative_text = "Foot Row"
for col_index in range(col_count):
td_element = foot_tr_element.create_td()
td_element.set_text("Foot {}".format(col_index))
# Save Tagged PDF Document
document.save(outfile)
Ajuster la position du tableau
Ajustez la position d’un tableau dans un PDF balisé tout en conservant les fonctionnalités d’accessibilité à l’aide d’Aspose.PDF for Python via .NET.
L’extrait de code suivant montre comment ajuster la position du tableau dans le document Tagged PDF :
import aspose.pdf as ap
import sys
from os import path
def adjust_table_position(outfile):
# Create PDF document
with ap.Document() as document:
# Create tagged content
tagged_content = document.tagged_content
tagged_content.set_title("Example table position")
tagged_content.set_language("en-US")
# Get root structure element
root_element = tagged_content.root_element
# Create table structure element
table_element = tagged_content.create_table_element()
root_element.append_child(table_element, True)
# Create position settings
position_settings = ap.tagged.PositionSettings()
position_settings.horizontal_alignment = ap.HorizontalAlignment.NONE
position_settings.margin = ap.MarginInfo(left=20, right=0, top=0, bottom=0)
position_settings.vertical_alignment = ap.VerticalAlignment.NONE
position_settings.is_first_paragraph_in_column = False
position_settings.is_kept_with_next = False
position_settings.is_in_new_page = False
position_settings.is_in_line_paragraph = False
# Adjust table position
table_element.adjust_position(position_settings)
table_t_head_element = table_element.create_t_head()
table_t_body_element = table_element.create_t_body()
table_t_foot_element = table_element.create_t_foot()
row_count = 4
col_count = 4
head_tr_element = table_t_head_element.create_tr()
head_tr_element.alternative_text = "Head Row"
for col_index in range(col_count):
th_element = head_tr_element.create_th()
th_element.set_text(f"Head {col_index}")
th_element.background_color = ap.Color.green_yellow
th_element.border = ap.BorderInfo(ap.BorderSide.ALL, 4.0, ap.Color.gray)
th_element.is_no_border = True
th_element.margin = ap.MarginInfo(16.0, 2.0, 8.0, 2.0)
th_element.alignment = ap.HorizontalAlignment.RIGHT
for row_index in range(row_count):
tr_element = table_t_body_element.create_tr()
tr_element.alternative_text = f"Row {row_index}"
for col_index in range(col_count):
col_span = 1
row_span = 1
if col_index == 1 and row_index == 1:
col_span = 2
row_span = 2
elif (row_index == 1 and col_index == 2) or (
row_index == 2 and col_index in (1, 2)
):
continue
td_element = tr_element.create_td()
td_element.set_text(f"Cell [{row_index}, {col_index}]")
td_element.background_color = ap.Color.yellow
td_element.border = ap.BorderInfo(ap.BorderSide.ALL, 4.0, ap.Color.gray)
td_element.is_no_border = False
td_element.margin = ap.MarginInfo(8.0, 2.0, 8.0, 2.0)
td_element.alignment = ap.HorizontalAlignment.CENTER
cell_text_state = ap.text.TextState()
cell_text_state.foreground_color = ap.Color.dark_blue
cell_text_state.font_size = 7.5
cell_text_state.font_style = ap.text.FontStyles.BOLD
cell_text_state.font = ap.text.FontRepository.find_font("Arial")
td_element.default_cell_text_state = cell_text_state
td_element.is_word_wrapped = True
td_element.vertical_alignment = ap.VerticalAlignment.CENTER
td_element.col_span = col_span
td_element.row_span = row_span
foot_tr_element = table_t_foot_element.create_tr()
foot_tr_element.alternative_text = "Foot Row"
for col_index in range(col_count):
td_element = foot_tr_element.create_td()
td_element.set_text(f"Foot {col_index}")
# Save Tagged PDF Document
document.save(outfile)
Sujets liés aux PDF balisés
- Créer Tagged PDF pour construire la structure de document accessible globale autour du contenu de votre tableau.
- Extraire le contenu balisé des Tagged PDFs pour inspecter les éléments de structure liés aux tableaux après la génération.
- Définir les propriétés des éléments de structure pour affiner les métadonnées accessibles sur les cellules de tableau et d’autres éléments de structure.