Créer ou Ajouter une Table dans un PDF en utilisant Python

Création de Table avec Python

Les tables sont importantes lors du travail avec des documents PDF. Elles offrent d’excellentes fonctionnalités pour afficher des informations de manière systématique. L’espace de noms Aspose.PDF contient des classes nommées Table, Cell, et Row qui fournissent des fonctionnalités pour créer des tables lors de la génération de documents PDF à partir de zéro.

Une table peut être créée en créant un objet de la classe Table.


    table = ap.Table()

Ajout de Table dans un Document PDF Existant

Pour ajouter une table à un fichier PDF existant avec Aspose.PDF pour Python via .NET, suivez les étapes suivantes :

  1. Chargez le fichier source.
  2. Initialisez une table et définissez ses colonnes et lignes.
  3. Définissez les paramètres de la table (nous avons défini les bordures).
  4. Remplissez la table.
  5. Ajoutez la table à une page.
  6. Enregistrez le fichier.

Les extraits de code suivants montrent comment ajouter du texte dans un fichier PDF existant.


    import aspose.pdf as ap

    # Charger le document PDF source
    doc = ap.Document(input_file)
    # Initialise une nouvelle instance du Tableau
    table = ap.Table()
    # Définir la couleur de la bordure du tableau comme LightGray
    table.border = ap.BorderInfo(ap.BorderSide.ALL, 5, ap.Color.from_rgb(apd.Color.light_gray))
    # Définir la bordure pour les cellules du tableau
    table.default_cell_border = ap.BorderInfo(ap.BorderSide.ALL, 5, ap.Color.from_rgb(apd.Color.light_gray))
    # Créer une boucle pour ajouter 10 lignes
    for row_count in range(0, 10):
        # Ajouter une ligne au tableau
        row = table.rows.add()
        # Ajouter des cellules au tableau
        row.cells.add("Colonne (" + str(row_count) + ", 1)")
        row.cells.add("Colonne (" + str(row_count) + ", 2)")
        row.cells.add("Colonne (" + str(row_count) + ", 3)")
    # Ajouter l'objet tableau à la première page du document d'entrée
    doc.pages[1].paragraphs.add(table)
    # Enregistrer le document mis à jour contenant l'objet tableau
    doc.save(output_file)

ColSpan et RowSpan dans les Tables

Aspose.PDF pour Python via .NET fournit la propriété col_span pour fusionner les colonnes dans un tableau et la propriété row_span pour fusionner les lignes.

Nous utilisons la propriété col_span ou row_span sur l’objet Cell qui crée la cellule de tableau. Après avoir appliqué les propriétés requises, la cellule créée peut être ajoutée au tableau.


    import aspose.pdf as ap

    # Initialisez l'objet Document en appelant son constructeur vide
    pdf_document = ap.Document()
    pdf_document.pages.add()
    # Initialise une nouvelle instance de Table
    table = ap.Table()
    # Définissez la couleur de la bordure du tableau comme LightGray
    table.border = ap.BorderInfo(ap.BorderSide.ALL, 0.5, ap.Color.black)
    # Définissez la bordure pour les cellules du tableau
    table.default_cell_border = ap.BorderInfo(ap.BorderSide.ALL, 0.5, ap.Color.black)
    # Ajoutez la 1ère ligne au tableau
    row1 = table.rows.add()
    for cellCount in range(1, 5):
        # Ajoutez des cellules au tableau
        row1.cells.add("Test 1" + str(cellCount))

    # Ajoutez la 2ème ligne au tableau
    row2 = table.rows.add()
    row2.cells.add("Test 2 1")
    cell = row2.cells.add("Test 2 2")
    cell.col_span = 2
    row2.cells.add("Test 2 4")

    # Ajoutez la 3ème ligne au tableau
    row3 = table.rows.add()
    row3.cells.add("Test 3 1")
    row3.cells.add("Test 3 2")
    row3.cells.add("Test 3 3")
    row3.cells.add("Test 3 4")

    # Ajoutez la 4ème ligne au tableau
    row4 = table.rows.add()
    row4.cells.add("Test 4 1")
    cell = row4.cells.add("Test 4 2")
    cell.row_span = 2
    row4.cells.add("Test 4 3")
    row4.cells.add("Test 4 4")

    # Ajoutez la 5ème ligne au tableau
    row5 = table.rows.add()
    row5.cells.add("Test 5 1")
    row5.cells.add("Test 5 3")
    row5.cells.add("Test 5 4")

    # Ajoutez l'objet tableau à la première page du document d'entrée
    pdf_document.pages[1].paragraphs.add(table)
    # Enregistrez le document mis à jour contenant l'objet tableau
    pdf_document.save(output_file)

