这让我从昨天开始惹恼了我,我只是出于想法。
我正在尝试编写带有子类pdfkit.PDFKit
的PDF(我们称之为MyPDFKit
):它运行良好(我只是将其子类化以增加使用xvfb-run
的可能性args)。我指定不是课程的问题。
我试图将一些HTML转换为PDF。模板看起来像这样:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- Simplified for reading. -->
<style type="text/css">..</style>
</head>
<body>
<!-- Simplified for reading. -->
{% for obj in objs %}
<div>
<div>
<p>{{ obj.name }}</p>
</div>
<p>{{ obj.age }}</p>
</div>
{% endfor %}
</body>
</html>
使用这些模板,objs
有近400个实例,HTML的输出接近5k行。
尝试将其溅入文件时出现问题。它可能出现在以下两个地方之一:
MyPDFKit.to_pdf(..)
(从MyPDFKit.from_string(..)
调用)的stdout
具有限制大小,并截断字符串的一部分(函数的源代码为here)。< / LI>
f.write(..)
是截断您传入的字符串的那个。不能是模板或对象数据的问题,因为我只能在获得某个范围时才能正确创建PDF(同一渲染中超过350个项目由于HTML编号而导致问题开始导致问题线)。例如,objs[:315]
效果很好,但objs[:350]
没有。
我已经尝试将缓冲区大小设置为-1,这是无限制的,但也不起作用。以前有人遇到过这个问题吗?
答案 0 :(得分:0)
好的,最后,在另一位程序员的帮助下,我找到了问题。
看起来像PDFKit,当处理大量的HTML(我们谈论的PDF页面的数量超过349个或多或少)时,将进度条注释发送到缓冲区以查看它是如何进行的。然后,完成后,还会发送完成评论消息。
这条评论(我说评论给他们一种数据,因为我不知道PDF文件是如何处理评论的),在Adobe Reader等程序中无法处理,因此它检测到文件已损坏/损坏,而在SumatraPDF / Edge这样的程序中,它只是忽略了它并很好地显示了PDF。
现在,如何防止这种行为?传递--quiet
参数。但是,为此,您需要继承PDFKit(就像我使用 MyPDFKit 一样),并手动添加args
(line of code)。
问题解决了。
修改强>
似乎我可以在--quiet
kwargs中传递options
,所以如果只是问题,则不需要子类化(尽管默认情况下将其设置为活动会很好......)