15

PythonとQt4.4を使用していて、いくつかのページを印刷する必要があります。当初、私はこれらのページを作成するためにCSSでHTMLを使用すると思いました。ただし、HTMLにはいくつかの制限があります。

ここで問題となるのは、HTMLよりも優れているが、(またはほぼ)使いやすいものはありますか?さらに、GPLと互換性がある必要があります。

編集:

kdgregory&Mark G:最も明らかな制限は、プリンターの余白を指定できないことです。別の問題があります:ページ番号を追加するにはどうすればよいですか?

Jeremy French:私が印刷しなければならないことの1つは、誰かが注文したすべての製品のリストで、数ページにまたがることができます。

4

10 に答える 10

24

私は 8 年間、Python からの印刷 (または PDF) 出力と戦ってきましたが、これまでのところ、次のアプローチに出くわしました (個人的な好みの順序で)。

  • pyJasper (私が作成) またはJasperServerを介してJasperReportsを使用します。WYSIWYG 設計ツールiReportを使用して、レイアウトを定義できます。Python コードは HTTP 経由で Java ベースの Jasper エンジンに接続し、PDF をレンダリングします (pyJasper がそれを処理します)。私たちはそれを 1 日に数千ページ使用しています。
  • プレーン テキスト出力を使用します。これ以上速くなることはできません。私たちはそれを 1 日あたり数百ページ使用しています。
  • XSLT-FO を使用します。また、FOB などの Java ベースのレンダリング エンジンを呼び出す必要があります。パフォーマンスの問題が発生する可能性がありますが、Java サーバー プロセスを長時間実行することで緩和できます。Jasper と同じアプローチです。私たちはそれを 1 日に数百ページ使用していますが、XSLT-FO 文書を書くのは頭が痛くなりました。新しいコードには使用されません。
  • LaTeXソースを生成し、latex ソフトウェア パッケージを使用して PDF にレンダリングします。LaTeX を好きなように見せるの非常に困難です。ただし、提供されている LaTeX スタイルを使用する限り、問題はありません。当店での生産には使用しておりません。
  • ReportLab Toolkitを使用した PDF 生成。やや低レベル。さらに低レベル: FPDF。FPDF-Ruby を 1 日に数百ページ使用しています。私たちが望むレイアウトを得るには、多くの手間がかかりました。
  • Postscript を直接生成します。奇妙ですが、スピードとコントロールに関しては、これ以上のものはほとんど得られません。これを使用して、1 日あたり数十万枚の JPEG でコンタクト シートを生成しました。いじる必要がありますが、楽しいです。
  • Postscript/PDF を生成するには、 troff /groff を使用します。非常に低レベルですが、シンプルで大量のことを行うのに適しています。このように本番環境で使用したことはありません。

注文、請求書などについては、JasperReports を強くお勧めします。ビジュアル エディターを使用してレイアウトを定義できるため、時間を大幅に節約できます。

于 2009-01-19T21:59:41.810 に答える
14

ラテックスがあります。それが「html と同じくらい使いやすい」カテゴリに該当するかどうかはわかりませんが、難しいことではありません。

于 2009-01-19T17:07:50.747 に答える
7

印刷とはプリンターのことですか?その場合は、ReportLabの PDF ツールを確認してください。

from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
c = canvas.Canvas("hello.pdf")
c.drawString(9*cm, 22*cm, "Hello World!")
c.showPage()
c.save()
于 2009-01-19T17:08:00.403 に答える
4

reStructuredText ファイルを HTML や LaTeX など、印刷可能な PDF 用のさまざまな出力形式に変換するパッケージであるSphinxを検討することもできます。これは BSD の下でライセンスされており、現在は公式の Python ドキュメント ツールです。

于 2009-01-19T17:26:14.717 に答える
4

http://www.w3.org/TR/css3-page/を見たことがありますか? 印刷メディアは高度にカスタマイズ可能です。私の新しいプロジェクトでは、PDF ジェネレーターをこれに置き換えます。

于 2012-10-07T10:36:21.353 に答える
3

XSL Formatting Objects ( The Extensible Stylesheet Language Family (XSL) の一部) は、印刷ドキュメントを完全に制御する必要がある場合に使用します。

次に、 XSL-FO ドキュメントを PDF または PostScript に変換するために、FOPAntenna houseなどの Formatting Objects プロセッサが必要になります。

于 2009-01-19T17:18:15.747 に答える
1

Qt のネイティブ印刷を使用することの何が問題になっていますか?

于 2009-01-19T17:18:00.850 に答える
1

asciidocが好きになりました。基本的に、プレーンテキストを生成します。これは、 Django templatesJinja2などのテンプレート システムを使用することで大幅に拡張できます。これは原則として、mdorseif によって記述された XSLT-FO によく似ています (ツールチェーンを使用して docbook を作成し、その後、好きなものを作成します) が、それほど頭を悩ませるものではありません。ほとんどのことを簡単にする素敵なツールチェーン ラッパーが既にあります。

于 2013-10-31T09:00:42.320 に答える
1

JasperReportsについては既に説明しましたが、サーバーまたはサーブレットなしで (つまり、JasperServer または pyJasper を必要とせずに) Python-Qt アプリケーションで使用します。

基本的に、サーバー/サーブレットの代わりに、Jasper Reports Libraryをインストールします。次に、Jasper Reports Library を使用して XML などのシリアル化された入力から PDF レポートを生成する小さな Java プログラムを作成する必要があります。Web 検索を行うと、このような例がたくさんあるはずです。これを 1 回書くだけで済みます。次に、この Java プログラムを必要なすべてのライブラリとともに JAR ファイルにコンパイルします。

この時点で、JasperSoft Studioをインストールして Jasper レポート テンプレートを作成できます。次に、Python でJPype (またはその他の Python-to-Java ライブラリ) を使用して JVM を開始し、JAR ファイルをロードし、Java 関数を呼び出し、シリアル化されたデータを渡し、必要なレポート テンプレートを指定します。

これはすべて簡単なことではありませんが、非常に簡単です。Qt Designer/Creator のドラッグ アンド ドロップ フォーム エディター、ドラッグ アンド ドロップ JasperReports レポート デザイナー、および Python で収集されたデータから直接 PDF レポートを生成する機能を提供するため、このソリューションが気に入っています。これらはすべて、十分にサポートされているツールとライブラリを使用しているため、このソリューションが近い将来崩壊することはまずありません。

于 2014-12-30T18:37:18.240 に答える
1

または、Mac を使用している場合は、Quartz bindings for Python を確認できますが、明らかに GPL ではありません。

于 2009-01-19T20:58:24.853 に答える