【发布时间】:2017-12-27 20:22:51
【问题描述】:
我正在使用 PDFsharp 和 MigraDoc 开发 PDF 打印处理器。我正在生成合并的 PDF,包含 2,000 到 10,000 页。打印从该程序生成的 PDF 的打印供应商抱怨文件大小和处理 PDF 所需的时间,因为所有嵌入的字体。我在 Adobe Acrobat Reader DC 中查看了嵌入字体,可以看到有大量完全嵌入的字体和子集。
整个文档中只使用了两种字体,但看起来 PDF 中的每个元素、每个页面上都嵌入了这两种字体。所以,只要说,如果一个页面上有 10 个元素并且有 10,000 个页面,那就是 20,000 个嵌入字体集。
我首先看到的是 PDFsharp 和 MigraDoc 中使用的字体选项。有一个字体嵌入选项。
var renderer = new PdfDocumentRenderer(true, PdfFontEmbedding.None);
var options = new XPdfFontOptions(PdfFontEmbedding.None);
using (var gfx = XGraphics.FromPdfPage(currentPage))//currentPage is of type PdfPage
{
gfx.MFEH = PdfFontEmbedding.None;
...
最初这些嵌入选项设置为PdfFontEmbedding.Always,但我将它们更改为.None,希望问题能够得到解决。不是。事实上,什么都没有改变。仍然嵌入了相同数量的字体并且大小相同。
印刷供应商打电话给我,告诉我他已经拿到了 PDF,将其转换为 postscript,然后再转换回 PDF,文件大小减少了三分之二,所有的字体嵌入都消失了。
就我对 postscript 的了解(基本上,一无所知),我假设不再嵌入字体,因为文件是某种矢量格式或某种东西,并且不再能够选择文本。我想这对客户或供应商来说都不是问题。他们似乎对将生成的 PDF 转换为 postscript 文件然后再转换回 PDF 的想法感到满意。
所以,我一直在研究在 C# 中进行这些转换的可能方法,但并没有真正找到太多。我见过一些关于使用 Ghostscript 或 Ghostscript.Net 的事情。关于这些的文档非常缺乏,我还没有看到任何好的例子。
有谁知道进行这些转换的好方法,使用 PDFsharp 和/或 MigraDoc 来防止字体被嵌入,或者知道解决这个问题的另一个好方法吗?
【问题讨论】:
标签: c# .net fonts pdfsharp migradoc