Criando um PDF complexo

Contents
[ ]

O Olá, Mundo exemplo mostrou passos simples para criar um documento PDF usando Python e Aspose.PDF. Neste artigo, vamos analisar a criação de um documento mais complexo com Aspose.PDF for Python. Como exemplo, usaremos um documento de uma empresa fictícia que opera serviços de balsas de passageiros. Nosso documento conterá uma imagem, dois fragmentos de texto (cabeçalho e parágrafo) e uma tabela.

Se criarmos um documento do zero, precisamos seguir certas etapas:

  1. Instanciar um Document objeto. Nesta etapa, criaremos um documento PDF vazio com alguns metadados, mas sem páginas.
  2. Adicionar um Page para o objeto Document. Então, agora nosso Document terá uma página.
  3. Adicionar um Imagem para o Page.
  4. Criar um TextFragment para cabeçalho. Para o cabeçalho usaremos a fonte Arial com tamanho de fonte 24pt e alinhamento central.
  5. Adicionar cabeçalho à página paragraphs.
  6. Criar um TextFragment para descrição. Para a descrição usaremos a fonte Arial com tamanho de fonte 24pt e alinhamento central.
  7. Adicionar descrição à página paragraphs.
  8. Criar e Estilizar Tabela. Definir largura da coluna, bordas, preenchimento e fonte.
  9. Adicionar tabela à página paragraphs.
  10. Salvar um documento “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")