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

概观

我在iPad应用程序中使用自定义字体Trade Gothic生成四页PDF文档。 它正确地embedded到应用程序中,并且看起来很棒。

但是,应用程序的一部分是通过电子邮件发送PDF作为一个假期。 这个发送的文件显示所有字体为默认的sanstypes,并在几个系统上,我收到错误无法find或创build字体'RVYPRT + TradeGothicLTStd-Light'。 某些字符可能无法正确显示或打印。

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

我的问题

如何将字体embedded到PDF输出中,以便在发送后将其正确地呈现为自定义字体而不是默认types。

提前致谢!

更新1:我find了类似的未解答的问题

IOS在PDF中embedded字体

iOS Quartz在pdf中embedded字体

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

字体http://store1.adobe.com/cfusion/store/html/index.cfm?store=OLS-US&event=displayFont&code=TRDQ10003000是OpenType字体,允许通过许可进行embedded。

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

如果PDF文件中缺less某些字体,则Adobe Acrobat和Adobe Reader将自动尝试使用这些程序中内置的多种主字体之一来模拟缺less的字体。 这样,文档就不会像devise师所期望的那样完全performance出来,但至less文本不会重排。 用于此的多主字体是: Adobe Serif MMAdobe Sans MM

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

更新3:在PDF中引用字体,但不embedded

看起来,该应用程序正试图embedded字体,但他们没有正确embedded。 这里是文件 – >文件属性下embedded字体的截图:

在这里输入图像说明

我看到的第一个问题是字体被列为types1,实际上是一个OpenType字体。 正如所料,“实际字体”是Sans MM(未findembedded字体时使用的字体)。

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

在这里输入图像说明

TradeGothic使用的字体和“看起来不错”的字体不允许embedded到PDF(或其他)文档中。

(为什么一个字体devise师想做的事情超出了我的小脑袋,毕竟他们出售了一个许可证来把它用于文档,不是吗?为什么(正如我最近亲身经历的那样)一家大公司会devise他们的公司身份围绕一个这样的字体,但是“太便宜”,只购买不允许embedded的字体许可证,从而迫使他们的员工向客户发送蹩脚的PDF文件,这只会使这个故事更疯狂……)

从你的第二次更新可以看出,你已经发现了这个事实。

你似乎误解的是“文档属性”屏幕截图:

  1. OpenType字体有不同的风格。 一些使用(内部)TrueType整形技术,一些使用Type1 / PostScript方法。 这解释了为什么你看到它声明为Type1。
  2. 不,该应用程序不会尝试embedded字体(但这样做不正确)“ 。 它似乎是在授予这个非常有限的字体文件中的“不embedded”标志。
  3. 那些给出“无法find或创build字体”RVYPRT + TradeGothicLTStd-Light“警告的PDF接收系统, 某些字符可能无法正确显示或打印”并不是错误的。 他们只是…

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

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

  1. 始终在您的PDF中embedded所有字体。 (除非你有一个很好的理由不知道,并知道后果。)
  2. 切勿购买(或使用)不允许embedded的字体。 (如果你不知道如何检查你当前的字体,请就这个问题给自己一些专业的build议。)

更新:

基本上,“embedded标志”可以expression为四个(重要的)不同的限制水平。 (实际上,这个标志只适用于TrueType和OpenTypes,而不适用于更老式的PostScript Type1字体。从技术上讲,这个标志的名称是fsType ,是一个位掩码 ,它包含在OS / 2中 TrueType和OpenType字体的表….)

这些级别指定何种types代工厂允许将字体embedded到文档中(不仅是PDF,还包括Word,OpenOffice或任何其他文档types:

  1. 不允许embedded。
    您可以在安装了字体的系统上创build电子文档,您可以对其进行编辑并查看。 啊,你也可以打印它:Adobe PostScript打印机驱动程序将包括在PostScript文件中打印所需的所有字体元素。 但就是这样。
  2. 预览和只打印embedded。
    文档具有embedded的字体,文档可以用原始字体(甚至在文档接收系统上)查看。 但是你不能做其他事情(比如没有文档编辑)。它使得整个文档只读+只打印。 将内容复制并粘贴到另一个文档是可能的,但是它不会使用(或者甚至传送)受限制的字体。
  3. 可编辑的embedded。
    该文件可以编辑(在接收系统上)。 但是,这个操作的确切成功取决于整个字体或子集是否被embedded。 如果您的子集意外不包含“我”,您不能添加评论“白痴! 到文件,你可能需要限制自己的愚蠢!
  4. 可安装的embedded。
    这里没有限制。 embedded的字体甚至可以提取并安装在接收系统上。 (曾经有一段时间,微软会自动从收件机器上的Word文档中安装任何文档embedded的字体,如果它还没有在那里的话。)同时,这个选项是没有意义的: 没有 “通常”的应用程序提供了提取或者安装embedded式文档字体。

字体的“embedded”标记可能指示另外两个(较不重要的)限制:

  • 不允许子集 (上面概述的其他限制可以独立应用)。
  • 仅限位图embedded (不可embedded轮廓数据)

Adobe软件在很多情况下,当字体本身没有包含任何fsType标志时,会将该字体视为允许“ 仅打印预览”embedded的字体。

有关此主题的详细信息可以从Adobe白皮书中了解到“第三方开发人员的字体embedded指南”

是不是可以将embedded字体更改为允许embedded的另一种字体?