Itext 7 HtmlConverter无法包装不包含空格字符的单词

时间:2018-01-30 13:32:14

标签: itext7

我正在使用iText html2PDF版本2.0.0将HTML转换为PDF。

在我的HTML文件中,有太多单词无法包含在表格列中。

可以在iText 5个库中完成。 这是我的HTML和java文件。



<html>
<head>
<title>TM_Report</title>

<style type="text/css">
.div-half-width {
	display: inline;
	width: 50%;
	color: red;
}
</style>
</head>
<body>
	<table width="70%" style="">
		<tbody>
			<tr>
				<td width="50%"><p style="width: 80%; background-color: fuchsia;">3aaaa22aaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaaaaaaaaaaaaaaa1</p></td>
				<td width="50%"><p style="width: 80%; background-color: cyan;">4aaaaaa33aaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbaaaaaaaaaaaaaaaaa2</p></td>
			</tr>
			<tr>
				<td>&nbsp;</td>
				<td>&nbsp;</td>
			</tr>
			<tr>
				<td>&nbsp;</td>
				<td>&nbsp;</td>
			</tr>
			<tr>
				<td>&nbsp;</td>
				<td>&nbsp;</td>
			</tr>
		</tbody>
	</table>
	
	<p style="word-break: break-all; width: 80%; background-color: fuchsia;">aaaa22aaaaaa-aaaaaaaaaabb-bbbbbbbbbbbbb-bbbbbbbbaaaa-aaaaaaaaaaaaa-aaaaa1aaaa22-aaaaaaaaaaaa-aaaabbbbbbbb-bbbbbbbb_bbbbbbbaa_aaaaaaaaaaa_aaaaaaaaa1aaaa22_aaaaaaaaaaa_aaaaabbbbbbbbbbbbbbbbbbbbbbbaaaaaaaaa_aaaaaaaaaaaaa1</p>
</body>
</html>
&#13;
&#13;
&#13;

CreateAccessiblePDF.java

public class Test {

public static final String sourceFolder = "res/pdfHTML/AccessiblePDF/";
public static final String destinationFolder = "target/output/pdfHTML/AccessiblePDF/";
public static final String[] files = { "Accessibility" };

public static void main(String[] args) throws IOException, InterruptedException {
    for (String name : files) {
        String htmlSource = sourceFolder + name + ".html";
        String resourceFolder = sourceFolder;
        String pdfDest = destinationFolder + name + ".pdf";
        File file = new File(pdfDest);
        file.getParentFile().mkdirs();
        new CreateAccessiblePDF().createPdf(htmlSource, pdfDest, resourceFolder);
    }
}

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();
        HtmlConverter.convertToPdf(new FileInputStream(src), pdfDoc, props);
        pdfDoc.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

我甚至尝试过样式表&#34; table-layout:fixed;&#34;在表格和&#34;分词:打破所有;&#34;在列中,但虽然它不适用于Itext 7&#34; html2pdf.HtmlConverter&#34;类。

有没有办法包装不包含空格的单词(只有字符)?

1 个答案:

答案 0 :(得分:2)

有。

您需要查看界面

public interface ISplitCharacters {

/**
 * Returns <CODE>true</CODE> if the character can split a line. The splitting implementation
 * is free to look ahead or look behind characters to make a decision.
 * @param glyphPos the position of {@link Glyph} in the {@link GlyphLine}
 * @param text an array of unicode char codes which represent current text
 */
boolean isSplitCharacter(GlyphLine text, int glyphPos);

}

默认实现(由Document使用)是DefaultSplitCharacters,它被设置为在各种空格变体中分割。

最好的解决方案是编写一个继承自DefaultSplitCharacters的类,并添加自己的额外拆分字符(如字母数字字符)。

为了设置它,您可以在RootElement上使用setProperty({1}}从中继承)。属性名称为Document

由于您从未在原始代码中创建布局Property.SPLIT_CHARACTERS,因此需要进行一些修改。

您可以使用以下代码呈现给Document

List<IElement>

然后,您可以将元素添加到List<IElement> elements = HtmlConverter.convertToElements(stream, converterProperties); ,这是预设的Document

的正确实现