在iPad应用程序生成的PDF中嵌入自定义字体

Tom*_*Tom 5 pdf pdf-generation embedded-fonts ios

概观

我在iPad应用程序中生成一个四页PDF文档,该文档使用自定义字体Trade Gothic.它正确嵌入到应用程序中,看起来很棒.

但是,该应用程序的一部分是通过电子邮件发送PDF作为留下.此发送文件将所有字体显示为默认sans类型,在少数系统上,我收到错误无法找到或创建字体'RVYPRT + TradeGothicLTStd-Light'.某些字符可能无法正确显示或打印.

我正在使用UIKit Framework生成PDF.这是一个使用相同过程的教程:http://www.ioslearner.com/generate-pdf-programmatically-iphoneipad/

我的问题

如何将字体嵌入PDF输出中,以便在发送后将其正确显示为自定义字体而非默认类型.

提前致谢!

更新1:我发现的类似未解答的问题

IOS在PDF中嵌入字体

iOS石英嵌入pdf中的字体

更新2:有关字体的更多信息

字体http://store1.adobe.com/cfusion/store/html/index.cfm?store=OLS-US&event=displayFont&code=TRDQ10003000是一个OpenType字体,允许通过许可证嵌入.

此外,使用的默认字体是标准的.

如果PDF文件中缺少某些字体,Adobe Acrobat和Adobe Reader将自动尝试使用这些程序中内置的多个Master字体之一来模拟丢失的字体.这样,文档将不会像设计者想要的那样完全表示,但至少文本不会重排.用于此的多主字体是:Adobe Serif MMAdobe Sans MM

来源:http://www.prepressure.com/pdf/basics/fonts

更新3: 字体在PDF中引用,但未嵌入

该应用程序似乎试图嵌入字体,但它们没有正确嵌入.以下是文件 - >文档属性下嵌入字体的屏幕截图:

在此输入图像描述

我看到的第一个问题是,当字体实际上是OpenType字体时,字体被列为类型1.正如预期的那样,"实际字体"是Sans MM(找不到嵌入字体时使用的字体).

更新4:在另一个PDF(使用Adobe生成,而不是iPad应用程序)中,所需的字体作为子集嵌入.我不确定,但这让我相信应该可以通过编程方式做同样的事情.

在此输入图像描述

Kur*_*fle 8

根据其许可证,您使用的字体和"看起来很棒"的字体,TradeGothic,不允许嵌入到PDF(或其他)文档中.

(为什么字体设计师想要做到这一点超出了我的小脑袋.毕竟他们出售了许可证用于文件,不是吗? - 为什么[我最近经历过第一手资料]一个大公司会设计他们的企业形象围绕着一种这样的字体,但后来"太便宜",只购买不允许嵌入的字体许可证,因此迫使他们的员工向他们的客户发送糟糕的PDF,这对这个故事只会更加疯狂......)

从第二次更新中可以看出,您已经发现了这一事实.

您似乎误解的是"文档属性"屏幕截图:

  1. OpenType字体有不同的风格.一些使用(内部)TrueType整形技术,一些使用Type1/PostScript方法.这就解释了为什么你看到它被声明为Type1.
  2. 不,应用程序不会 "尝试嵌入字体(但这样做未正确)".它相当似乎HONOR"不嵌入"在这台是非常局限的字体文件-flag.
  3. 这些PDF接收系统发出警告"无法找到或创建字体'RVYPRT + TradeGothicLTStd-Light'.某些字符可能无法正确显示或打印"并没有错.他们只是......

    • ...没有在本地安装该字体,或
    • ...没有Adobe Multiple Master字体技术,或者
    • ...不使用Adobe Reader或Acrobat(这有包括MM的东西).

我的简单建议,多年来在我的客户面前重复了数百次:

  1. 始终在PDF中嵌入所有字体.(除非你有充分的理由不去,并且知道后果.)
  2. 切勿购买(或使用)不允许嵌入的字体.(如果您不知道如何检查当前的字体,请在此问题上获得一些专业建议.)

更新:

基本上,"嵌入标志"可以表示四个(重要的)不同级别的限制.(实际上,这个标志仅适用于TrueType和OpenTypes,而不适用于更老式的PostScript Type1字体.从技术上讲:这个标志的名称是fsType,它是一个位掩码,它包含在OS/2中 TrueType和OpenType字体表....)

这些级别指定类型代工厂允许在文档中嵌入字体的位置和时间以及用于何种目的(不仅是PDF,还包括Word,OpenOffice或任何其他文档类型:

  1. 不允许嵌入.
    您可以在安装了字体的系统上创建电子文档,您可以对其进行编辑,然后进行查看.啊,你也可以打印它:Adobe PostScript打印机驱动程序将包含在PostScript文件中打印所需的所有字体元素.但就是这样.
  2. 预览和仅打印嵌入.
    文档嵌入了字体,文档可以用原始字体查看(甚至在文档接收系统上).但你不能用它做很多事情(例如没有文档编辑).它使整个文档只读+仅打印.可以将内容复制并粘贴到另一个文档中,但不会使用(甚至传输)受限制的字体.
  3. 可编辑嵌入.
    可以编辑文档(在接收系统上).但是,此操作的确切成功取决于是嵌入了完整字体还是子集.如果您的子集意外不包含'i',则无法添加评论'idiots!' 在文档中,您可能需要将自己限制为"傻瓜!"....
  4. 可安装嵌入.
    这里没有限制.甚至可以在接收系统上提取和安装嵌入字体.(曾经有一段时间,微软会自动从收件人机器上的Word文档安装任何文档嵌入字体,如果它还没有.)同时,这个选项没有实际意义:没有 '通常'的应用程序提供了提取的方法或安装嵌入式文档字体.

字体的"嵌入"标志可能指示另外两个(不太重要)限制:

  • 不允许子集(上面列出的其他限制可以独立应用.)
  • 仅位图嵌入(可以嵌入无轮廓数据.)

在许多情况下,当软件本身中没有包含fsType标志时,Adobe软件会将此字体视为允许仅打印+仅预览嵌入的字体.

有关此主题的详细信息可以从Adobe白皮书中了解"第三方开发人员的字体嵌入指南".