0

我有一个大小为 13.1MB 的 pdf 文件。使用 Acrobat Reader DC 打印时,假脱机文件的大小为 105MB。但是,当我尝试使用 PdfiumViewer 以编程方式打印时,假脱机文件大小超过 500MB,最终由于打印机内存不足导致程序崩溃。

代码如下

var pdfStream = new FileStream("file.pdf", FileMode.Open);
var pdfDocument = PdfDocument.Load(pdfStream);
var printDocument = pdfDocument.CreatePrintDocument();

printDocument.Print();

我知道 pdf 文件需要转换为打印机可以理解的某种数据格式,并且数据的大小因应用程序而异。我的问题是,Acrobat 如何减小假脱机文件的大小?在将文件转换为打印机可以理解的数据格式之前,它是否会预处理 pdf 文件(压缩?)?

我正在尝试获取一些线索,并希望可以像 Acrobat 一样减少假脱机文件的大小。

4

1 回答 1

0

你的问题没有简单的答案,所以我会给你一些困难的。

您可以尝试使用 PostScript 驱动程序从两个程序打印更简单的文档(例如单个 PDF 页面)到暂停的打印机,然后比较存储在此处的假脱机文件:

C:\Windows\System32\spool\PRINTERS

根据过去的经验,我怀疑 Acrobat 会进行一些 PDF 优化以使其更易于呈现。但是,除非您计划改进 Pdfium 或 PdfiumViewer,否则这些知识将无助于解决您的问题。

我会说你的选择是:

  1. 分析打印操作并找出问题所在。是泄漏吗?这可能是你可以解决的问题。如果有帮助,您可以一次打印一页吗?还是您尝试打印的 PDF 文档由未正确处理的大型高分辨率页面组成,例如这个问题?(我已经链接到存档的原始存储库,因为你没有说你正在使用哪个。)

  2. 寻找其他 PDF 打印选项,例如这个有点老的问题中提到的那些。您可以使用各种商业开源解决方案。如果您无法自行修复 PdfiumViewer,则需要使用仍在维护的项目,以便报告您发现的任何错误。

于 2020-07-22T14:06:27.697 回答