Création d'un PDF complexe

Contents
[ ]

Le Hello World exemple a montré des étapes simples pour créer un document PDF en utilisant Python et Aspose.PDF. Dans cet article, nous examinerons la création d’un document plus complexe avec Aspose.PDF for Python. À titre d’exemple, nous prendrons un document d’une entreprise fictive qui exploite des services de ferries de passagers. Notre document contiendra une image, deux fragments de texte (en-tête et paragraphe) et un tableau.

Si nous créons un document à partir de zéro, nous devons suivre certaines étapes :

  1. Instancier un Document objet. Dans cette étape, nous créerons un document PDF vide avec quelques métadonnées mais sans pages.
  2. Ajouter un Page à l’objet document. Ainsi, maintenant notre document aura une page.
  3. Ajouter un Image à la Page.
  4. Créer un TextFragment pour l’en-tête. Pour l’en-tête, nous utiliserons la police Arial avec une taille de 24 pt et un alignement centré.
  5. Ajouter l’en-tête à la page paragraphs.
  6. Créer un TextFragment pour la description. Pour la description, nous utiliserons la police Arial avec une taille de 24 pt et un alignement centré.
  7. Ajouter la description à la page paragraphs.
  8. Créer et styliser le tableau. Définir la largeur des colonnes, les bordures, le remplissage et la police.
  9. Ajouter un tableau à la page paragraphs.
  10. Enregistrer un document “Complex.pdf”.
from datetime import timedelta
import aspose.pdf as ap


def run_complex(self):

    # Initialize document object
    document = ap.Document()
    # Add page
    page = document.pages.add()

    # Add image
    imageFileName = self.data_dir + "logo.png"
    page.add_image(imageFileName, ap.Rectangle(20, 730, 120, 830, True))

    # Add Header
    header = ap.text.TextFragment("New ferry routes in Fall 2029")
    header.text_state.font = ap.text.FontRepository.find_font("Arial")
    header.text_state.font_size = 24
    header.horizontal_alignment = ap.HorizontalAlignment.CENTER
    header.position = ap.text.Position(130, 720)
    page.paragraphs.add(header)

    # Add description
    descriptionText = "Visitors must buy tickets online and tickets are limited to 5,000 per day. \
    Ferry service is operating at half capacity and on a reduced schedule. Expect lineups."
    description = ap.text.TextFragment(descriptionText)
    description.text_state.font = ap.text.FontRepository.find_font("Times New Roman")
    description.text_state.font_size = 14
    description.horizontal_alignment = ap.HorizontalAlignment.LEFT
    page.paragraphs.add(description)

    # Add table
    table = ap.Table()

    table.column_widths = "200"
    table.border = ap.BorderInfo(ap.BorderSide.BOX, 1.0, ap.Color.dark_slate_gray)
    table.default_cell_border = ap.BorderInfo(ap.BorderSide.BOX, 0.5, ap.Color.black)
    table.default_cell_padding = ap.MarginInfo(4.5, 4.5, 4.5, 4.5)
    table.margin.bottom = 10
    table.default_cell_text_state.font = ap.text.FontRepository.find_font("Helvetica")

    headerRow = table.rows.add()
    headerRow.cells.add("Departs City")
    headerRow.cells.add("Departs Island")

    i = 0
    while i < headerRow.cells.count:
        headerRow.cells[i].background_color = ap.Color.gray
        headerRow.cells[
            i
        ].default_cell_text_state.foreground_color = ap.Color.white_smoke
        i += 1

    time = timedelta(hours=6, minutes=0)
    incTime = timedelta(hours=0, minutes=30)

    i = 0
    while i < 10:
        dataRow = table.rows.add()
        dataRow.cells.add(str(time))
        time = time.__add__(incTime)
        dataRow.cells.add(str(time))
        i += 1

    page.paragraphs.add(table)

    document.save(self.data_dir + "Complex.pdf")