代码之家  ›  专栏  ›  技术社区  ›  shaneOverby

NET-PDFsharp和MigraDoc-到处嵌入的字体-巨大的文件大小

  •  1
  • shaneOverby  · 技术社区  · 8 年前

    我正在使用PDFsharp&MigraDoc。我正在生成合并的PDF,包含2000到10000页。打印此程序生成的PDF的打印供应商抱怨由于所有嵌入字体,文件大小和处理PDF所需的时间。我在Adobe Acrobat Reader DC中查看了嵌入的字体,可以看到有很多完全嵌入的字体和子集。

    整个文档中只使用了两种字体,但看起来PDF中每个页面上的每个元素都嵌入了这两种字体。如果一个页面上有10个元素,有10000个页面,那就是20000个嵌入式字体集。

    我首先看的是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的想法感到满意。

    有没有人知道一个好方法来进行这些转换,使用PDFsharp和/或MigraDoc来防止嵌入字体,或者知道这个问题的另一个好解决方案?

    1 回复  |  直到 8 年前
        1
  •  1
  •   I liked the old Stack Overflow    8 年前

    如果您使用PDFsharp或MigraDoc创建新文档,那么每个PDF文件中只应嵌入一次字体,无论有多少页面,无论有多少元素使用字体。

    如果您创建1000个PDF文档,每个文档一页,并将其合并为一个1000页的文档,那么您将拥有1000份字体副本。将PDF文档与PDFsharp合并时,不会进行大小优化。

    你写道:“那么,就说,如果一个页面上有10个元素,有10000个页面,那就是20000个嵌入式字体集。”这不应该发生,根据我的经验,在一次运行中创建一个有10000个页面的文档时,这不会发生。

    您提到的字体嵌入选项适用于正在添加到PDF文件的新内容。它们对已嵌入合并或修改的PDF文件中的字体没有影响。