如何使用iText 7删除PDF文件中的重复字体

问题描述 投票:0回答:1

我正在使用iText 7库(v7.0.5.0)。我在RadDiagram.Net(Telerik库)中创建了一个PDF文件(A-1B一致性)。

生成PDF文件时,在其属性(Acrobat Reader>文件>属性>字体)中,文件中有很多带字体,但只有4种主字体,带有变体(Arial,Segoe,Tahoma,TimesNewRoman)。

我可以看到有很多具有相同名称的重复字体。

如果我将文件从Acrobat Reader保存为“缩小的PDF文件”,则会清除所有重复的字体,以便每个字体名称只保留1个字体。

我搜索解决方案以编程方式删除这些重复的字体,因为这些重复的字体显着增加了PDF文件的大小。使用Acrobat Reader压缩,文件大小从2,2 Mo减少到90 6 Ko(没有质量损失)。

你可以找到here我的PDF文件的一个例子。

这个文件有:

  • 8 ArialMT
  • 3 SegoeUI

这是一个例子,但有时,我的文件非常大,例如,压缩将大小从16 Mo减小到1 Mo,因为有很多重复的字体。

[编辑]关于我的用例:

RadDiagram Telerik对象,我将它们导出为PDF文件,如图像。此PDF文件(只有1页)被序列化为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文件中。

[结束编辑]

非常感谢。

.net fonts pdf-generation itext7
1个回答
0
投票

最后,我找到了另一种保存PDF文件的方法。

现在,我没有将它们保存到数据库中,我只使用1个PDF文件,并且我使用PDF字体的字典重新使用它们而不是声明多个时间字体,所以不要增加数字使用的字体(即使这是“相同”字体(与另一个子集))。

© www.soinside.com 2019 - 2024. All rights reserved.