我正在使用PDFsharp的PDF打印處理器& MigraDoc。我正在生成合並的PDF,其中包含2,000到10,000頁。打印此程序生成的PDF的打印供應商抱怨文件大小以及由於所有嵌入字體而導致處理PDF所用的時間量。我在Adobe Acrobat Reader DC中查看了嵌入式字體,可以看到有大量完全嵌入的字體和子集。C#.NET - PDFsharp&MigraDoc - 無處不在的字體 - 海量文件大小
在整個文檔中只使用了兩種字體,但看起來每個頁面上的每個元素在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來保持嵌入字體,或知道這個問題的另一個很好的解決方案?
謝謝你的回答。它效果很好。把我的一個較大的PDF從幾乎1GB降到18MB。客戶非常高興。 – shaneOverby