我正在使用iText 7
库(v7.0.5.0)。我从RadDiagram
中的.Net
( Telerik库)创建了一个PDF文件(A-1B符合性)。
生成PDF文件时,其属性( Acrobat Reader > 文件> 属性> 字体 ),该文件带有很多自带字体,但只有4种主字体,并带有变体( Arial , Segoe , Tahoma ,< em> TimesNewRoman )。
我看到有很多同名的重复字体。
如果我将文件从Acrobat Reader保存到“ 精简PDF文件”,则会清除所有重复的字体,每个字体名称仅保留一种字体。
我搜索以编程方式删除这些重复字体的解决方案,因为这些重复字体会大大增加PDF文件的大小。 通过Acrobat Reader压缩,文件大小从2,2 Mo减小到906 Ko(无质量损失)。
您可以找到here我的PDF文件的示例。
此文件具有:
这是一个示例,但是有时我的文件很大,例如,由于存在很多重复的字体,压缩将大小从16 Mo减小到1 Mo。
[ EDIT ] 关于我的用例:
从RadDiagram
Telerik 对象中,将它们导出到PDF文件中,就像图像一样。该PDF文件(只有一页),被序列化为Bytes()
,并保存到数据库中。在特定步骤中,所有序列化的PDF都被链接到一个全局PDF文件中。
显然,问题出在我保存每个PDF文件时,因为在每次创建时,我都会调用以下代码:
_pdfFont = PdfFontFactory.CreateFont(FONT_PATH_ARIAL, PdfEncodings.IDENTITY_H, True)
声明:
Private Const FONT_PATH_ARIAL As String = "c:\windows\fonts\Arial.ttf"
Private _pdfFont As PdfFont
在每个_pdfFont
方法中都会调用SetFont()
对象。
但是创建步骤很重要,因为当我关闭de Document对象时,该对象需要知道仅为它创建的字体。
最后,这是相同的字体(它们具有相同的名称),但是每种字体都不会合并,因此会将它们添加到全局PDF文件中。
[结束编辑]
非常感谢。
答案 0 :(得分:0)
最后,我找到了另一种保存PDF文件的方法。
现在,我没有将它们保存到数据库中,我仅使用1个PDF文件,并且使用的是PDF字体字典来重新使用它们,而不是声明多个时间字体,所以不要增加使用的字体数量(即使这是“相同”字体(带有另一个子集))。