Eu estou trabalhando em um projeto que leva algumas imagens do usuário e, em seguida, cria um arquivo PDF que contém todas essas imagens.
Existe alguma maneira ou ferramenta para fazer isso em Python? Por exemplo. criar um arquivo PDF (ou eps, ps) a partir do arquivo image1 + image 2 + image 3 -> PDF?
Aqui está a minha experiência depois de seguir as dicas nesta página.
o pyPDF não pode incorporar imagens em arquivos. Só pode dividir e mesclar. (Fonte: Ctrl + F através de sua página documentação ) O que é ótimo, mas não se você tiver imagens que não estejam incorporadas em um PDF.
pyPDF2 parece não ter nenhuma documentação extra sobre o pyPDF.
ReportLab é muito extenso. ( Userguide ) No entanto, com um pouco de Ctrl + F e grepping através de sua fonte, eu tenho isso:
Então tente isso na linha de comando do Python:
from reportlab.pdfgen import canvas
from reportlab.lib.units import inch, cm
c = canvas.Canvas('ex.pdf')
c.drawImage('ar.jpg', 0, 0, 10*cm, 10*cm)
c.showPage()
c.save()
Tudo o que eu precisava era colocar um monte de imagens em um PDF, para que eu pudesse checar como elas estavam e imprimi-las. O acima é suficiente para atingir esse objetivo.
O ReportLab é ótimo, mas se beneficiaria da inclusão de mundos inofensivos como o acima destacado em sua documentação.
Sugiro Pdfkit . (instalação guia )
Cria pdf a partir de arquivos html. Eu escolhi para criar pdf em 2 passos da minha pilha Pyramid Pyramid:
pdfkit.from_string(...)
passando o html renderizado como parâmetroDessa forma, você obtém um documento em PDF com estilo e imagens suportadas.
Você pode instalá-lo da seguinte maneira:
usando pip
pip install pdfkit
Você pode tentar this (Python-for-PDF-Generation) ou você pode tentar PyQt , que tem suporte para impressão em pdf.
Python para PDF Geração
O formato Portable Document Format (PDF) permite criar documentos com a mesma aparência em todas as plataformas. Às vezes, um documento PDF precisa ser gerado dinamicamente, e isso pode ser um grande desafio. Felizmente, existem bibliotecas que podem ajudar. Este artigo examina um desses para o Python.
Leia mais em http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99
Eu fiz isso um pouco no PyQt e funciona muito bem. O Qt tem amplo suporte para imagens, fontes, estilos, etc, e todos eles podem ser escritos em documentos PDF.
Aqui está uma solução que funciona apenas com os pacotes padrão. matplotlib
tem um backend PDF para salvar figuras em PDF. Você pode criar figuras com subtramas, onde cada subtrama é uma das suas imagens. Você tem total liberdade para mexer com a figura: Adicionando títulos, jogando com a posição, etc. Uma vez que sua figura esteja pronta, salve em PDF. Cada chamada para savefig
criará outra página do PDF.
Exemplo abaixo representa duas imagens lado a lado, na página 1 e na página 2.
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.pyplot as plt
from scipy.misc import imread
import os
import numpy as np
files = [ "Column0_Line16.jpg", "Column0_Line47.jpg" ]
def plotImage(f):
folder = "C:/temp/"
im = imread(os.path.join(folder, f)).astype(np.float32) / 255
plt.imshow(im)
a = plt.gca()
a.get_xaxis().set_visible(False) # We don't need axis ticks
a.get_yaxis().set_visible(False)
pp = PdfPages("c:/temp/page1.pdf")
plt.subplot(121)
plotImage(files[0])
plt.subplot(122)
plotImage(files[1])
pp.savefig(plt.gcf()) # This generates page 1
pp.savefig(plt.gcf()) # This generates page 2
pp.close()
Eu acredito que o matplotlib tem a capacidade de serializar gráficos, textos e outros objetos em um documento pdf.
o fpdf é python (também). E frequentemente usado. Veja pesquisa PyPI/pip. Mas talvez tenha sido renomeado de pyfpdf para fpdf. De recursos: Suporte a PNG, GIF e JPG (incluindo transparência e canal alfa)
Você pode realmente tentar xhtml2pdf http://flask.pocoo.org/snippets/68/
o fpdf funciona bem para mim. Muito mais simples que o ReportLab e realmente grátis. Funciona com o UTF-8.
rinohtype suporta a incorporação de imagens PDF, PNG e JPEG (nativamente) e outros formatos de bitmap (quando o Pillow está instalado).
(Divulgação completa: Eu sou o autor do rinohtype)
Depende de qual formato seus arquivos de imagem estão, mas para um projeto aqui no trabalho eu usei a ferramenta tiff2pdf no LibTIFF de RemoteSensing.org . Basicamente, usei o subprocesso para chamar tiff2pdf.exe com o argumento apropriado para ler o tipo de discussão que eu tinha e produzir o tipo de pdf que eu queria. Se eles não são tiffs você provavelmente poderia convertê-los em tiffs usando PIL, ou talvez encontrar uma ferramenta mais específica para o seu tipo de imagem (ou mais genérica se as imagens forem diversas) como o ReportLab mencionado acima.
Se você está familiarizado com o LaTex você pode querer considerar pylatex
Uma das vantagens do pylatex é que é fácil controlar a qualidade da imagem. As imagens no seu pdf serão da mesma qualidade que as imagens originais. Ao usar o reportlab, percebi que as imagens foram automaticamente compactadas e a qualidade da imagem reduzida.
A desvantagem do pylatex é que, uma vez que é baseado no LaTex, pode ser difícil colocar as imagens exatamente onde você quer na página. No entanto, descobri que usar o argumento position na classe Figure e, às vezes, Subfigure, fornece bons resultados.
Exemplo de código para criar um pdf com uma única imagem:
from pylatex import Document, Figure
doc = Document(documentclass="article")
with doc.create(Figure(position='p')) as fig:
fig.add_image('Lenna.png')
doc.generate_pdf('test', compiler='latexmk', compiler_args=["-pdf", "-pdflatex=pdflatex"], clean_tex=True)
Além de instalar o pylatex (pip install pylatex), você precisa instalar o LaTex. Para o Ubuntu e outros sistemas Debian você pode executar o Sudo apt-get install texlive-full
. Se você estiver usando o Windows eu recomendaria MixTex