You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Freemarker生成PDF时如何在列表项中插入制表符?

解决Freemarker生成PDF时列表项对齐的问题

嘿,我来帮你搞定这个Freemarker生成PDF时的对齐问题!你提到right_pad函数没起作用,大概率是因为非等宽字体在搞鬼——像Arial、宋体这类常用字体,每个字符的宽度不一样,哪怕你用right_pad补了一堆空格,PDF渲染出来视觉上还是没法对齐。下面给你几个靠谱的解决方案:

方案1:用等宽字体配合right_pad(简单直接)

如果坚持要用空格对齐,把文本切换成等宽字体(比如Courier New),这类字体里每个字符的宽度完全一致,right_pad补的空格就能精准对齐。另外你之前设置的125长度太夸张了,调整成合适的数值就行:

<#list data.house as house>
    <p style="font-family: 'Courier New', monospace; margin: 4px 0;">${"House name:"?right_pad(25)} ${house.name!}</p>
</#list>
<#list data.properties as properties>
    <p style="font-family: 'Courier New', monospace; margin: 4px 0;">${"Value:"?right_pad(25)} ${properties.value!} HUF</p>
    <p style="font-family: 'Courier New', monospace; margin: 4px 0;">${"Bank account number:"?right_pad(25)} ${properties.bankAccountNumber!}</p>
</#list>

方案2:用表格布局(最推荐,稳定可靠)

PDF里的表格是实现对齐最稳妥的方式,不管用什么字体,只要给列设置好宽度,标签和值就能完美对齐,还能让整体排版更规整:

<table style="width: 100%; border-collapse: collapse; margin: 8px 0;">
    <#list data.house as house>
        <tr>
            <td style="width: 35%; text-align: left; padding: 4px 8px;">House name:</td>
            <td style="width: 65%; text-align: left; padding: 4px 8px;">${house.name!}</td>
        </tr>
    </#list>
    <#list data.properties as properties>
        <tr>
            <td style="width: 35%; text-align: left; padding: 4px 8px;">Value:</td>
            <td style="width: 65%; text-align: left; padding: 4px 8px;">${properties.value!} HUF</td>
        </tr>
        <tr>
            <td style="width: 35%; text-align: left; padding: 4px 8px;">Bank account number:</td>
            <td style="width: 65%; text-align: left; padding: 4px 8px;">${properties.bankAccountNumber!}</td>
        </tr>
    </#list>
</table>

方案3:插入制表符\t(备选,需依赖渲染器支持)

你也可以直接在标签和值之间插入制表符\t,但要注意:不同的PDF生成工具(比如iText、Flying Saucer)对制表位的处理可能不同,对齐效果没那么稳定,所以只作为备选方案:

<#list data.house as house>
    <p style="margin: 4px 0;">${"House name:"}\t${house.name!}</p>
</#list>
<#list data.properties as properties>
    <p style="margin: 4px 0;">${"Value:"}\t${properties.value!} HUF</p>
    <p style="margin: 4px 0;">${"Bank account number:"}\t${properties.bankAccountNumber!}</p>
</#list>

个人最推荐用表格方案,不仅对齐稳定,后续维护样式也更方便~

内容的提问来源于stack exchange,提问作者Benke95

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 19:19:09