私はユーザーからいくつかの画像を取得し、これらの画像をすべて含むPDFファイルを作成するプロジェクトに取り組んでいます。
Pythonでこれを行う方法やツールはありますか?例えば。 image1 + image 2 + image 3-> PDFファイルからPDFファイル(またはeps、ps)を作成するには?
このページのヒントに従った後の私の経験です。
pyPDFは画像をファイルに埋め込むことができません。分割とマージのみが可能です。 (出典: ドキュメントページ を介してCtrl + F)これは素晴らしいことですが、まだPDFに埋め込まれていない画像がある場合はそうではありません。
pyPDF2 pyPDFの上に追加のドキュメントはないようです。
ReportLabは非常に広範囲です。 ( serguide )ただし、Ctrl + Fを少し押してソースをgrepすると、次のようになります。
次に、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(...)
メソッドの実行これにより、スタイルと画像がサポートされたPDFドキュメントを取得できます。
次のようにインストールできます。
ピップを使用して
pip install pdfkit
this (Python-for-PDF-Generation)を試すか、 PyQt を試すことができます。これは、pdfへの印刷をサポートしています。
PDF生成用のPython
Portable Document Format(PDF)を使用すると、すべてのプラットフォームでまったく同じように見えるドキュメントを作成できます。ただし、PDFドキュメントを動的に生成する必要がある場合がありますが、これは非常に困難な場合があります。幸いなことに、役立つライブラリがあります。この記事では、Pythonの1つを調べます。
詳細は http://www.devshed.com/c/a/Python/Python-for-PDF-Generation/#whoCFCPh3TAks368.99
Matplotlibには、グラフィックス、テキスト、その他のオブジェクトをPDFドキュメントにシリアル化する機能があると思います。
私はこれをPyQtでかなり行いましたが、非常にうまく機能します。 Qtは画像、フォント、スタイルなどを幅広くサポートしており、それらはすべてPDFドキュメントに書き出すことができます。
標準パッケージのみで機能するソリューションを次に示します。 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()
fpdfはpython(あまりにも)です。そして、よく使われます。 PyPI/pip検索を参照してください。しかし、おそらくpyfpdfからfpdfに名前が変更されました。機能から:PNG、GIF、およびJPGのサポート(透明度とアルファチャネルを含む)
実際にxhtml2pdfを試すことができます http://flask.pocoo.org/snippets/68/
rinohtype PDF、PNG、およびJPEGイメージ(ネイティブ)およびその他のビットマップ形式(Pillowのインストール時)の埋め込みをサポートします。
(完全開示:私はrinohtypeの著者です)
LaTexに精通している場合は、 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 をお勧めします
画像ファイルの形式に依存しますが、ここで作業しているプロジェクトでは、 RemoteSensing.org のLibTIFFでtiff2pdfツールを使用しました。基本的に、サブプロセスを使用して、適切な引数でtiff2pdf.exeを呼び出し、必要な種類のtiffを読み取り、必要な種類のpdfを出力しました。 TIFFでない場合は、おそらくPILを使用してTIFFに変換するか、上記のReportLabのように、画像タイプに固有のツール(または画像が多様な場合はより一般的なツール)を見つけることができます。
fpdfは私に適しています。 ReportLabよりもずっとシンプルで、本当に無料です。 UTF-8で動作します。