无头 Chrome PDF 打印在大型文档中质量较差

use*_*380 5 html pdf-generation adobe-reader google-chrome-devtools google-chrome-headless

我正在使用Headless Chrome通过printToPDF CDP 方法打印 PDF 文件。如果文档有大量页面,那么如果我实际打印 PDF 文件,或者打印到另一个 PDF 文件,那么随着页面数量的增加,页面质量会变差。

为什么会发生这种情况,我该如何解决这个问题?

我在 Win10 上以无头模式使用 Google Chrome 69.0,并使用 Node.js v8.11.3。

例如,我们想打印出以下 HTML 内容,而不需要任何额外的 printToPDF 设置。

<div class="lorem">
1) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur aliquet sem sed neque faucibus dignissim. Sed congue sodales ex, vel bibendum dolor placerat vel. Curabitur ultricies luctus dui, a accumsan purus placerat a. Nullam ut lectus ultricies, mattis enim non, rutrum erat. Nulla sodales tellus in bibendum vehicula. Aenean aliquam tellus eu magna semper rutrum. Donec ultrices vestibulum varius. Suspendisse posuere arcu augue, at varius odio dignissim nec. Vestibulum nec orci faucibus, commodo ante vitae, porta mi. Nunc non efficitur mauris. Vestibulum quis sapien nisl. Duis quam odio, faucibus at posuere eget, egestas nec augue. Aliquam finibus felis felis, ut tincidunt erat gravida pretium.<br><br>
2) Ut nec consectetur neque. Ut ornare tristique libero in vehicula. Quisque eget finibus est. Phasellus id enim lacus. Integer vestibulum nisi nec leo lacinia fermentum. Mauris mattis posuere massa, in mattis ligula molestie sed. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse imperdiet, urna eu tincidunt viverra, ipsum ligula placerat erat, at pulvinar nunc sapien et risus. Aenean pharetra pharetra libero ut euismod. Etiam sit amet tellus rutrum ante lobortis suscipit suscipit sit amet leo. Fusce id ipsum orci. Nulla suscipit malesuada massa. Vestibulum vitae vehicula diam.
</div>
Run Code Online (Sandbox Code Playgroud)

如果我们用打印机打印出PDF文件,那么质量就很好。下面的截图显示了结果:

在此输入图像描述

<div>现在在标签后面<body>、#lorem 之前添加以下内容<div>

<div style="height: 1999900vh; margin: 0; padding: 0; border: 0; display: block;"></div>
Run Code Online (Sandbox Code Playgroud)

这使得 #lorem 之前有 19999 个空白页<div>。现在打印带有'pageRanges': '20000-'设置的文件。如果我们打开 PDF 文件,它看起来不错,但是当我们从 Adob​​e Reader(例如使用 Foxit Reader PDF 打印机)打印它时,它看起来很差:

在此输入图像描述

我尝试添加--disable-accelerated-2d-canvas标志来提高质量,但没有帮助。我也尝试过使用 Foxit 添加--use-system-default-printer标志并打印 PDF 文件,但没有成功。对我来说,打印精确渲染的页面很重要,无论它们在实际布局中的位置。我也不明白为什么会发生这种情况。

我期望这些页面具有相同的质量,无论它们位于文档中的哪个位置。

当我在 Adob​​e Reader 或 Foxit Reader 中打开 PDF 文件时,它看起来不错。当我使用打印机或 Foxit 从 Adob​​e Reader 打印到另一个 PDF 文件时,质量非常差。

欢迎任何想法来解决这个问题。