我需要我的Web应用程序(基于反应)来生成pdf文件。该文件将包含带有生成内容的文本,表格和画布。
我决定使用浏览器的内置打印功能来实现此目的(我也尝试过pdfkit和react-pdf,但决定使用html和css进行布局效果最佳)。
问题在于生成的PDF文件相对较大(超过10MB,而大约1MB是可以接受的最大值)。
我确实尝试通过使用canvas.toDataURL('image/jpeg', 0.8)
生成JPEG并使用dataURL而不是画布来减小大小。
这确实会减小Chrome和Safari中的文件大小,但不会减小Firefox中的文件大小。
使用Inkscape导入PDF,然后导出为SVG,然后使用文本编辑器进行检查(请告诉我,这是一个更简单的工作流程),我发现Chrome和Safari确实嵌入了JPEG,但是Firefox使用图像嵌入为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>
打印为PDF时,使用Google Chrome浏览器不到200KB,使用Firefox则超过1MB