Estou trabalhando em um projeto que tira algumas imagens do usuário e cria um arquivo PDF que contém todas essas imagens.
Existe alguma maneira ou ferramenta para fazer isso no Python? Por exemplo, para criar um arquivo PDF (ou eps, ps) a partir de imagem1 + imagem 2 + imagem 3 -> arquivo PDF?
Observe que o pypdf apenas corta / cola / etc. conteúdo existente em pdf - você não pode adicionar texto ou imagens a um pdf.
drevicko
3
pyPDF2 não é para a criação de novos documentos PDF, 4cs
michelek 15/09/18
160
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 na página de documentação ) O que é ótimo, mas não se você tiver imagens que ainda não foram incorporadas em um PDF.
O pyPDF2 não parece ter nenhuma documentação extra sobre o pyPDF.
O ReportLab é muito extenso. ( Guia do usuário ) No entanto, com um pouco de Ctrl + F e grepping através de sua fonte, obtive o seguinte:
Em seguida, tente isso na linha de comando Python:
from reportlab.pdfgen import canvasfrom 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 verificar a aparência delas e imprimi-las. O exposto acima é suficiente para atingir esse objetivo.
O ReportLab é excelente, mas se beneficiaria da inclusão de mundos hellow como os mencionados com destaque em sua documentação.
Você pode tentar isso (Python-for-PDF-Generation) ou PyQt , que oferece suporte para impressão em pdf.
Python para geração de PDF
O Portable Document Format (PDF) permite criar documentos com a mesma aparência em todas as plataformas. Às vezes, no entanto, um documento PDF precisa ser gerado dinamicamente, e isso pode ser um grande desafio. Felizmente, existem bibliotecas que podem ajudar. Este artigo examina um deles para Python.
Aqui está uma solução que funciona apenas com os pacotes padrão. matplotlibpossui um back-end em PDF para salvar números em PDF. Você pode criar figuras com subparcelas, nas quais cada subtrama é uma de suas imagens. Você tem total liberdade para mexer com a figura: Adicionando títulos, brinque com a posição, etc. Depois que sua figura estiver pronta, salve em PDF. Cada chamada para savefigcriará outra página de PDF.
O exemplo abaixo plota 2 imagens lado a lado, na página 1 e na página 2.
from matplotlib.backends.backend_pdf importPdfPagesimport matplotlib.pyplot as pltfrom scipy.misc import imreadimport osimport 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 fiz isso bastante no PyQt e funciona muito bem. O Qt possui amplo suporte para imagens, fontes, estilos, etc., e tudo isso pode ser gravado em documentos PDF.
Uau, Qt parece incrível. Eles dizem que apóiam 15 plataformas, inc. Windows, Mac OS X, Linux, Android, iOS, Windows RT e esses sistemas operacionais em tempo real - INTEGRITY QNX VxWorks qt.io/qt-framework . E, como sou fã de python, gosto de "PyQt combina todas as vantagens do Qt e Python. Um programador tem todo o poder do Qt, mas é capaz de explorá-lo com a simplicidade do Python". Riverbankcomputing.co.uk / software / pyqt / intro
AnneTheAgile 30/10
7
Acredito que o matplotlib tem a capacidade de serializar gráficos, texto e outros objetos em um documento PDF.
Sim você pode. Esta resposta SO tem alguns bons links sobre como fazê-lo.
Drevicko
6
Eu uso o rst2pdf para criar um arquivo pdf, pois estou mais familiarizado com o RST do que com o HTML. Ele suporta a incorporação de praticamente qualquer tipo de imagem raster ou vetorial.
Ele requer o reportlab , mas achei que o reportlab não é tão fácil de usar (pelo menos para mim).
O fpdf também é python. E usado frequentemente. Consulte a pesquisa PyPI / pip. Mas talvez tenha sido renomeado de pyfpdf para fpdf. Dos recursos: suporte PNG, GIF e JPG (incluindo transparência e canal alfa)
Toda a confusão na nomeação é realmente uma pena. Esta resposta e o comentário de @WojciechKaczmarek realmente merecem mais votos e atenção. PyFPDF é uma porta python de uma biblioteca PDF frequentemente usada originalmente escrita em PHP.
Depende do formato dos arquivos de imagem, mas, para um projeto aqui no trabalho, usei a ferramenta tiff2pdf no LibTIFF, do RemoteSensing.org . Basicamente, usei o subprocesso para chamar tiff2pdf.exe com o argumento apropriado para ler o tipo de tiff que eu tinha e gerar o tipo de pdf que eu queria. Se eles não forem tiffs, você provavelmente poderá convertê-los em tiffs usando PIL, ou talvez encontre 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.
Link / descrição: fpdf.org FPDF é uma classe PHP que permite gerar arquivos PDF com PHP puro, ou seja, sem usar a biblioteca PDFlib. F do FPDF significa Grátis: você pode usá-lo para qualquer tipo de uso e modificá-lo para atender às suas necessidades. O FPDF tem outras vantagens: funções de alto nível. Aqui está uma lista de seus principais recursos: Escolha da unidade de medida, formato e margens da página, Gerenciamento de cabeçalho e rodapé da página, Quebra automática de página, Quebra automática de linha e justificação de texto, Suporte de imagem (JPEG, PNG e GIF), Cores, Links, TrueType, Type1 e suporte a codificação, compactação de página
AnneTheAgile 30/10
12
Não é muito relevante, considerando que a pergunta era sobre Python, não sobre PHP
KingRadical
1
por que todo esse voto negativo? O fpdf também está disponível para python. Instalação do pip fpdf works
user1981924
1
O fpdf pode ter começado com o php. Mas há uma porta python que funciona muito bem. Então, acho que essa é uma resposta muito relevante que merece mais votos do que votos negativos. (Eu não estou certo sobre a situação quando esta resposta foi inicialmente publicada)
Sumudu
3
O 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)
Ei! Corrija-me se eu estiver errado, mas parece que é uma ferramenta bastante poderosa e, ao contrário de muitas, muitas outras listadas aqui não são um wrapper python para uma biblioteca de porcaria php / ruby / perl / pyqt4 / outra porcaria.
Mikaelblomkvistsson 12/02/19
3
Se você está familiarizado com o LaTex, pode considerar o pylatex
Uma das vantagens do pylatex é que é fácil controlar a qualidade da imagem. As imagens no seu pdf terão a mesma qualidade que as imagens originais. Ao usar o reportlab, percebi que as imagens eram compactadas automaticamente e a qualidade da imagem reduzida.
A desvantagem do pylatex é que, como é baseado no LaTex, pode ser difícil colocar as imagens exatamente onde você deseja na página. No entanto, descobri que o uso do argumento position na classe Figure e, às vezes, Subfigure, fornece bons resultados.
Exemplo de código para criar um pdf com uma única imagem:
Além de instalar o pylatex (pip install pylatex), você precisa instalar o LaTex. Para o Ubuntu e outros sistemas Debian, você pode executar sudo apt-get install texlive-full. Se você estiver usando o Windows, eu recomendaria o MixTex
py
;-)[language or tag] some_keyword
como em[python] PDF
ou[python] PDF image
Respostas:
Eu sugiro pyPdf . Funciona muito bem. Também escrevi um post há algum tempo, você pode encontrá-lo aqui .
fonte
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 na página de documentação ) O que é ótimo, mas não se você tiver imagens que ainda não foram incorporadas em um PDF.
O pyPDF2 não parece ter nenhuma documentação extra sobre o pyPDF.
O ReportLab é muito extenso. ( Guia do usuário ) No entanto, com um pouco de Ctrl + F e grepping através de sua fonte, obtive o seguinte:
Em seguida, tente isso na linha de comando Python:
Tudo o que eu precisava era colocar um monte de imagens em um PDF, para que eu pudesse verificar a aparência delas e imprimi-las. O exposto acima é suficiente para atingir esse objetivo.
O ReportLab é excelente, mas se beneficiaria da inclusão de mundos hellow como os mencionados com destaque em sua documentação.
fonte
Eu sugiro PDFkit . ( guia de instalação )
Ele cria pdf a partir de arquivos html. Eu o escolhi para criar pdf em duas etapas da minha pilha Pyramid Pyramid:
pdfkit.from_string(...)
Método de execução passando o html renderizado como parâmetroDessa forma, você obtém um documento PDF com estilo e imagens compatíveis.
Você pode instalá-lo da seguinte maneira:
usando pip
pip install pdfkit
fonte
Você pode tentar isso (Python-for-PDF-Generation) ou PyQt , que oferece suporte para impressão em pdf.
Python para geração de PDF
O Portable Document Format (PDF) permite criar documentos com a mesma aparência em todas as plataformas. Às vezes, no entanto, um documento PDF precisa ser gerado dinamicamente, e isso pode ser um grande desafio. Felizmente, existem bibliotecas que podem ajudar. Este artigo examina um deles para Python.
Leia mais em http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99
fonte
Aqui está uma solução que funciona apenas com os pacotes padrão.
matplotlib
possui um back-end em PDF para salvar números em PDF. Você pode criar figuras com subparcelas, nas quais cada subtrama é uma de suas imagens. Você tem total liberdade para mexer com a figura: Adicionando títulos, brinque com a posição, etc. Depois que sua figura estiver pronta, salve em PDF. Cada chamada parasavefig
criará outra página de PDF.O exemplo abaixo plota 2 imagens lado a lado, na página 1 e na página 2.
fonte
Eu fiz isso bastante no PyQt e funciona muito bem. O Qt possui amplo suporte para imagens, fontes, estilos, etc., e tudo isso pode ser gravado em documentos PDF.
fonte
Acredito que o matplotlib tem a capacidade de serializar gráficos, texto e outros objetos em um documento PDF.
fonte
Eu uso o rst2pdf para criar um arquivo pdf, pois estou mais familiarizado com o RST do que com o HTML. Ele suporta a incorporação de praticamente qualquer tipo de imagem raster ou vetorial.
Ele requer o reportlab , mas achei que o reportlab não é tão fácil de usar (pelo menos para mim).
fonte
O fpdf também é python. E usado frequentemente. Consulte a pesquisa PyPI / pip. Mas talvez tenha sido renomeado de pyfpdf para fpdf. Dos recursos: suporte PNG, GIF e JPG (incluindo transparência e canal alfa)
fonte
Na verdade, você pode tentar xhtml2pdf http://flask.pocoo.org/snippets/68/
fonte
Depende do formato dos arquivos de imagem, mas, para um projeto aqui no trabalho, usei a ferramenta tiff2pdf no LibTIFF, do RemoteSensing.org . Basicamente, usei o subprocesso para chamar tiff2pdf.exe com o argumento apropriado para ler o tipo de tiff que eu tinha e gerar o tipo de pdf que eu queria. Se eles não forem tiffs, você provavelmente poderá convertê-los em tiffs usando PIL, ou talvez encontre 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.
fonte
O fpdf funciona bem para mim. Muito mais simples que o ReportLab e realmente gratuito. Funciona com UTF-8.
fonte
O 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)
fonte
Se você está familiarizado com o LaTex, pode considerar o pylatex
Uma das vantagens do pylatex é que é fácil controlar a qualidade da imagem. As imagens no seu pdf terão a mesma qualidade que as imagens originais. Ao usar o reportlab, percebi que as imagens eram compactadas automaticamente e a qualidade da imagem reduzida.
A desvantagem do pylatex é que, como é baseado no LaTex, pode ser difícil colocar as imagens exatamente onde você deseja na página. No entanto, descobri que o uso do argumento position na classe Figure e, às vezes, Subfigure, fornece bons resultados.
Exemplo de código para criar um pdf com uma única imagem:
Além de instalar o pylatex (pip install pylatex), você precisa instalar o LaTex. Para o Ubuntu e outros sistemas Debian, você pode executar
sudo apt-get install texlive-full
. Se você estiver usando o Windows, eu recomendaria o MixTexfonte