首页 > 解决方案 > 在浏览器中减小打印 PDF 的文件大小

问题描述

我需要我的网络应用程序(基于反应)来生成一个 pdf 文件。该文件将包含带有生成内容的文本、表格和画布。

我决定使用浏览器的内置打印功能来实现这一点(我也尝试过 pdfkitreact-pdf,但决定使用 html 和 css 进行布局效果最好)。

问题是生成的 PDF 文件相对较大(超过 10MB,而可接受的最大值约为 1MB)。

canvas.toDataURL('image/jpeg', 0.8)我确实尝试通过使用 dataURL 而不是画布生成 JPEG 并使用它来减小大小。

这确实会减少 Chrome 和 Safari 中的文件大小,但不会减少 Firefox 中的文件大小。

使用 Inkscape 导入 PDF,然后导出为 SVG,然后使用文本编辑器检查它(请告诉我有更简单的工作流程)我发现 Chrome 和 Safari 确实嵌入了 JPEG,但 Firefox 创建了一个嵌入图像的 PDF PNG文件。

有什么办法可以改变 Firefox 中的这种行为?我看到的唯一其他选择是使用像 pdfkit 这样的库从 Javascript 生成 PDF 文件——这将以轻松自定义布局为代价。

最小的例子:

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <img src="https://upload.wikimedia.org/wikipedia/commons/a/a4/Forum_romanum_1880.jpg" />
  </body>
</html>

使用 Google Chrome 打印到 PDF 不到 200KB,使用 Firefox 打印到 1MB 以上

标签: javascriptpdffirefoxcanvasprinting

解决方案


如果您打印自己的网页,请使用无头 Chrome 并在此处减小图像大小


推荐阅读