python pdf

COMO CRIAR ARQUIVOS PDF COM PYTHON

Compartilhe!

COMO CRIAR ARQUIVOS PDF COM PYTHON

Esta postagem cobrirá dois pacotes usados ​​para criar arquivos PDF com Python, incluindo pdfkit e ReportLab .

Crie arquivos PDF com Python e pdfkit

pdfkit foi a primeira biblioteca que aprendi a criar arquivos PDF. Um bom recurso do pdfkit é que você pode usá-lo para criar arquivos PDF a partir de URLs. Para começar, você precisará instalá-lo junto com um utilitário chamado wkhtmltopdf . Use o pip para instalar o pdfkit do PyPI:

pip install pdfkit

Assim que estiver configurado, você pode começar a usar o pdfkit . No exemplo abaixo, baixamos a página principal da Wikipedia como um arquivo PDF. Para fazer o pdfkit funcionar, você precisará adicionar wkhtmltopdf ao seu PATH ou configurar o pdfkit para apontar para onde o executável está armazenado (a última opção é usada abaixo).

Baixe uma página da web como PDF

# import package
import pdfkit
 
# configure pdfkit to point to our installation of wkhtmltopdf
config = pdfkit.configuration(wkhtmltopdf = r"C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe")
 
# download Wikipedia main page as a PDF file
pdfkit.from_url("https://en.wikipedia.org/wiki/Main_Page", "sample_url_pdf.pdf", configuration = config)

Você também pode definir o caminho de saída como False, o que retornará uma versão binária do PDF no Python, em vez de baixar a página da web para um arquivo externo.

pdfkit.from_url("https://en.wikipedia.org/wiki/Main_Page", output_path = False, configuration = config)

Como criar um PDF a partir de HTML

Um dos melhores recursos do pdfkit é que você pode usá-lo para criar arquivos PDF a partir de HTML, incluindo strings de HTML que você passa diretamente em Python.

s = """<h1><strong>Sample PDF file from HTML</strong></h1>
       <br></br>
       <p>First line...</p>
       <p>Second line...</p>
       <p>Third line...</p>"""
 
pdfkit.from_string(s, output_path = "new_file.pdf", configuration = config)

Além disso, o pdfkit pode criar arquivos PDF lendo arquivos HTML.

pdfkit.from_file("sample_html_file.html", output_path = "new_file2.pdf", configuration = config)

Você também pode criar arquivos PDF com HTML / CSS mais complexos. Você simplesmente precisa passar o HTML como uma string ou armazená-lo em um arquivo que pode ser passado para o pdfkit . Vamos fazer outro exemplo, mas desta vez, vamos criar uma tabela usando HTML e CSS.

Criação de tabelas em um arquivo PDF

table_html = """<!DOCTYPE html>
<html>
<head>
<style>
table, th, td {
  border: 1px solid black;
}
 
table {
  width: 100%;
}
</style>
</head>
<body>
 
<h2>Sample Table</h2>
 
<table>
  <tr>
    <th>Field 1</th>
    <th>Field 2</th>
  </tr>
  <tr>
    <td>x1</td>
    <td>x2</td>
  </tr>
  <tr>
    <td>x3</td>
    <td>x4</td>
  </tr>
</table>
 
</body>
</html>
 """
 
pdfkit.from_string(table_html, output_path = "sample_table.pdf", configuration = config)
python criar tabela pdf

Criação de arquivos PDF com Python e ReportLab

O próximo pacote que discutiremos é ReportLab . ReportLab é uma das bibliotecas mais populares para a criação de arquivos PDF.

Você pode instalar o ReportLab usando pip:

pip install reportlab

Aqui está um exemplo inicial para criar um PDF simples com uma linha de texto. A primeira parte do código importa o módulo canvas do ReportLab . Em seguida, criamos uma instância da classe Canvas (observe o “C” maiúsculo desta vez) com o nome do arquivo que queremos criar. Terceiro, usamos drawString para escrever uma linha de texto. O (50, 800) são as coordenadas de onde colocar o texto (isso pode exigir alguma experimentação). Por último, salvamos o arquivo.

from reportlab.pdfgen import canvas
 
report = canvas.Canvas("first_test.pdf")
 
report.drawString(50, 800, "**First PDF with ReportLab**")
report.save()

Adicionar imagens a um arquivo PDF