Le résultat de l’exécution du code ci-dessous est le tableau représenté sur l’image suivante :

Démonstration de ColSpan et RowSpan

Travailler avec les Bordures, Marges et Espacement

Veuillez noter qu’il prend également en charge la fonctionnalité de définir le style de bordure, les marges et l’espacement des cellules pour les tableaux. Avant d’entrer dans les détails techniques, il est important de comprendre les concepts de bordure, marges et espacement qui sont présentés ci-dessous dans un diagramme :

Bordures, marges et espacement

Dans la figure ci-dessus, vous pouvez voir que les bordures du tableau, de la ligne et de la cellule se chevauchent. En utilisant Aspose.PDF, un tableau peut avoir des marges et les cellules peuvent avoir des espacements. Pour définir les marges des cellules, nous devons définir l’espacement des cellules.

Bordures

Pour définir les bordures des objets Table, Row et Cell, utilisez les propriétés Table.border, Row.border et Cell.border. Les bordures des cellules peuvent également être définies à l’aide de la propriété default_cell_border de la classe Table ou Row. Toutes les propriétés liées aux bordures discutées ci-dessus sont assignées à une instance de la classe Row, qui est créée en appelant son constructeur. La classe Row possède de nombreuses surcharges qui prennent presque tous les paramètres nécessaires pour personnaliser la bordure.

Marges ou Espacement

L’espacement des cellules peut être géré à l’aide de la propriété default_cell_padding de la classe Table. Toutes les propriétés liées à l’espacement sont assignées à une instance de la classe MarginInfo qui prend des informations sur les paramètres left, right, top et bottom pour créer des marges personnalisées. Dans l’exemple suivant, la largeur de la bordure de la cellule est définie à 0,1 point, la largeur de la bordure de la table est définie à 1 point et le remplissage de la cellule est défini à 5 points.

Marge et Bordure dans un Tableau PDF


    import aspose.pdf as ap

    # Instancier l'objet Document en appelant son constructeur vide
    doc = ap.Document()
    page = doc.pages.add()
    # Instancier un objet table
    tab1 = ap.Table()
    # Ajouter la table dans la collection de paragraphes de la section désirée
    page.paragraphs.add(tab1)
    # Définir les largeurs de colonne de la table
    tab1.column_widths = "50 50 50"
    # Définir la bordure de cellule par défaut en utilisant l'objet BorderInfo
    tab1.default_cell_border = ap.BorderInfo(ap.BorderSide.ALL, 0.1)
    # Définir la bordure de la table en utilisant un autre objet BorderInfo personnalisé
    tab1.border = ap.BorderInfo(ap.BorderSide.ALL, 1)
    # Créer un objet MarginInfo et définir ses marges gauche, bas, droite et haut
    margin = ap.MarginInfo()
    margin.top = 5
    margin.left = 5
    margin.right = 5
    margin.bottom = 5
    # Définir le remplissage de cellule par défaut sur l'objet MarginInfo
    tab1.default_cell_padding = margin
    # Créer des lignes dans la table puis des cellules dans les lignes
    row1 = tab1.rows.add()
    row1.cells.add("col1")
    row1.cells.add("col2")
    row1.cells.add()
    my_text = ap.text.TextFragment("col3 avec une longue chaîne de texte")
    # Row1.Cells.Add("col3 avec une longue chaîne de texte à placer dans la cellule")
    row1.cells[2].paragraphs.add(my_text)
    row1.cells[2].is_word_wrapped = False
    row2 = tab1.rows.add()
    row2.cells.add("item1")
    row2.cells.add("item2")
    row2.cells.add("item3")
    # Enregistrer le Pdf
    doc.save(output_file)

Pour créer une table avec des coins arrondis, utilisez la valeur rounded_border_radius de la classe BorderInfo et définissez le style des coins de la table comme arrondi.

    
    import aspose.pdf as ap
    
    tab1 = ap.Table()
    graph = ap.GraphInfo()
    graph.color = ap.Color.red
    # Créer un objet BorderInfo vide
    b_info = ap.BorderInfo(ap.BorderSide.ALL, graph)
    # Définir la bordure comme une bordure arrondie où le rayon est de 15
    b_info.rounded_border_radius = 15
    # Définir le style des coins de la table comme arrondi
    tab1.corner_style = ap.BorderCornerStyle.ROUND
    # Définir les informations de bordure de la table
    tab1.border = b_info

Appliquer différents réglages AutoFit à une table

