从昨天开始这让我很恼火,我只是没主意了。在
我试图用子类pdfkit.PDFKit
(我们称之为MyPDFKit
):它工作得很好(我只是子类化了它,以增加在参数中使用xvfb-run
的可能性)。我指定不是类的问题。在
我想把一些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)。在f.write(..)
是截断传入字符串的函数。在不能是模板或对象数据的问题,因为我可以正确地创建PDF,而只获取一定范围的then(由于HTML行数,在同一呈现中超过350个项目开始导致问题)。例如,objs[:315]
工作正常,但objs[:350]
则不行。在
我也尝试过缓冲区的大小不受限制。以前有人遇到过这个问题吗?在
最后,在另一个程序员的帮助下,我发现了这个问题。在
它看起来像PDFKit,当处理大量的HTML(在我们所说的PDF页面数量超过349页)时,会向缓冲区发送进度条注释,以查看其运行情况。然后,当它完成时,还会发送一个done注释消息。在
这种注释(我说注释是为了给他们一种数据类型,因为我不知道PDF文件是如何处理注释的),在像Adobe Reader这样的程序中,无法处理,所以它检测到文件已损坏/损坏,而在苏门答腊PDF/Edge这样的程序中,它会忽略然后很好地显示PDF。在
现在如何防止这种行为?传递
quiet
参数。但是,为此,您需要将PDFKit子类化(就像我对MyPDFKit所做的那样),并手动添加args
(line of code)。在问题解决了。在
编辑
似乎我可以在
options
kwargs中传递quiet
,因此如果这仅仅是个问题,那么就不需要子类化(尽管在默认情况下激活它会很好…)相关问题 更多 >
编程相关推荐