无法将完整的HTML写入PDF

2024-10-02 00:26:25 发布

您现在位置:Python中文网/ 问答频道 /正文

从昨天开始这让我很恼火,我只是没主意了。在

我试图用子类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行。在

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

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

不能是模板或对象数据的问题,因为我可以正确地创建PDF,而只获取一定范围的then(由于HTML行数,在同一呈现中超过350个项目开始导致问题)。例如,objs[:315]工作正常,但objs[:350]则不行。在

我也尝试过缓冲区的大小不受限制。以前有人遇到过这个问题吗?在


Tags: 字符串div模板objforpdfstylehtml
1条回答
网友
1楼 · 发布于 2024-10-02 00:26:25

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

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

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

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

问题解决了。在

编辑

似乎我可以在optionskwargs中传递 quiet,因此如果这仅仅是个问题,那么就不需要子类化(尽管在默认情况下激活它会很好…)

相关问题 更多 >

    热门问题