Lors de la conception d’une table à l’aide d’un outil visuel comme Microsoft Word, vous utiliserez fréquemment l’une des fonctionnalités AutoFit pour ajuster commodément la taille de la table à la largeur souhaitée. Par exemple, vous pouvez utiliser l’option “AUTO_FIT_TO_WINDOW” pour adapter la largeur du tableau à la page ou AUTO_FIT_TO_CONTENT. Par défaut, lors de l’utilisation d’Aspose.Pdf pour créer un nouveau tableau, il utilise le column_adjustment avec une valeur “Customized”. Dans l’extrait de code suivant, nous définissons les paramètres de l’objet MarginInfo et les objets BorderInfo dans le tableau. Testez l’exemple et évaluez le résultat.


    import aspose.pdf as ap

    # Instancier l'objet Pdf en appelant son constructeur vide
    doc = ap.Document()
    # Créer la section dans l'objet Pdf
    sec1 = doc.pages.add()
    # Instancier un objet table
    tab1 = ap.Table()
    # Ajouter le tableau dans la collection de paragraphes de la section souhaitée
    sec1.paragraphs.add(tab1)
    # Définir les largeurs de colonne du tableau
    tab1.column_widths = "50 50 50"
    tab1.column_adjustment = ap.ColumnAdjustment.AUTO_FIT_TO_WINDOW
    # Définir la bordure de cellule par défaut à l'aide de l'objet BorderInfo
    tab1.default_cell_border = ap.BorderInfo(ap.BorderSide.ALL, 0.1)
    # Définir la bordure du tableau à l'aide d'un autre objet BorderInfo personnalisé
    tab1.border = ap.BorderInfo(ap.BorderSide.ALL, 1)
    # Créer un objet MarginInfo et définir ses marges gauche, bas, droite et haut
    margin = ap.MarginInfo()
    margin.top = 5
    margin.left = 5
    margin.right = 5
    margin.bottom = 5
    # Définir le remplissage de cellule par défaut sur l'objet MarginInfo
    tab1.default_cell_padding = margin
    # Créer des lignes dans le tableau puis des cellules dans les lignes
    row1 = tab1.rows.add()
    row1.cells.add("col1")
    row1.cells.add("col2")
    row1.cells.add("col3")
    row2 = tab1.rows.add()
    row2.cells.add("item1")
    row2.cells.add("item2")
    row2.cells.add("item3")
    # Enregistrer le document mis à jour contenant l'objet table
    doc.save(output_file)

Obtenir la Largeur de la Table

Parfois, il est nécessaire d’obtenir la largeur de la table dynamiquement. La classe Aspose.PDF.Table possède une méthode get_width() à cet effet. Par exemple, vous n’avez pas défini explicitement la largeur des colonnes de la table et vous avez défini column_adjustment sur ‘AUTO_FIT_TO_CONTENT’. Dans ce cas, vous pouvez obtenir la largeur de la table comme suit.


    import aspose.pdf as ap

    # Créer un nouveau document
    doc = ap.Document()
    # Ajouter une page dans le document
    page = doc.pages.add()
    # Initialiser une nouvelle table
    table = ap.Table()
    table.column_adjustment = ap.ColumnAdjustment.AUTO_FIT_TO_CONTENT
    # Ajouter une ligne dans la table
    row = table.rows.add()
    # Ajouter une cellule dans la table
    cell = row.cells.add("Texte de la cellule 1")
    cell = row.cells.add("Texte de la cellule 2")
    # Obtenir la largeur de la table
    print(table.get_width())

Ajouter une Image SVG à une Cellule de Table

Aspose.PDF pour Python via .NET offre la possibilité d’insérer des cellules de tableau dans un fichier PDF. Lors de la construction d’un tableau, vous pouvez inclure à la fois du texte et des images dans ces cellules. De plus, l’API offre la fonctionnalité de transformer des fichiers SVG en format PDF. En utilisant ces fonctionnalités ensemble, vous pouvez charger une image SVG et la placer dans une cellule de tableau.

L’extrait de code suivant démontre le processus de création d’un objet de tableau et d’intégration d’une image SVG à l’intérieur de l’une de ses cellules.


    import aspose.pdf as ap

    # Instancier un objet Document
    doc = ap.Document()
    # Créer une instance d'image
    img = ap.Image()
    # Définir le type d'image comme SVG
    img.file_type = ap.ImageFileType.SVG
    # Chemin pour le fichier source
    img.file = DIR_INPUT_TABLE + "SVGToPDF.svg"
    # Définir la largeur pour l'instance d'image
    img.fix_width = 50
    # Définir la hauteur pour l'instance d'image
    img.fix_height = 50
    # Créer une instance de table
    table = ap.Table()
    # Définir la largeur pour les cellules du tableau
    table.column_widths = "100 100"
    # Créer un objet ligne et l'ajouter à l'instance de tableau
    row = table.rows.add()
    # Créer un objet cellule et l'ajouter à l'instance de ligne
    cell = row.cells.add()
    # Ajouter un texte à la collection de paragraphes de l'objet cellule
    cell.paragraphs.add(ap.text.TextFragment("Première cellule"))
    # Ajouter une autre cellule à l'objet ligne
    cell = row.cells.add()
    # Ajouter l'image SVG à la collection de paragraphes de l'instance de cellule récemment ajoutée
    cell.paragraphs.add(img)
    # Créer un objet page et l'ajouter à la collection de pages de l'instance de document
    page = doc.pages.add()
    # Ajouter le tableau à la collection de paragraphes de l'objet page
    page.paragraphs.add(table)
    # Enregistrer le fichier PDF
    doc.save(output_file)

