【问题标题】:cfdocument PDF showing empty for Hindi language stringcfdocument PDF 显示印地语字符串为空
【发布时间】:2019-11-18 13:42:05
【问题描述】:

在这里,根据我的业务逻辑,我应该支持所有语言。因此,我根据国家/地区选择显示了一个字符串。在我这边一切正常。但是cfdocument 有问题。在这里,我提出了我的示例/演示代码。

注意:我已经看过CFDocument PDF not showing Japanese data,但在印地语中没有更多帮助。

<cfoutput>
    <table border='1px;'>
        <tr>
            <td>Name</td>
            <td>Age</td>
            <td>अनुरोध आईडी</td>
        </tr>
        <tr>
            <td>Kannan</td>
            <td>29</td>
            <td>108</td>
        </tr>
    </table>
</cfoutput>

如下图所示正确显示。

但是当我在不支持的 cfdocument 中使用该印地语字符串时。就像我下图一样。

<cfoutput>
    <cfdocument format="PDF" overwrite="Yes">
        <table border='1px;'>
            <tr>
                <td>Name</td>
                <td>Age</td>
                <td>अनुरोध आईडी</td>
            </tr>
            <tr>
                <td>Kannan</td>
                <td>29</td>
                <td>108</td>
            </tr>
        </table>
    </cfdocument>
</cfoutput>

注意:我试过以下所有类型但没有运气,我试过cfprocessingdirectivecfsettingSetLocale()meta tagscfsavecontents

如果有任何建议,请告诉我。提前致谢 !

【问题讨论】:

  • 您是否尝试将字体添加到服务器?
  • 我的语言选择是动态的。那么,这是在服务器端添加字体的正确解决方案吗?因为,我几乎支持 20 多种语言。
  • @Kannan.P 也许 Ben Nadel 的这篇文章可能会有所帮助。 bennadel.com/blog/…

标签: coldfusion internationalization cfml lucee cfdocument


【解决方案1】:

在从 CF10 + Windows 服务器(我们需要的所有语言都有开箱即用的工作字体)迁移到 Linux + Docker 上的 CF2016(中文、日文、韩文和其他语言)后,我花了很多时间来解决这个问题 - 我不记得我们是否测试过印地语 - 都坏了。

很遗憾,您的问题没有简单的“正确”答案,因为这取决于正确处理两个关键问题,并且该方法会根据您的服务器操作系统、Java 版本和 CF 版本而略有不同。但由于这对于评论来说太长了,我会冒着发布作为答案的风险。两个关键点是:

  1. 确保合适的字体在 CF 可以访问并期望找到它们的路径中可用 - 使用 CF Admin -> Fonts 确认这一点
  2. 确保为您需要支持的每种语言配置了 JVM 字体配置。

(1) 是简单的部分,并且在其他地方都有很好的记录,包括之前评论中提到的 Ben Nadel 链接 - https://www.bennadel.com/blog/2987-testing-foreign-and-unicode-character-rendering-with-the-cfdocument-tag-in-coldfusion.htm 这样做并重新启动 CF 服务将使您达到一个点,如果您在 CSS 中明确声明,cfdocument 将能够呈现每种字体。但是,当您需要支持多种语言并且事先不知道哪种语言适用于特定元素,和/或在一个元素中混合使用多种语言时,这并不理想。

这就是 (2) 的用武之地,您应该能够在 CSS 中指定一种字体 - 例如 Arial / Helvetica / sans-serif - 用于包含多种语言(例如英语和印地语)的元素以及同一段;然后 Java 检测到当前字体之外的字符序列,并使用 JVM 字体配置以合适的字体替换这些字符,而无需在 html/css 中声明它。对于印地语,我相信这通常是 Windows 上的梵文或 Kruti。

不幸的是,由于 Java 版本和平台而异,而且似乎没有很好的文档记录,因此很难做到这一点。在过去的日子里,Sun 和操作系统供应商非常擅长为我们维护一个体面的基本配置。这些天来,它似乎是事后才想到的,尤其是在许多 Linux 版本上。

此链接提供了字体配置在某些环境中如何工作的示例:https://docs.oracle.com/javase/8/docs/technotes/guides/intl/fontconfig.html 不过,您可能会使用不同的方法。如果您搜索java [your java platform version] font properties config [your OS],那么您应该会走上正确的道路。

【讨论】:

    【解决方案2】:

    经过长时间的分析,我提出了解决方案。也就是说,我们可以下载字体ttf 文件(根据您需要的语言)。我需要印地语,所以我从这里下载了它 https://fonts.webtoolhub.com/font-n17979-kruti-dev-010.aspx?lic=1 。并执行以下步骤。

    第 1 步: Coldfusion admin - &gt; setting - &gt; font Management
    第 2 步: 添加新的字体管理。 (在这里您可以下载所需语言的 ttf 文件,然后将其粘贴到本地。并在浏览器目录选项中提及您的本地路径)。 FYR:请看我下面的屏幕。

    Step3: 然后我们就可以在 HTML 的 style 属性中使用我们需要的字体了。 style="font-family:Kruti Dev 010;"

    示例代码:

    <cfoutput>
        <div>
            <cfdocument format="PDF" overwrite="Yes" fontembed="true">
                <table border='1px;' style="font-family:Kruti Dev 010;">
                    <tr>
                        <td>Name</td>
                        <td>Age</td>
                        <td id='test'>  Request ID  </td>
                    </tr>
                    <tr>
                        <td id='testVal'>Kannan</td>
                        <td>29</td>
                        <td>108</td>
                    </tr>
                </table>
                <p style="font-family:verdana;">This is a heading</p>
                <p style="font-family:courier;">This is a paragraph.</p>
    
                 <p style="font-family:Kruti Dev 010;">This is a paragraph.</p>
            </cfdocument>
        </div>
    </cfoutput>
    

    使用 cfdocument 以 PDF 格式输出示例:

    我希望这会对某些人有所帮助。谢谢 !

    【讨论】:

    • 您好,以上详细说明了我回答的第(1)点。它需要在 html/css 中为给定语言指定适当的字体。如果这足以满足您的要求,那就太好了。但是为了将来可能会遇到这个问题的其他人的利益,如果(1)还不够,例如,如果您需要混合语言或模板中的标记提前不知道该语言,那么它是我的答案的第 (2) 点,需要在服务器配置上解决,以便让 Java 在运行时为您正确检测和切换字体。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    相关资源
    最近更新 更多