如何减小打印假脱机文件的大小

How to reduce print spool file size

我有一个大小为 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 那样减小假脱机文件的大小。

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

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

C:\Windows\System32\spool\PRINTERS

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

我会说你的选择是:

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

  2. 寻找其他 PDF 打印选项,例如您可以使用的 this somewhat old question. There are various commercial and open source 解决方案中提到的选项。如果您无法自行修复 PdfiumViewer,那么您将需要使用一个仍在维护的项目,以便报告您发现的任何错误。