呈现自定义字段的值 HTML 而不是字面值

Render custom field's value as rendered HTML not literal value

我正在尝试获取 HTML 内容以在 NetSuite 的高级 PDF/HTML 模板中打印。有谁知道这是否可能?

在此示例中,custbody_print_content 是一个自定义字段。它的值为:

<h1>Tiger</h1>

模板源代码如下所示:

<?xml version="1.0"?><!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">

<pdf>
  <body>
    ${record.custbody_print_content}
  </body>
</pdf>

我得到这个输出:

<h1>Tiger</h1>

但我不想要文字 HTML。我想要解释的 HTML,像这样:

老虎



我尝试了一些评论中提到的内置插件,但我仍然没有得到我想要的。下图显示了模板和打印输出。 Zebra 示例具有所需的结果。


您可以使用内置的 no_esc。例如

 ${record.custbody_print_content?no_esc}

此外,我认为这不会有什么不同,但您的 xml 不寻常,因为它没有 head 元素

尝试去掉 DOCTYPE 和 <pdf> 元素之间多余的 space 并将其添加到 <body> 开始标记之前

<head>
    <link name="verdana" type="font" subtype="opentype" src="${nsfont.verdana}" src-bold="${nsfont.verdana_bold}" bytes="2"></link>
</head>

看起来 NetSuite 在保存时转义了 html。这意味着当您在表单的文本框中键入以下内容时:

<b>Marmot</b>

NetSuite "escapes" 它并像这样保存它:

&lt;b&gt;Marmot&lt;/b&gt;

所以在FreeMarker模板中,需要对其进行反转义。我找不到任何内置功能来执行此操作,但我可以使用 ?replace。我当前的解决方案如下所示:

<?xml version="1.0"?><!DOCTYPE pdf PUBLIC "-//big.faceless.org//report" "report-1.1.dtd">

<pdf>
    <body>
        ${record.custbody_print_content?replace('<br />', '')?replace('&lt;', "\l")?replace('&gt;', "\g")}
    </body>
</pdf>

如果有人知道更简单的方法,请告诉我。