web-dev-qa-db-ja.com

PythonでPDFファイルを作成する方法

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

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

156
Stephen T.

pyPdf をお勧めします。本当にすてきです。しばらく前にブログ記事も書きましたが、見つけることができます こちら

40
Geo

このページのヒントに従った後の私の経験です。

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

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

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

    • まず、 Windowsインストーラーをダウンロード および ソース
    • 次に、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をドキュメントに顕著に含めることでメリットが得られます。

144
Evgeni Sergeev

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

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

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

これにより、スタイルと画像がサポートされたPDFドキュメントを取得できます。

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

  • ピップを使用して

    pip install pdfkit

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

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

15
gruszczy

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

7
Andrea

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

7
Allen

標準パッケージのみで機能するソリューションを次に示します。 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()
6

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

6
mirek

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

reportlab が必要ですが、reportlabの使用はそれほど簡単ではありません(少なくとも私にとって)。

6
ismailsunni

実際にxhtml2pdfを試すことができます http://flask.pocoo.org/snippets/68/

3
zeroc00l

rinohtype PDF、PNG、およびJPEGイメージ(ネイティブ)およびその他のビットマップ形式(Pillowのインストール時)の埋め込みをサポートします。

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

3
Brecht Machiels

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 をお勧めします

3
Chepe

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

2
Tofystedeth

fpdfは私に適しています。 ReportLabよりもずっとシンプルで、本当に無料です。 UTF-8で動作します。

1
mfs