我有一个文件夹,其中多个客户端上传多个PDF文件。 其中一些使用嵌入字体,有些则不使用 我一直致力于优化(在文件大小方面)此文件夹中PDF文件的服务 每个用户可能正在上传大约400个文件,重量在80K到10M之间,我的任务是将所有文件优化到尽可能小的文件大小,质量损失最小。
PDF库正在做得很好。我唯一的问题是我无法从所有文件中删除所有嵌入字体,因为有些文件可能会使用这些字体,结果将是我无法使用的文件。
所以我的问题是:
我想要实现的是从大多数文件中删除所有嵌入字体,但将嵌入字体保存在我实际需要它们的文件中。我明白这取决于我在我的系统上的字体(这些文件应保留在一个系统上,因此可移植性对我来说并不重要),所以我尝试找到一种方法来识别,在优化之前,哪些文件看起来不错没有嵌入字体,以及保存嵌入字体所需的文件。
答案 0 :(得分:0)
APDFL有一个PDFontIsEmbedded()调用。 DotNet接口的Font类具有Embedded属性。使用GarbageCollect保存SaveFlag应该删除任何未引用的间接对象,包括字体。
请注意,资源字典可能会被多个页面共享,因此一个页面未使用的字体可能会被另一个使用相同资源字典的页面使用。
答案 1 :(得分:0)
Adobe PDF Library 15及更高版本提供的服务可以为您优化PDF文件。
优化器具有对所有嵌入字体进行子集化的功能。这将做的是创建每个字体的子集,仅限于文档实际使用的字体的字形。 API如下所示。
void Datalogics::PDFL::PDFOptimizer::SetOption (OptimizerOption option, bool value)
void Datalogics::PDFL::PDFOptimizer::Optimize (Document document, string newPath)
这是您需要的选项
SubsetAllEmbeddedFonts