2009-12-11 104 views
52

私は自分のDjango Webアプリケーションからのデータを自動収集し、ダウンロードするようにユーザーに提案するPDFフォームを用意しています。どのようなPythonライブラリを使用すれば、簡単にPDFフォームを事前入力できますか?これらのフォームは印刷されることを意図しています。Django/PythonでPDFフォームを自動入力できますか?

答えて

72

非常に動的なPDFを生成しており、すべてをプログラムで制御する必要がある場合、Reportlabは優れています:データとレイアウト。

既存のPDFでフォームに記入するだけでは、reportlabは過剰であり、基本的には既に作成済みのフォームでPDFを取り出すのではなく、最初からreportlabでPDFを再構築する必要があります。

PDFフォームはFDFデータで動作します。私はPHP FDFライブラリをPythonに移植しました。これをやろうとしたらfdfgenとしてリリースしました。私はそれを使用してフォームのデータを含むfdfファイルを生成し、次にpdftkを使用してfdfをPDFフォームにプッシュして出力を生成します。全体のプロセスは、このように動作します

  1. あなた(またはデザイナー)AcrobatでPDFまたは何を設計し、フォームフィールドをマークし、フィールド名をメモします(私は正確にどのようにわかりませんこれは完了です;私たちのデザイナーはこのステップを行います)。フォームに「名前」と「電話」フィールドがあるとします。
  2. FDFファイルを作成するために使用しfdfgen:

    from fdfgen import forge_fdf 
    fields = [('name','John Smith'),('telephone','555-1234')] 
    fdf = forge_fdf("",fields,[],[],[]) 
    fdf_file = open("data.fdf","w") 
    fdf_file.write(fdf) 
    fdf_file.close() 
    
  3. は、その後、あなたがマージして平坦化するpdftkを実行します。

    ​​

    と記入、編集可能なはもはや存在していることを意味しない(平坦化フォームフィールド)pdfはoutput.pdfになります。

それは少し複雑だし、pdftkをインストールするには、痛みをすることができます(Javaスタックを必要とし、回避する必要があるのUbuntu 9.10上のバグがある)が、それは私がすることができました、最も単純なプロセスです私たちのデザイナーは、レイアウトの変更を自分が望むPDFにすることができ、フィールドの名前を変更しない限り、新しいものをドロップすることができます。ワーキング)。

fdfgenにドキュメントがないことをお詫び申し上げます。 forge_fdf()は本当に必要な唯一の関数であり、引数を説明するドキュメントストリングがあります。私はそれ以上のことをやっていたことはありません。

+0

このサンプルコードを試してみると、次のエラーが表示されます。UnicodeEncodeError: 'ascii'コーデックで10-13桁の文字をエンコードできません:序数が範囲外(128) – MikeN

+3

utf: "fdf_file = codecs.open (「data.fdf」、「w」、「utf-8」)」と表示されます。まず「コーデックをインポートする」必要があります。また、私は著者に報告する特殊文字エンコーディングの問題を発見しました。 –

+0

+1すれば可能です。 fdfgenありがとうございました。私はCSVファイルからたくさんのフォームを一括して埋め込むことができました。 –

4

Try reportlab

また、Outputting PDFsに捨ててください。


編集

私は別の考えを持っていた(ただし、既にあるPDFファイルを持っている、と私はより良いthraxilの答え@好きなら、それは助けにはなりません)。

私は今年、継続教育コースの「修了証明書」を作成したプロジェクトに取り組みました。私が見た角度の1つは、適切にスタイル設定されたWebページ(サーバー側の「Print to PDF」のようなもの)からPDFを直接生成しようとしていたことです。

私が見つけたツールの1つはwkhtmltopdfでした。これはURLをPDFに変換し、かなり良い結果をもたらす、自己完結型のWebKitブラウザです。

アイデアはdjangoのテンプレートエンジンを使用して、必要なもの(画像を含む)を含むページをまとめ、wkhtmltopdfにURLを渡し、出力を取得してユーザーに返します。

実際に実装するだけで(パイプを開くだけで)、ソースのPDFファイルをサーバーにアクセスできないように心配する必要がなく、HTMLを変更してPDFを再設計することができます。

+1

+1。プログラマはhtml/cssでドキュメントをデザインし、良質なPDFに変換することができます。 – gorsky

5

上記のThraxilのソリューション上に構築されたdjangoでpdfビューを作成するための準備が整ったソリューションです。 githubのユーザーに感謝します。 `wkhtmltopdf` - 偉大なユーティリティを言及するため

https://gist.github.com/918403

関連する問題