我们的客户在html中有一个模板,他希望用数据填充并转换为PDF。一切正常,问题只有模板,它有两列。该模板被解释为带有两个单元格的html <table>
,每个单元格包含大量文本(大约2页,它是双语合同,一列是捷克语,另一列是英语)。我无法阻止客户以这种非常愚蠢的方式创建模板。
<table>
<tbody>
<tr>
<td style="vertical-align: top;">
long long text inside one <div></div> tag
</td>
<td style="vertical-align: top;">
long long text inside one <div></div> tag
</td>
</tr>
</tbody>
</table>
some other div
当此模板转换为PDF时,句子中间的列中会有大的空格,即使内容可以放在一页中。
Html内容很好,问题会出现在渲染的某个地方。 我们使用带有html内容的String
String content = html content;
byte[] bytes = content.getBytes("UTF-8);
InputStream htmlIs = new ByteArrayInputStream(bytes);
Tidy tidy = new Tidy();
tidy.setInputEncoding("UTF-8");
tidy.setOutputEncoding("UTF-8");
tidy.setXHTML(true);
Document xhtmlDoc = tidy.parseDOM(htmlIs, null);
// to pdf
ITextRenderer renderer = new ITextRenderer();
... get fonts
renderer.setDocument(xhtmlDoc, null);
try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
renderer.layout();
renderer.createPDF(baos);
return baos;
}