javascript - 在浏览器中减小打印 PDF 的文件大小
问题描述
我需要我的网络应用程序(基于反应)来生成一个 pdf 文件。该文件将包含带有生成内容的文本、表格和画布。
我决定使用浏览器的内置打印功能来实现这一点(我也尝试过 pdfkit和react-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 以上
解决方案
如果您打印自己的网页,请使用无头 Chrome 并在此处减小图像大小
推荐阅读
- unity3d - 为什么动画从 Blender 导出到 Unity (.fbx) 后会这样
- php - 使用多个表在一个 while 中添加两个以上的 while 循环
- ios - 如何将骰子图像设为 Int 值?迅速
- powershell - etc/host 文件条目是否匹配,如果条目不匹配,则发送触发器
- java - 将 Morphia 升级到 2.0.0 的问题
- typescript - 对象数组的自定义属性类型
- java - YAMLException:不允许使用特殊字符
- javascript - Svelte:使组件对变量反应(重新渲染)
- android - SecurityException: 未能找到用户 0 的提供程序 com.package.name.provider ....;在 API 级别 30
- mysql - UPDATE tbl SET name = REGEXP_REPLACE(`name`,[:digit:],'')