2009-05-07 14 views
2

私はPDF生成がここではたくさん議論されていることを知っています。しかし、私はまだ私が必要なものを見つけることができませんでした。PDF任意のテーブル(理由の範囲内)幅

私はPythonからPDFレポート(主にテーブル)を生成しようとしています。はい、私はReportLabとPisaを試しました。両方とも、コラムの内容が、生産に遭遇するのが不合理で非現実的ではないと思った状況で「中断」しました。

私が妥当と言うとき、私は幅が異なる8 - 12列を意味します。 80 - 1200またはそのようなものではありません。

私はLinuxのコマンドラインからスクリプトを起動することができるため、ネイティブのPythonソリューションは必要ありません。

私はこれらのレポートをXHTMLで動作させていますが、それは多かれ少なかれ完全に見えます...私はそれらを活用したいと思います。

私が尋ねるのは、XHTMLブラウザのレンダリングに近い品質のPDFで、任意のサイズのテーブルをレンダリングするために使用できるツールを誰もが知っていますか?

PrinceXMLのようなものを使用したいと思います。このプロジェクトの規模は、そのようなツールの費用を正当化するものではありません。

私がラテックスで必要としていることをしようとしましたが、それは私にはあてはまりませんでしたが、それがの良いアイデア私は例を感謝します。

よろしくお願いいたします。

答えて

1

スタンドアロンプ​​ログラム:wkhtmltopdfは私が必要としていたものです。 XHTMLのPDFレンダリングは、無料のツールから見ても最高です。

2

TeXを使用すると良い結果が得られるかもしれません。私はLaTeXを避けるように誘惑されるでしょうが、それは本当に複雑なマクロパッケージであり、使用しようとすると決して理解できませんでした。さらに、私の好みを少なくとも与えてくれたのですが、それは普通のTeXで使用していたものに比べてテキストをマークアップする非常に冗長な方法のようでした。

あなたのデータに含まれるすべての特殊文字をエスケープする方法が登場するので、あなたが作成したTeXソースファイルはどこかでアンパサンドを使いTeXが解釈するのでエラーになりませんそれはアウトオブプレイスコマンドです。 TeXBookを使って30分座って、おそらく私が完全に機能するクォート機能を得るためには、

しかし、あなたのデータが普通の文字列であれば、それを使わないでテーブルを印刷することができます。あなたはPDFからこの製品を見ることができるように大きな問題は、(あなたがそれを実行して見てみましょう場合)、

#!/usr/bin/env python 

import os 

# Create a 2x3 PDF table of items, using TeX. 

format = r"# \hfil & \hfil #" 
data = [['Hydrogen', 1], 
     ['Silicon', 14], 
     ['Mercury', 80]] 

table_data = r'\cr '.join('&'.join(str(i) for i in row) for row in data) 

f = open('table.tex', 'w') 
f.write(r"\halign{" + format + r"\cr " + table_data + r"\cr}\end") 
f.close() 

os.system("tex table.tex") 
os.system("dvipdf table.dvi") 

もしあなたが、テーブルには、国境を持っていない、とということである。ここでは例ですTeXBookを見てみると、いつでも可能な限り、それらを制作することは、最も自然で分かりやすい操作ではありません。

LaTeX の場合は、には、境界線付きの表を作成しやすいマクロがあれば、多少の使い方があるかもしれません。 :-)

WebKitや他のブラウザのバックエンドをHTMLから直接、コマンドラインから作ることができるかどうかを確認しましたか?彼らは印刷のために何らかの形でPDFを生成します。 HTMLをPDFに直接変換する方法を利用する方法が必要です。

+0

返信いただきありがとうございます!私はサーバーモードでOpenOfficeを動作させることを考えていましたが、現在のプロダクションセットアップでは飛ばないでしょう(このプロジェクトはそれほど優先度は高くありません)。ウェブキットの提案では、私はちょうど、発見した: http://code.google.com/p/wkhtmltopdf/ と私はそれを試してみるつもりですかなり有望です。 TeXの例をありがとう。 乾杯! –

+0

ラテックスで表の境界線を作成するのは簡単です。水平ラインの場合は\ hlineを使用し、垂直ラインの場合は、\ begin {tabular}コマンドのあとに次のようにカラムを挟んでパイプを入れます。 \ begin {tabular} {| r | r | r |} 1&2 &3 \ tabularnewline \ hline 4&5&6 \ tabularnewline \ hline \ end {tabular} そこには罫線のある表があります。 – Mica

3

私はBrandon Craig Rhodesの答えに完全に同意します。 TeX、プレーンまたはLaTeXやConTeXtのようなマクロパッケージを使用すると、高品質の出力が必要な場合は、良い解決策になります。 しかし、TeXはあなたが軽い代替を探している場合は、XSL-FOを生成し、Apache-FOPとそれをレンダリング、または

  • は、Pythonを書く

    • に試すことができます重い依存

      ですラッパー約iText

    どちらも境界線を持つ任意の幅テーブルを実行できます。 xsl-foは学ぶのが難しくありません。もしあなたがXMLに慣れていれば、LaTeXコードよりも が生成されやすくなります。

    iTextはMPLとLGPLで利用できる強力なPDFライブラリです JavaとC#で書かれたバージョンがありますが、残念ながら はまだPythonにはありません。

  • 関連する問題