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

时间:2012-07-06 14:39:52

标签: ios pdf pdf-generation embedded-fonts

概述

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

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

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

我的问题

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

提前致谢!

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

IOS embed font in PDF

iOS Quartz embed font in 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字体之一来模拟丢失的字体。这样,文档将不会像设计者想要的那样完全表示,但至少文本不会重排。用于此的多主字体是: Adob​​e Serif MM Adob​​e Sans MM

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

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

该应用似乎正在尝试嵌入字体,但它们未正确嵌入。以下是File - >下嵌入字体的屏幕截图。文件属性:

enter image description here

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

更新4:在另一个PDF(使用Adobe而非iPad应用程序生成)中,所需的字体嵌入为子集。我不确定,但这让我相信它应该可以以编程方式执行相同的操作。

enter image description here

2 个答案:

答案 0 :(得分:8)

您正在使用的字体以及“看起来很棒”的字体 TradeGothic ,根据其许可证,不允许嵌入到PDF(或其他)文档中。

(为什么字体设计师想要做到这一点超出了我的小脑袋。毕竟他们出售了许可证将其用于文件,不是吗? - 为什么[因为我已经经历过 - 最近一家大公司会围绕一种这样的字体设计他们的企业形象,但随后又太便宜而只购买不允许嵌入的字体许可证,因此迫使他们的员工发出蹩脚的字体给他们的客户提供的PDF只会让这个故事更加疯狂......)

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

您似乎误解的是文档属性'截图:

  1. OpenType字体有不同的风格。一些使用(内部)TrueType整形技术,一些使用Type1 / PostScript方法。这就解释了为什么您将其视为Type1。
  2. 不,该应用 NOT '尝试嵌入字体(但这样做不正确)' 。它似乎 HONOR 不会在字体文件中嵌入' -flag限制。
  3. 那些提供"无法找到或创建字体' RVYPRT + TradeGothicLTStd-Light'的PDF接收系统。某些字符可能无法正确显示或打印" 没有错误。他们只是......

    • ...不要在本地安装该字体,或
    • ...没有Adobe Multiple Master字体技术,或
    • ...不要使用Adobe Reader或Acrobat( 包含MM内容)。
  4. 我的简单建议,多年来在我的客户面前重复了数百次:

    1. 始终在PDF中嵌入所有字体。(除非您有充分的理由不知道后果。)
    2. 永远不要购买(或使用)不允许嵌入的字体。(如果您不知道如何检查当前字体,请自己尝试一下关于这个问题的专业建议。)

    3. <强>更新

      基本上,&#34;嵌入标志&#34;可以表达四种(重要的)不同级别的限制。 (实际上,此标志仅适用于TrueType和OpenTypes,而不适用于较老式的PostScript Type1字体。从技术上讲:此标志的名称是 fsType ,它是位掩码,它包含在TrueType和OpenType字体的 OS / 2 表中。)

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

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

        • 不允许任何子集(上述其他限制可能会单独适用。)
        • 仅位图嵌入(可能无法嵌入大纲数据。)

        Adob​​e软件在很多情况下,当字体本身包含 fsType 标志时,会将此字体视为允许打印+仅预览嵌入

        可以从Adobe Whitepaper about 'Font Embedding Guidelines for Third-party Developers了解有关此主题的详细信息。

答案 1 :(得分:0)

是否可以将嵌入字体更改为允许嵌入的另一种字体?