2

我有一个文件夹,多个客户上传多个 PDF 文件。其中一些使用嵌入式字体,有些则没有。
我一直致力于优化(在文件大小方面)此文件夹中的 PDF 文件的服务。
每个用户可能要上传大约 400 个文件,重量在 80K 到 10M 之间,我的任务是将所有文件优化到尽可能小的文件大小,同时将质量损失降到最低。

PDF 库在这方面做得很好。我唯一的问题是我无法从所有文件中删除所有嵌入字体,因为某些文件可能使用这些字体,结果将是一个我无法使用的文件。

所以我的问题是:

  1. 如何检测哪些文件使用以及哪些文件不使用嵌入字体?
  2. 优化使用嵌入字体的文件时,如何仅删除未使用的字体?

我想要实现的是从大多数文件中删除所有嵌入字体,但将嵌入字体保留在我实际需要的文件中。我知道这取决于我系统上的字体(这些文件应该保留在一个系统上,所以可移植性对我来说并不那么重要),所以我尝试找到一种方法来识别,在优化之前,哪些文件看起来不错没有嵌入字体,以及我需要哪些文件来保留嵌入字体。

4

2 回答 2

0

APDFL 有一个 PDFontIsEmbedded() 调用。DotNet 接口的 Font 类具有 Embedded 属性。使用 GarbageCollect SaveFlag 保存应删除任何未引用的间接对象,包括字体。

请注意,资源字典可能会被多个页面共享,因此一个页面未使用的字体可能会被使用相同资源字典的另一个页面使用。

于 2017-08-14T15:01:10.470 回答
0

Adobe PDF 库版本 15 及更高版本提供了一项服务,可为您优化 PDF 文件。

优化器具有对所有嵌入字体进行子集化的功能。这将做的是创建每个字体的子集,仅限于文档实际使用的字体的字形。API 如下。

void Datalogics::PDFL::PDFOptimizer::SetOption (OptimizerOption option, bool value)
void Datalogics::PDFL::PDFOptimizer::Optimize (Document document, string newPath)

这是您需要的选项

SubsetAllEmbeddedFonts 
于 2017-08-14T15:14:27.413 回答