PythonでPDFファイルを作成する方法[終了]


156

ユーザーからいくつかの画像を取得し、これらの画像すべてを含むPDFファイルを作成するプロジェクトに取り組んでいます。

Pythonでこれを行う方法またはツールはありますか?たとえば、image1 + image 2 + image 3-> PDFファイルからPDFファイル(またはeps、ps)を作成するには、


47
ときにあなたがで探しているものは何でも疑い、接頭辞でpy;-)
MJV

8
別のSO検索トリック:[language or tag] some_keyword のように[python] PDF[python] PDF image
MJV

:matplolibを使用してここに来る人のためにstackoverflow.com/questions/17788685/...
デヴィッド・パークス

受け入れられた答えが間違った答えであるので、私は....この質問をdownvoted
boatcoder

回答:


39

pyPdfをお勧めします。それは本当にうまくいきます。私は少し前にブログ投稿も書きましたが、ここで見つけることができます。


7
PyPDF2の現在のフォークはここにあります
エドモンドバーネット

98
pypdfは切り取り/貼り付け/その他のみを行うことに注意してください。既存のpdfコンテンツ-PDFにテキストや画像を追加することはできません。
drevicko

3
pyPDF2は、新しいPDF文書、4CS作成するためではありません
michelek

160

このページのヒントに従った後の私の経験は次のとおりです。

  1. pyPDFは画像をファイルに埋め込むことができません。分割とマージのみが可能です。(出典:Ctrl + F(ドキュメントページ全体))これはすばらしいことですが、PDFにまだ埋め込まれていない画像がある場合はそうではありません。

  2. pyPDF2には、pyPDFの上に追加のドキュメントがないようです。

  3. ReportLabは非常に広範です。(ユーザーガイド)ただし、Ctrl + Fを少し押してソースをgreppingすると、次のようになります。

必要なのは、たくさんの画像をPDFに入れて、画像がどのように表示され、印刷されるかを確認できるようにすることだけです。上記はその目標を達成するのに十分です。

ReportLabはすばらしいですが、上記のようなhelloworldをドキュメントに目立つように含めるとメリットがあります。


13
reportlabは私が試したPDF生成に最適であり、間違いなく最も完全であると言わざるを得ません。ただし、それも少し複雑です。blog.pythonlibrary.org/2010/03/08/…blog.pythonlibrary.org/2010/09/21/…–
Jose Salvatierra

1
これはまさに私が探していたものでした
Maarten '20

@JoseSalvatierraありがとうJose ...これは本当に簡単です。ブログのリンクをありがとう。
Arindam Roychowdhury

33

