ユーザーからいくつかの画像を取得し、これらの画像すべてを含むPDFファイルを作成するプロジェクトに取り組んでいます。
Pythonでこれを行う方法またはツールはありますか?たとえば、image1 + image 2 + image 3-> PDFファイルからPDFファイル(またはeps、ps)を作成するには、
[language or tag] some_keyword
のように[python] PDF
か[python] PDF image
ユーザーからいくつかの画像を取得し、これらの画像すべてを含むPDFファイルを作成するプロジェクトに取り組んでいます。
Pythonでこれを行う方法またはツールはありますか?たとえば、image1 + image 2 + image 3-> PDFファイルからPDFファイル(またはeps、ps)を作成するには、
[language or tag] some_keyword
のように[python] PDF
か[python] PDF image
回答:
このページのヒントに従った後の私の経験は次のとおりです。
pyPDFは画像をファイルに埋め込むことができません。分割とマージのみが可能です。(出典:Ctrl + F(ドキュメントページ全体))これはすばらしいことですが、PDFにまだ埋め込まれていない画像がある場合はそうではありません。
pyPDF2には、pyPDFの上に追加のドキュメントがないようです。
ReportLabは非常に広範です。(ユーザーガイド)ただし、Ctrl + Fを少し押してソースをgreppingすると、次のようになります。
次に、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()
必要なのは、たくさんの画像をPDFに入れて、画像がどのように表示され、印刷されるかを確認できるようにすることだけです。上記はその目標を達成するのに十分です。
ReportLabはすばらしいですが、上記のようなhelloworldをドキュメントに目立つように含めるとメリットがあります。
HTMLファイルからPDFを作成します。私は、Python Pyramidスタックから2ステップでPDFを作成するためにそれを選択しました:
pdfkit.from_string(...)
レンダリングされたhtmlをパラメーターとして渡してメソッドを実行するこのようにして、スタイルと画像がサポートされたPDF文書を取得します。
次のようにインストールできます。
ピップを使用して
pip install pdfkit
これを試すか(Python-for-PDF-Generation)、またはPDF への印刷をサポートするPyQtを試すことができます。
PDF生成
用のPython Portable Document Format(PDF)を使用すると、すべてのプラットフォームでまったく同じに見えるドキュメントを作成できます。ただし、PDFドキュメントを動的に生成する必要がある場合もありますが、これは非常に困難な場合があります。幸いなことに、役立つライブラリがあります。この記事では、Pythonのそのうちの1つを調べます。
詳細については、http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99をご覧ください。
これは、標準パッケージでのみ機能するソリューションです。matplotlib
図をPDFに保存するPDFバックエンドがあります。各サブプロットがイメージの1つであるサブプロットを含む図を作成できます。タイトルを追加したり、位置を操作したりするなど、図をいじる自由があります。図が完成したら、PDFに保存します。を呼び出すたびにsavefig
、PDFの別のページが作成されます。
以下の例は、1ページと2ページに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()
私はこれをPyQtでかなり行いましたが、非常にうまく機能します。Qtは画像、フォント、スタイルなどを幅広くサポートしており、それらすべてをPDF文書に書き出すことができます。
matplotlibには、グラフィックス、テキスト、その他のオブジェクトをPDFドキュメントにシリアル化する機能があると思います。
fpdfはpython(あまりにも)です。そして、よく使われます。PyPI / pip検索を参照してください。しかし、おそらくpyfpdfからfpdfに名前が変更されました。機能から:PNG、GIF、JPGのサポート(透明度とアルファチャネルを含む)
実際にxhtml2pdfを試すことができますhttp://flask.pocoo.org/snippets/68/
画像ファイルの形式によって異なりますが、ここでのプロジェクトでは、RemoteSensing.orgの LibTIFFにあるtiff2pdfツールを使用しました。基本的に、サブプロセスを使用して適切な引数を指定してtiff2pdf.exeを呼び出し、取得した種類のtiffを読み取り、希望する種類のpdfを出力しました。それらがTIFFでない場合は、おそらくPILを使用してTIFFに変換するか、上記のReportLabのように、画像タイプに固有の(または画像が多様な場合はより一般的な)ツールを見つけることができます。
fpdfはうまく機能します。ReportLabよりもはるかにシンプルで、本当に無料です。UTF-8で動作します。
rinohtypeは、PDF、PNG、JPEG画像(ネイティブ)およびその他のビットマップ形式(Pillowがインストールされている場合)の埋め込みをサポートしています。
(完全な開示:私はrinohtypeの作者です)
あなたがラテックスに精通している場合は、検討する必要がありますpylatexを
pylatexの利点の1つは、画質を簡単に制御できることです。PDFの画像は、元の画像と同じ品質になります。reportlabを使用すると、画像が自動的に圧縮され、画像の品質が低下することがありました。
pylatexの欠点は、LaTexに基づいているため、ページ上の目的の場所に画像を正確に配置することが難しい場合があることです。ただし、Figureクラス、および場合によってはサブフィギュアで位置引数を使用すると、十分な結果が得られることがわかりました。
単一の画像でPDFを作成するためのサンプルコード:
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)
pylatex(pip install pylatex)のインストールに加えて、LaTexをインストールする必要があります。Ubuntuおよびその他のDebianシステムでは、を実行できますsudo apt-get install texlive-full
。Windowsを使用している場合は、MixTexをお勧めします
py
;-)