我正在使用Python和Qt 4.4,我必须打印一些页面。最初我以为我会用CSS和CSS来生成这些页面。但HTML有一些限制。
现在的问题是:有什么比HTML好,但只是(或几乎)易于使用?此外,它应该与GPL兼容。
修改
kdgregory& Mark G:最明显的限制是我无法指定打印机边距。还有一个问题:如何添加页码?
Jeremy French:我要打印的一件事就是有人订购的所有产品的清单,这些产品可以分布在几页上。
答案 0 :(得分:24)
我一直在与Python的打印(或PDF)输出斗争8年了,到目前为止,我遇到了以下方法(按个人喜好排序):
对于订单,发票等我强烈推荐JasperReports。使用可视化编辑器定义布局的能力可以节省大量时间。
答案 1 :(得分:14)
有LaTeX。不确定是否属于“像html一样易于使用”的类别,但并不难。
答案 2 :(得分:7)
通过 print 你的意思是打印机吗?如果是这样,请检查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()
答案 3 :(得分:4)
你见过http://www.w3.org/TR/css3-page/吗?打印介质可高度自定义。 在我的新项目中,我将用这个替换PDF生成器。
答案 4 :(得分:3)
XSL格式化对象(The Extensible Stylesheet Language Family (XSL)的一部分),如果您需要总控制打印文档。
然后,您需要一个格式化对象处理器,如FOP或Antenna house,将XSL-FO文档转换为PDF或PostScript。
答案 5 :(得分:3)
您可以考虑Sphinx,这是一个将reStructuredText文件转换为各种输出格式(包括HTML)和LaTeX(用于可打印的PDF)的软件包。它是在BSD下获得许可的,现在是官方的Python文档工具。
答案 6 :(得分:1)
仅使用Qt's native printing有什么问题?
答案 7 :(得分:1)
或者,如果您使用的是mac,则可以查看quartz bindings for Python,但这显然不是GPL。
答案 8 :(得分:1)
我开始喜欢asciidoc。基本上你生成纯文本。使用Django templates或Jinja2等模板系统可以大大增强这一点。这与mdorseif描述的XSLT-FO很相似(你使用工具链生成docbook,然后是你喜欢的任何东西),但不是那么令人头痛。已经有一个很好的工具链包装器,可以让大多数事情变得简单。
答案 9 :(得分:1)
JasperReports ,但是我们在没有服务器或servlet的Python-Qt应用程序中使用它(也就是说,不需要JasperServer或pyJasper)。
所以基本上,不是服务器/ servlet,而是安装Jasper Reports Library。然后,您需要创建一个Java程序,该程序使用Jasper Reports Library从序列化输入(如XML)生成PDF报告。如果你进行网络搜索,应该有很多例子,你只需要写一次。然后,将包含所有必需库的Java程序编译为JAR文件。
此时,您可以安装JasperSoft Studio并创建Jasper报告模板。然后在Python中,您可以使用JPype(或任何其他Python-to-Java库)来启动JVM,加载JAR文件,调用Java函数,将序列化数据传递给它,并指定所需的报告模板。
所有这一切都不是微不足道的,但它非常简单。我们喜欢这个解决方案,因为它在Qt Designer / Creator中提供了一个拖放式表单编辑器,一个拖放式JasperReports报表设计器,以及直接从Python中收集的数据生成PDF报表的功能。所有这些都使用了受到良好支持的工具和库,因此在可预见的未来,这种解决方案不太可能会崩溃。