Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何使用iText 7删除PDF文件中的重复字体_.net_Fonts_Pdf Generation_Itext7 - Fatal编程技术网

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

.net 如何使用iText 7删除PDF文件中的重复字体,.net,fonts,pdf-generation,itext7,.net,Fonts,Pdf Generation,Itext7,我正在使用iText 7library(v7.0.5.0)。我从.Net中的RadDiagram(Telerik库)创建了一个PDF文件(a-1B一致性) 生成PDF文件时,在其属性(Acrobat Reader>文件>属性>字体)中,文件会带来很多字体,但只有4种主字体,带有变体(Arial、Segoe、Tahoma、TimesNewRoman) 我可以看到有许多同名的重复字体 如果我将文件从Acrobat Reader保存到“简化PDF文件”,所有重复的字体都将被清除,每个字体名称只保留一种

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

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

我可以看到有许多同名的重复字体

如果我将文件从Acrobat Reader保存到“简化PDF文件”,所有重复的字体都将被清除,每个字体名称只保留一种字体

我搜索一个解决方案,以编程方式删除这些重复字体,因为这些重复字体会显著增加PDF文件的大小。 使用Acrobat Reader压缩,文件大小从2,2个月减少到906千欧(无质量损失)

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

此文件具有:

  • 8阿里亚尔姆特
  • 3塞戈伊
这是一个例子,但有时,我的文件非常大,例如,压缩将大小从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
在每个
SetFont()
方法调用
\u pdffort
对象

但是创建步骤很重要,因为当我关闭de-Document对象时,这一步需要知道字体,我只为它创建了字体

A最后,这是相同的字体(它们具有相同的名称),但每个字体都没有合并,因此它们被添加到全局PDF文件中

[结束编辑]


非常感谢。

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


现在,我没有将它们保存到数据库中,我只处理1个PDF文件,我使用PDF字体的字串来重复使用它们,而不是声明几个时间字体,因此不要增加使用的字体数(即使这是“相同”的字体(有另一个子集))。

在您提到的问题的一条评论中,请求了一个带有嵌入式字体的pdf文件,但OP放弃了这个问题。不要像那个人。将您的pdf文件放到网上,以便其他人可以尝试复制您的问题。事实上,我们需要查看该文件。可能您没有看到正在使用的字体,但可能页面资源中仍然有一些对这些字体的引用。只要存在对对象的引用,该对象就不是未使用的。iText甚至不能从页面字典中删除未使用的资源(现在)。您可以找到我的PDF文件示例。我在研究中发现有一些重复的字体,Acrobat缩小大小的PDF文件选项会删除这些重复的字体,之后,每个字体只有一个副本。因此我认为真正的问题可能是“如何删除重复的字体,以便按字体类型只保留一个字体”,不是吗?也许我必须更新我的帖子,不是吗?恐怕我必须同意@Bruno的观点-合并同一字体的不同子集是一项相当艰巨的工作,不仅要处理字体,还要处理字体的所有用法。也有相当多的边界条件需要考虑。因此,我认为这(远远)超出了堆栈溢出问题的范围。