gpt4 book ai didi

python - 无法将完整的 HTML 写入 PDF

转载 作者:太空宇宙 更新时间:2023-11-03 15:05:41 25 4
gpt4 key购买 nike

这从昨天开始就让我很恼火,我已经没有主意了。

我正在尝试使用子类 pdfkit.PDFKit 编写 PDF(我们称之为 MyPDFKit):它运行良好(我只是将其子类化以添加可能性在参数中使用xvfb-run)。我指定不是类(class)的问题

我试图将一些 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>

使用这些模板和具有近 400 个实例的 objs,HTML 的输出接近 5k 行。

当试图将其放入文件中时,问题就出现了。它可能位于这两个地方之一:

  1. MyPDFKit.to_pdf(..)(从 MyPDFKit.from_string(..) 调用)的 stdout 有大小限制,并截断部分字符串(该函数的源代码为 here )。
  2. f.write(..) 是截断您传入的字符串的函数。

不可能是模板或对象数据的问题,因为当我只获取一定范围的然后(同一渲染中超过 350 个项目开始导致由于 HTML 数量而导致问题)时,我可以正确创建 PDF。线)。例如,objs[:315] 效果很好,但 objs[:350] 效果不佳。

我尝试将缓冲区大小设置为-1,这是无限的,但也不起作用。有人以前遇到过这个问题吗?

最佳答案

好吧,最后,在另一位程序员的帮助下,我发现了这个问题。

看起来 PDFKit 在处理大量 HTML 时(我们所说的 PDF 页面数量或多或少超过 349 个),会向缓冲区发送进度条注释以查看进展情况。然后,当它完成时,还会发送一条完成评论消息。

这个注释(我说注释是为了给它们一种数据类型,因为我真的不知道PDF文件如何处理注释),在像Adobe Reader这样的程序中,无法处理,所以它检测到文件已损坏/损坏,而在 SumatraPDF/Edge 等程序中,它只是忽略然后很好地显示 PDF。

现在,如何防止这种行为?传递 --quiet 参数。但是,为此,您需要对 PDFKit 进行子类化(就像我对 MyPDFKit 所做的那样),并手动添加 args ( line of code )。

问题已解决。

编辑

似乎我可以在 options kwargs 中传递 --quiet ,因此如果这只是问题,则不需要子类化(尽管让它处于事件状态会很好)默认情况下...)

关于python - 无法将完整的 HTML 写入 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44694827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com