我必须使用网络应用生成大型PDF。 PDF是使用客户端的大量电子邮件内容数据集生成的,现在它是用PHP编写的,我正在做的基本上是循环遍历数据集中的每个项目,为每个客户端创建一个单独的HTML页面,然后添加所有这些通过添加页面选项将页面逐个添加到wkhtmltopdf。
这显然不是很优雅,当输入非常大时,php会死掉,就像1000个客户端一样。这个pdf背后的想法是我们必须定期向我们的客户发送物理邮件,我们只想创建一个大文件,然后我们将打印并单独将它们放入信封中,然后邮寄它们。
我现在正在使用Python而不是php重做这个。我也不确定应遵循哪种编码实践来确保以最快和最有效的方式生成PDF。
以下是我想到的几个选项
我想知道我可以创建一个大变量,然后将整个内容写入一个html文件,然后使用它来创建使用wkhtmltopdf的pdf。然而,这将是一个非常大的变量,RAM可能会变得疯狂。
不确定我将如何实现这一点,但是我可能只创建一个文件并继续在该html文件的底部附加内容而不是创建一堆html文件?
也许完全相同的编程设计/概念将神奇地与Python一起使用 ...?
我认为这些选项中的任何一个或全部都可能是完全错误的,但也存在缺陷。
编辑:写入一个文件无法正常工作,因为这些邮件必须以物理方式发送,我需要确保每个客户端的每个新内容都是从新页面开始的。如果我写一个大文件,我就无法做到。
答案 0 :(得分:2)
就wkhtmltopdf而言,分页很大程度上取决于您的内容和要求。我需要特定的分页符,但我没有“1个内容应该总是一页1”的限制 - 如果你这样做,请不要理会它。此外,如果您有非常具体的样式规则,则可能很难取决于样式。我用wkhtmltopdf做的最大的PDF只有100页左右,所以我无法评论尺寸。
我想用wkhtmltopdf做的是格式化这样的内容
<head>
<style>
.pb { page-break-before: always; }
</style>
</head>
<body>
<div id="mail1" class="pb">...</div>
<div id="mail2" class="pb">...</div>
<!-- etc etc -->
</body>
这可确保每封电子邮件都从新页面开始。然后使用所需的样式和cli选项将输出提供给wkhtmltopdf,并检查一切是否按计划完成。这个测试应该很快。
此外,如果HTML非常简单并且您始终可以依赖于特定格式(您可以使用简单的XML架构验证它),您可以尝试使用iTextSharp并手动转换HTML。我没有这样做,听起来很糟糕,但可能对你有用 - iTextSharp非常快。