Insérer un saut de page entre les lignes du tableau

Par défaut, lorsque vous créez un tableau dans un fichier PDF, le tableau s’étend sur plusieurs pages s’il dépasse la marge inférieure du tableau. Cependant, il existe des situations où nous devons imposer des sauts de page après qu’un certain nombre de lignes ont été ajoutées au tableau. L’extrait de code suivant décrit le processus d’insertion d’un saut de page lorsque 10 lignes ont été incluses dans le tableau.


    import aspose.pdf as ap

    # Instancier une instance de Document
    doc = ap.Document()
    # Ajouter une page à la collection de pages du fichier PDF
    doc.pages.add()
    # Créer une instance de tableau
    tab = ap.Table()
    # Définir le style de bordure pour le tableau
    tab.border = ap.BorderInfo(ap.BorderSide.ALL, ap.Color.red)
    # Définir le style de bordure par défaut pour le tableau avec la couleur de bordure rouge
    tab.default_cell_border = ap.BorderInfo(ap.BorderSide.ALL, ap.Color.red)
    # Spécifier la largeur des colonnes du tableau
    tab.column_widths = "100 100"
    # Créer une boucle pour ajouter 200 lignes au tableau
    for counter in range(0, 201):
        row = ap.Row()
        tab.rows.add(row)
        cell1 = ap.Cell()
        cell1.paragraphs.add(ap.text.TextFragment("Cellule " + str(counter) + ", 0"))
        row.cells.add(cell1)
        cell2 = ap.Cell()
        cell2.paragraphs.add(ap.text.TextFragment("Cellule " + str(counter) + ", 1"))
        row.cells.add(cell2)
        # Lorsque 10 lignes sont ajoutées, rendre la nouvelle ligne sur une nouvelle page
        if counter % 10 == 0 and counter != 0:
            row.is_in_new_page = True
    # Ajouter le tableau à la collection de paragraphes du fichier PDF
    doc.pages[1].paragraphs.add(tab)
    # Enregistrer le document PDF
    doc.save(output_file)

Rendre un Tableau sur une Nouvelle Page

Par défaut, les paragraphes sont ajoutés à la collection Paragraphs d’un objet Page. Cependant, il est possible de rendre un tableau sur une nouvelle page au lieu de directement après l’objet de niveau paragraphe précédemment ajouté sur la page.

Exemple : Comment Rendre un Tableau sur une Nouvelle Page en utilisant Python

Pour rendre un tableau sur une nouvelle page, utilisez la propriété is_in_new_page dans la classe BaseParagraph. Le code suivant montre comment faire.


    import aspose.pdf as ap

    doc = ap.Document()
    page_info = doc.page_info
    margin_info = page_info.margin

    margin_info.left = 37
    margin_info.right = 37
    margin_info.top = 37
    margin_info.bottom = 37

    page_info.is_landscape = True

    table = ap.Table()
    table.column_widths = "50 100"
    # Page ajoutée.
    cur_page = doc.pages.add()
    for i in range(1, 121):
        row = table.rows.add()
        row.fixed_row_height = 15
        cell1 = row.cells.add()
        cell1.paragraphs.add(ap.text.TextFragment("Contenu 1"))
        cell2 = row.cells.add()
        cell2.paragraphs.add(ap.text.TextFragment("HHHHH"))
    paragraphs = cur_page.paragraphs
    paragraphs.add(table)

    table1 = ap.Table()
    table1.column_widths = "100 100"
    for i in range(1, 11):
        row = table1.rows.add()
        cell1 = row.cells.add()
        cell1.paragraphs.add(ap.text.TextFragment("LAAAAAAA"))
        cell2 = row.cells.add()
        cell2.paragraphs.add(ap.text.TextFragment("LAAGGGGGG"))
    table1.is_in_new_page = True
    # Je veux garder le tableau 1 à la page suivante s'il vous plaît...
    paragraphs.add(table1)
    doc.save(output_file)