2013-05-13 79 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可以将字体的子集合并成一个子集。对于一些字体来说,制作这样一个更大的子集可能是可行的,但在某些情况下,将不同的字体合并为一个字体将是不可能的(理论上,对于非常大的字体集合,例如中文),在其他情况下,这将是非常困难的(这可能意味着整个内容流需要重写,因为字符/字形映射在合并字体中已经改变)。

换句话说:你问的东西不是微不足道的。它不受支持。这是我们在付费咨询方面只考虑的一种功能。