我正在使用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> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </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;
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;类。
有没有办法包装不包含空格的单词(只有字符)?
答案 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