Pdfkitをお勧めします。(インストールガイド

HTMLファイルからPDFを作成します。私は、Python Pyramidスタックから2ステップでPDFを作成するためにそれを選択しました:

  1. PDFドキュメントに必要なスタイルとマークアップを含むmakoテンプレートを使用してサーバー側をレンダリングする
  2. pdfkit.from_string(...)レンダリングされたhtmlをパラメーターとして渡してメソッドを実行する

このようにして、スタイルと画像がサポートされたPDF文書を取得します。

次のようにインストールできます。

  • ピップを使用して

    pip install pdfkit

  • また、(Ubuntuで)wkhtmltopdfをインストールする必要があります。

14

これを試す(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をご覧ください。


リンクが機能しなくなった。
Robert Koch

9

これは、標準パッケージでのみ機能するソリューションです。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()

私のテストでは、コードは2つの画像を持つ単一のページを生成します
コンストラクター

コードの更新バージョンがで見つけることができgithub.com/constructor-igor/TechSugar/blob/master/pythonSamples/...
コンストラクタ

7

私はこれをPyQtでかなり行いましたが、非常にうまく機能します。Qtは画像、フォント、スタイルなどを幅広くサポートしており、それらすべてをPDF文書に書き出すことができます。


1
わあ、Qtはすばらしく見えます。彼らは、15のプラットフォームをサポートしていると言います。Windows、Mac OS X、Linux、Android、iOS、Windows RT、およびこれらのリアルタイムオペレーティングシステム-INTEGRITY QNX VxWorks qt.io/qt-framework。そして、私はpythonのファンなので、「PyQtはQtとPythonのすべての利点を組み合わせています。プログラマーはQtのすべての機能を備えていますが、Pythonのシンプルさでそれを活用できます。」riverbankcomputing.co.uk / software / pyqt / intro
AnneTheAgile 2014年

7

matplotlibには、グラフィックス、テキスト、その他のオブジェクトをPDFドキュメントにシリアル化する機能があると思います。


はい、できます。このSOの回答には、それを行う方法に関するいくつかの良いリンクがあります。
drevicko 2014

6

私はrst2pdfを使用してPDFファイルを作成しています。これは、HTMLよりもRSTに精通しているためです。ほとんどすべての種類のラスターまたはベクター画像の埋め込みをサポートしています。

それにはreportlabが必要ですが、reportlabはそれほど簡単には使用できないことに気づきました(少なくとも私にとって)。


6

fpdfはpython(あまりにも)です。そして、よく使われます。PyPI / pip検索を参照してください。しかし、おそらくpyfpdfからfpdfに名前が変更されました。機能から:PNG、GIF、JPGのサポート(透明度とアルファチャネルを含む)


1
あなたの答えは不明確ですが、thyereは確かにPyFPDF pfoject pyfpdf.readthedocs.io/en/latest
Wojciech Kaczmarek

ネーミングにおけるすべての混乱は本当に残念です。この回答と@WojciechKaczmarekのコメントは、本当に賛成と注目に値します。PyFPDFは、もともとPHPで書かれた、よく使用されるPDFライブラリのpython移植版です。
表意文字


3

画像ファイルの形式によって異なりますが、ここでのプロジェクトでは、RemoteSensing.orgの LibTIFFにあるtiff2pdfツールを使用しました。基本的に、サブプロセスを使用して適切な引数を指定してtiff2pdf.exeを呼び出し、取得した種類のtiffを読み取り、希望する種類のpdfを出力しました。それらがTIFFでない場合は、おそらくPILを使用してTIFFに変換するか、上記のReportLabのように、画像タイプに固有の(または画像が多様な場合はより一般的な)ツールを見つけることができます。


3

fpdfはうまく機能します。ReportLabよりもはるかにシンプルで、本当に無料です。UTF-8で動作します。


2
リンク/説明:fpdf.org FPDFは、純粋なPHPでPDFファイルを生成できるようにする、つまりPDFlibライブラリを使用せずに使用できるPHPクラスです。FPDFのFはFreeの略です。あらゆる種類の用途に使用でき、ニーズに合わせて変更できます。FPDFには、他にも利点があります。高水準関数です。主な機能のリストは次のとおりです。測定単位の選択、ページ形式とマージン、ページヘッダーとフッターの管理、自動改ページ、自動改行とテキストの位置揃え、画像サポート(JPEG、PNGおよびGIF)、色、リンク、 TrueType、Type1、エンコーディングサポート、ページ圧縮
AnneTheAgile 2014年

12
質問がPHPではなくPythonに関するものであったことを考えるとあまり関連性がありませんでした
KingRadical '28年

1
なぜこのすべての反対投票ですか?fpdfはpythonでも使用できます。pip install fpdf works
user1981924

1
fpdfはphpで始まった可能性があります。しかし非常にうまく機能するpythonポートがあります。したがって、これは非常に適切な回答であり、反対票よりも賛成票に値する価値があると思います。(この回答が最初に投稿されたときの状況は
わかり

3

rinohtypeは、PDF、PNG、JPEG画像(ネイティブ)およびその他のビットマップ形式(Pillowがインストールされている場合)の埋め込みをサポートしています。

(完全な開示:私はrinohtypeの作者です)


1
おい!私が間違っている場合は修正してください。しかし、それは非常に強力なツールであり、他の多くとは異なり、ここにリストされている他の多くは、優れたphp / ruby​​ / perl / pyqt4 /その他のがらくたライブラリのpythonラッパーではありません。
Mikaelblomkvistsson

3

あなたがラテックスに精通している場合は、検討する必要があります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をお勧めします

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.