1

从昨天开始,这一直让我很生气,我只是没有想法。

我正在尝试编写带有子类的 PDF pdfkit.PDFKit(我们称之为):它运行良好(我只是将它子类化以增加在 argsMyPDFKit中使用的可能性)。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大小有限制,并且会截断部分字符串(函数的源代码在此处)。
  2. f.write(..)是截断您传入的字符串的那个。

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

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

4

1 回答 1

1

好的,所以最后,在另一位程序员的帮助下,我找到了问题所在。

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

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

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

问题解决了。

编辑

似乎我可以传入kwargs,所以如果这只是问题,--quietoptions不需要子类化(尽管默认情况下让它处于活动状态会很好......)

于 2017-06-28T12:32:38.710 回答