A seguir, vamos criar um arquivo PDF de amostra contendo uma imagem. Aqui, vamos usar a biblioteca de travesseiros para criar um objeto Image . Neste exemplo, precisamos criar uma lista de elementos que usaremos para construir o arquivo PDF (nos referimos a esta lista como informações abaixo). Para esta instância, a lista conterá apenas um elemento – o objeto Image que representa a imagem que colocaremos no arquivo PDF, mas como veremos no próximo exemplo, também podemos usar esta lista para armazenar outros elementos para colocar no arquivo PDF.

Além disso, observe que aqui estamos usando a classe SimpleDocTemplate , que basicamente faz o que parece – cria um modelo de documento simples que podemos usar para preencher as informações. Isso fornece mais estrutura do que usar o canvas , como acima.

# import in SimpleDocTemplate
from reportlab.platypus import SimpleDocTemplate
from PIL import Image
 
# create document object
doc = SimpleDocTemplate("sample_image.pdf")
info = []
 
# directory to image file we want to use
image_file = "sample_plot.png"
 
# create Image object with size specifications
im = Image(image_file, 3*inch, 3*inch)
 
# append Image object to our info list
info.append(im)
 
# build / save PDF document
doc.build(info)

Criação de parágrafos de texto

Generalizando em nosso código acima, podemos adicionar alguns parágrafos de texto, seguidos por uma imagem de amostra.

from reportlab.platypus import Paragraph
 
doc = SimpleDocTemplate("more_text.pdf")
 
p1 = "<font size = '12'><strong>This is the first paragraph...</strong></font>"
p2 = "<font size = '12'><strong>This is the second paragraph...</strong></font>"
p3 = "<font size = '12'><strong>This is the third paragraph...</strong></font>"
p4 = "<br></br><br></br><br></br>"
 
image_file = "sample_plot.png"
 
im = Image(image_file, 3*inch, 3*inch)
 
info = []
 
info.append(Paragraph(p1))
info.append(Paragraph(p2))
info.append(Paragraph(p3))
info.append(Paragraph(p4))
info.append(im)
 
doc.build(info)

Como ajustar fontes

Para ajustar os tipos de fonte, podemos ajustar nosso primeiro exemplo ReportLab acima para usar o método setFont .

from reportlab.pdfgen import canvas
 
report = canvas.Canvas("test_with_font.pdf")
 
report.setFont("Courier", 12)
 
report.drawString(50, 800, "**Test PDF with Different Font**")
report.save()

Criação de um PDF com várias páginas

A seguir, vamos mostrar como criar um PDF com várias páginas. Esta é uma tarefa comum e útil de se fazer. Para lidar com a criação de várias páginas, modificaremos o exemplo acima para criar um PDF com três páginas separadas. Uma maneira de informar ao ReportLab que o conteúdo de uma única página foi concluído é usar o método showPage , como abaixo. Qualquer conteúdo que você criar posteriormente será adicionado à próxima página. Então, podemos chamar o método showPage novamente para criar uma terceira página.

from reportlab.pdfgen import canvas
 
report = canvas.Canvas("multiple_pages.pdf")
report.setFont("Courier", 12)
 
report.drawString(50, 800, "**This is the first page...**")
report.showPage()
 
report.drawString(50, 800, "**This is the second page...**")
report.showPage()
 
report.drawString(50, 800, "**This is the third page...**")
report.showPage()
 
report.save()

Outra maneira de criar quebras de página usando o SimpleDocTemplate anterior na postagem é assim:

# import PageBreak, along with SimpleDocTemplate
from reportlab.platypus import SimpleDocTemplate, PageBreak
 
# create new file with image and multiple pages
doc = SimpleDocTemplate("sample_image_multiple_pages.pdf")
info = []
 
image_file = "sample_plot.png"
 
im = Image(image_file, 3*inch, 3*inch)
info.append(im)
 
# add page break 
info.append(PageBreak())
info.append(Paragraph("Second page..."))
 
# add third page
info.append(PageBreak())
info.append(Paragraph("Third page..."))
 
# build PDF
doc.build(info)

Conclusão

É isso para este post! Se você gostou de ler, por favor, compartilhe este artigo com seus amigos. Confira mais sobre JOBU por clicando aqui . A documentação do pdfkit está aqui .

Compartilhe!