1

我有一个自定义 Gotham 字体,需要嵌入到 PDF 文档中。我已经用谷歌搜索并尝试了几种方法来做到这一点,但它不起作用。我试图让它在本地主机上与 CF11 和 Apache 2.2 服务器一起工作。

这是我拥有的代码

<!--- The HTML Page code --->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Test</title>
    <meta http-equiv=Content-Type content="text/html; charset=windows-1252" />
    <meta name=Generator content="Microsoft Word 12 (filtered)" />
    <style type="text/css">
        @font-face
        {
            font-family: 'gothamthin';
            src: url('../fonts/Gotham-Thin.otf');    
        }
    </style>
</head>
<body>
    <span style="font-size:22pt;font-family:'gothamthin'">13 First Street</span>
</body>
</html>

<!--- the PDF Generation Code --->
<cfdocument format="PDF" fontembed="yes" overwrite="true" filename="test.pdf">
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Test</title>
        <meta http-equiv=Content-Type content="text/html; charset=windows-1252" />
        <meta name=Generator content="Microsoft Word 12 (filtered)" />
        <style type="text/css">
            @font-face
            {
                font-family: "gothamthin";
                src: url('../fonts/Gotham-Thin.otf');    
            }
        </style>
    </head>
    <body>
        <span style='font-size:22pt;font-family:"gothamthin"'>13 First Street</span>
        <br/><br/>
        <span>
            <font face="gothamthin" size="22">
                13 First Street with font tag
            </font>
        </span>
    </body>
    </html>
</cfdocument>

HTML 页面版本使用所需字体生成正确的输出。请看下面的截图:

在此处输入图像描述

然而,PDF 版本不使用自定义字体。

在此处输入图像描述

我在 Adob​​e Reader 中打开了 PDF 并检查了 Properties->Fonts 面板,它没有列出自定义字体。请看下面的截图:

在此处输入图像描述

我检查了 CF Admin 字体管理部分,它显示字体已正确安装,但与我在代码中提到的 1 位置不同。我在代码中提到的是<app-root>/fonts/*.otf. 请看下面的截图: 在此处输入图像描述

另外,在上面的代码中,我使用了字体家族名称gothamthin。如果我用gotham-thin替换它(中间有一个连字符,与 CF Admin 中的字体名称相同),那么我会收到以下错误。我不确定这是否与任何事情有关,但这只是我认为我会分享的一个观察结果。

详细信息:此异常的原因是:coldfusion.document.spi.DocumentExportException:java.lang.NullPointerException。消息:执行文档处理时发生异常。

4

1 回答 1

0

我用相同的字体遇到了完全相同的问题。获取“NullPointerException”消息。最后通过使用 FontForge 将每个 OTF 字体转换为 TTF 来修复。发现一些帖子说它不适用于 OTF 字体,即使它在 CF 管理中正确显示。我更改了 TTF 字体的安全权限以匹配字体目录中的其他字体,但我不确定是否需要这样做——我添加了一个名为“ALL APPLICATION PACKAGES”的用户。我将 TTF 字体放在 Windows 字体目录中,然后能够在 CFDOCUMENT PDF 中使用它们。我不得不在 CF 管理员中使用“Font Face”列的名称——屏幕截图中的第二列。所以,我能够在 CFDOCUMENT HTML 区域中使用类似的东西

<div style="font-family: gotham black;">Quick brown fox</div>
<div style="font-family: gotham medium;">Quick brown fox</div>
<div style="font-family: gotham light;">Quick brown fox</div>

我没有做太多的工作,但您可能还想尝试 CFHTMLtoPDF,我相信它在 WKHTMLTOPDF 引擎上运行。这个标签是在 CF11 中引入的

于 2018-10-06T18:44:10.803 回答