You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iText 7 HtmlConverter无法折行无空格长串问题求助

解决iText 7 html2PDF 2.0.0中表格内无空格长文本折行问题

我来帮你搞定这个问题——之前在iText 5里好用的长文本折行设置,到iText 7的html2PDF确实需要调整几个关键细节,试试下面的方案:

1. 修正CSS样式的应用方式

你之前尝试的table-layout: fixed;word-break: break-all;方向是对的,但可能没把样式传递到表格内部的元素上。要确保表格、单元格(td)、内部的p标签都配置了对应的折行规则,避免样式被层级覆盖:

修改后的HTML片段示例:

<table width="70%" style="table-layout: fixed;"> 
  <tbody> 
    <tr> 
      <td width="50%" style="word-break: break-all;">
        <p style="width: 80%; background-color: fuchsia; word-break: break-all;">3aaaa22aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaa1</p>
      </td> 
      <td width="50%" style="word-break: break-all;">
        <p style="width: 80%; background-color: cyan; word-break: break-all;">4aaaaaa33aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbaaaaaaaaaaaaaaaaa2</p>
      </td> 
    </tr>
    <!-- 其他空行保持不变 -->
  </tbody> 
</table>

2. 配置ConverterProperties加载合适字体

iText 7的html2PDF对字体的依赖比iText 5更强,如果默认字体不支持无空格文本的断字规则,即使CSS写对了也没用。你需要在Java代码中添加字体提供者,确保加载支持断字的字体:

修改后的createPdf方法:

public void createPdf(String src, String dest, String resources) throws IOException {
    try {
        FileOutputStream outputStream = new FileOutputStream(dest);
        WriterProperties writerProperties = new WriterProperties();
        writerProperties.addXmpMetadata();
        PdfWriter pdfWriter = new PdfWriter(outputStream, writerProperties);
        PdfDocument pdfDoc = new PdfDocument(pdfWriter);
        ConverterProperties props = new ConverterProperties();

        // 加载系统字体+标准字体,确保有支持断字的字体可用
        FontProvider fontProvider = new DefaultFontProvider(true, true, true);
        // 如果有自定义字体,也可以添加进来:
        // fontProvider.addFont(resources + "your-custom-font.ttf");
        props.setFontProvider(fontProvider);

        HtmlConverter.convertToPdf(new FileInputStream(src), pdfDoc, props);
        pdfDoc.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

3. 尝试备选CSS属性

如果word-break: break-all;还是没效果,可以试试overflow-wrap: break-word;,这个属性在iText 7的html2PDF中同样支持,有时候对超长无空格文本的适配效果更好,直接替换p标签或td标签里的样式即可。

为什么之前的尝试失效?

iText 7的HTML转换引擎和iText 5完全重构了,样式的优先级和字体处理逻辑都不一样:

  • 之前可能只给表格加了table-layout: fixed;,但内部的p标签没有继承到折行规则;
  • 默认字体可能不包含断字字典,导致无法识别无空格文本的折行点。

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

火山引擎 最新活动