PDF任意(合理范围内)宽度表

时间:2009-05-07 02:57:39

标签: python pdf xhtml latex

我知道PDF生成在这里已经讨论了很多;但是,我还没有找到我需要的东西。

我正在尝试从python生成PDF报告(主要是表格)。是的,我试过ReportLab和比萨。在我不认为在生产中遇到不合理和不切实际的情况下,两者都有列内容“爆发”。

当我说合理时,​​我的意思是8到12列不同的宽度。不是80 - 1200或其他一些。

我不需要原生的python解决方案,因为我可以从linux命令行启动我的脚本。

我有这些报告在XHTML中工作,它们看起来或多或少完美......我更愿意利用它们。

我要问的是:有没有人知道我可以使用哪种工具在PDF格式下以XHTML浏览器渲染的质量呈现任意(在合理范围内)大小的表格?

我想使用像PrinceXML这样的东西;但是这个项目的规模并不能证明这种工具的费用是合理的。

顺便说一下,我已经尝试在Latex中做我需要的东西,我并不赞同,但如果这是一个好主意我会很感激一个例子。

问候,并提前感谢。

3 个答案:

答案 0 :(得分:3)

我完全同意Brandon Craig Rhodes的回答。 TeX,普通或使用像LaTeX或ConTeXt这样的宏包,如果是的话,将是一个很好的解决方案 你需要高质量的输出。然而,TeX是一种沉重的依赖

如果您正在寻找更轻的替代品,您可以尝试

  • 生成xsl-fo并使用apache-fop渲染它,或者

  • 围绕iText编写一个Python包装器。

两者都可以做带边框的任意宽度表。 xsl-fo不是很难学习,如果你习惯了XML更容易 生成比LaTeX代码。

iText是一个功能强大的PDF库,可在MPL和LGPL下使用 有些版本是用Java和C#编写的,但不幸的是 Python中没有。

答案 1 :(得分:2)

使用TeX可能会给您带来良好的效果。我本人想要避免使用LaTeX,但那是因为它是一个非常复杂的宏包,当我尝试使用它时我从未真正理解它;另外,至少考虑到我的口味,与我在普通TeX中使用的文字相比,标记文字似乎是一种非常冗长的方式。

真正的诀窍是提出一种方法来逃避数据可能包含的所有特殊字符,这样你创建的TeX源文件就不会出错,因为你在某个地方使用了一个&符号而TeX解释它作为一个不合时宜的命令。可能需要坐下来使用TeXBook半小时,这样才能让我的报价功能完美运行。

但是如果您的数据只是普通字符串,那么我们可以尝试在没有它的情况下打印一个表。这是一个例子:

#!/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")

最大的问题,正如你可以从PDF中看到这些产品(如果你要运行它并看看),表是没有边框,如果你看一下TeXBook,你会发现生产它们 - 尽管总是可行 - 并不是最自然或最明显的操作。

来想一想,也许LaTeX 有一些用处,如果它有宏来制作带边框的表格,那么毕竟很容易创建。 : - )

顺便说一句,您是否只是想查看WebKit或任何其他浏览器后端是否可以直接从命令行生成PDF?他们以某种方式制作PDF用于印刷;必须有一种方法可以利用它将HTML直接转换为PDF。

答案 2 :(得分:1)

独立程序:wkhtmltopdf正是我所需要的。 XHTML的PDF呈现是免费工具中最好的。