Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在iPad应用程序生成的PDF中嵌入自定义字体_Ios_Pdf_Pdf Generation_Embedded Fonts - Fatal编程技术网

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

Ios 在iPad应用程序生成的PDF中嵌入自定义字体,ios,pdf,pdf-generation,embedded-fonts,Ios,Pdf,Pdf Generation,Embedded Fonts,概述 我正在一个iPad应用程序中生成一个四页的PDF文档,该应用程序使用自定义字体Trade Gothic。它正确地嵌入到应用程序中,看起来很棒 然而,该应用程序的一部分是将PDF作为遗留文件发送电子邮件。此发送的文件将所有字体显示为默认的SAN类型,在一些系统上,我收到了无法找到或创建字体“RVYPRT+TradeGothicLTStd Light”的错误。某些字符可能无法正确显示或打印 我正在使用UIKit框架生成PDF。以下是使用相同过程的教程: 我的问题 如何将字体嵌入PDF输出,以便

概述

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

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

我正在使用UIKit框架生成PDF。以下是使用相同过程的教程:

我的问题

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

提前谢谢

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

更新2:有关字体的详细信息

字体,是一种OpenType字体,允许许可证嵌入

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

如果PDF文件中缺少某些字体,Adobe Acrobat和Adobe Reader将自动尝试使用这些程序内置的多个主字体之一模拟缺少的字体。这样,文档将不会完全按照设计者的要求来表示,但至少文本不会回流。用于此操作的多个主字体是:Adobe Serif MMAdobe Sans MM

资料来源:

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

应用程序似乎正在尝试嵌入字体,但未正确嵌入字体。以下是“文件->文档属性”下嵌入字体的屏幕截图:

我看到的第一个问题是字体被列为Type 1,而实际上它是OpenType字体。正如所料,“实际字体”是Sans-MM(未找到嵌入字体时使用的字体)

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


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

(字体设计师为什么要这么做超出了我的小脑筋。毕竟他们出售了用于文档的许可证,不是吗?——以及为什么(正如我最近亲身经历的那样)一家大公司会围绕一种这样的字体设计自己的企业标识,但由于“太便宜”并且只购买不允许嵌入的字体许可证,因此迫使员工向客户发送蹩脚的PDF,这只会让这个故事更加疯狂……)

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

您似乎误解了“文档属性”屏幕截图:

  • OpenType字体有不同的风格。有些使用(内部)TrueType成形技术,有些使用Type1/PostScript方法。这就解释了为什么它被声明为Type1
  • 否,应用程序不会尝试嵌入字体(但未正确嵌入)。它似乎尊重字体文件中的“不嵌入”标志,该标志设置了这一限制
  • 那些发出警告“无法找到或创建字体‘RVYPRT+TradeGothicLTStd Light’。某些字符可能无法正确显示或打印”的PDF接收系统没有故障。他们只是

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

  • 始终在PDF中嵌入所有字体。(除非您有很好的理由不这样做,并且知道后果。)
  • 切勿购买(或使用)不允许嵌入的字体。(如果您不知道如何检查当前字体,请就此问题向自己寻求专业建议。)

  • 更新:

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

    这些级别指定type foundry允许在文档中嵌入字体的位置、时间和用途(不仅是PDF,还包括Word、OpenOffice或任何其他文档类型:

  • 不允许嵌入。
    你可以在安装了字体的系统上创建一个电子文档,你可以编辑它,你可以查看它。啊,你也可以打印它:Adobe PostScript打印机驱动程序将在PostScript文件中包含打印所需的所有字体元素。但仅此而已
  • 仅预览和打印嵌入。
    文档中嵌入了字体,可以使用原始字体查看文档(即使在文档接收系统上也是如此)。但您不能用它做很多其他事情(例如,无文档编辑)。它使整个文档只读+仅打印。可以将内容复制和粘贴到另一个文档中,但不会使用(甚至不会传输)限制字体
  • 可编辑嵌入。
    可以(在接收系统上)编辑文档。但是,此操作的确切成功与否取决于