2013-05-13 81 views
0

我有一個使用iTextSharp的公司PdfSmartCopy類多個較小的PDF文件合併成一個大的一些代碼:如何避免重複的字體資源?

FileStream outStream = new FileStream(outputFilename, FileMode.Create, FileAccess.Write); 
Document document = new Document(); 
PdfSmartCopy copy = new PdfSmartCopy(document, outStream); 
document.Open(); 

foreach (string filename in fileList) 
{ 
    PdfReader reader = new PdfReader(filename); 

    for (int pageNum = 1; pageNum <= reader.NumberOfPages; ++pageNum) 
    { 
     copy.AddPage(copy.GetImportedPage(reader, pageNum)); 
    } 
} 

document.Close(); 

當我提取使用mutool extract的PDF資源,還有每次使用的字體的多個相同副本:

C:\[...]>sha1sum *.cff *.ttf *.png | sort 
0d150f99593d385764a1c7096b72448d09af8d72 *JPIOAD+Helvetica-0020.cff 
0d150f99593d385764a1c7096b72448d09af8d72 *JPIOAD+Helvetica-0036.cff 
0d150f99593d385764a1c7096b72448d09af8d72 *JPIOAD+Helvetica-0049.cff 
0d150f99593d385764a1c7096b72448d09af8d72 *JPIOAD+Helvetica-0069.cff 
0d150f99593d385764a1c7096b72448d09af8d72 *JPIOAD+Helvetica-0084.cff 
0d150f99593d385764a1c7096b72448d09af8d72 *JPIOAD+Helvetica-0099.cff 
17a99e597d3ec2cabf567cbfec032972f7e00962 *DXLQZY+LetterGothicW1Bold-0032.ttf 
17a99e597d3ec2cabf567cbfec032972f7e00962 *GMYLDU+LetterGothicW1Bold-0014.ttf 
17a99e597d3ec2cabf567cbfec032972f7e00962 *MNVLMO+LetterGothicW1Bold-0045.ttf 
[etc.] 

我已經檢查了* .cff和* .TTF文件FontForge,它看起來像他們只包含實際上是在文檔中使用的字符集。

有沒有辦法讓生成的文件只包含一個字體的副本?

回答

1

iText也不iTextSharp可以將字體的子集合併成一個子集。對於一些字體來說,製作這樣一個更大的子集可能是可行的,但在某些情況下,將不同的字體合併爲一個字體將是不可能的(理論上,對於非常大的字體集合,例如中文),在其他情況下,這將是非常困難的(這可能意味着整個內容流需要重寫,因爲字符/字形映射在合併字體中已經改變)。

換句話說:你問的東西不是微不足道的。它不受支持。這是我們在付費諮詢方面只考慮的一種功能。