XMLWorkerHelper 丢失的文本不在标签之间
XMLWorkerHelper loses text not between tags
我一直在使用 XMLWorkerHelper 将通过富文本编辑器在页面上输入的格式化文本添加到 PDF。我注意到有时并非所有文本都呈现在 PDF 中。显然 XMLWorkerHelper 不在 HTML 标签之间丢弃文本。
这是正确的行为吗?
我写了一个 JUnit 测试用例来说明问题:
public class XMLWorkerTest {
@Test
public void test() throws IOException, DocumentException {
Document document = new Document();
String fileName = "itext_test_" + System.currentTimeMillis() + ".pdf";
PdfWriter.getInstance(document, new FileOutputStream(fileName));
document.open();
Paragraph paragraph = new Paragraph();
String s1 = "not between tags<b>between tags</b>not between tags";
addHtml(paragraph, s1);
// NOT OK: 'not between tags' missing twice
paragraph.add(Chunk.NEWLINE);
String s2 ="<span>" + s1 + "</span>";
addHtml(paragraph, s2);
// OK
document.add(paragraph);
document.close();
}
private void addHtml(final Paragraph paragraph, String html) throws IOException {
XMLWorkerHelper.getInstance().parseXHtml(new ElementHandler() {
@Override
public void add(Writable writable) {
if (writable instanceof WritableElement) {
for (Element element : ((WritableElement) writable).elements()) {
paragraph.add(element);
}
}
}
}, new ByteArrayInputStream(html.getBytes()), Charset.defaultCharset());
}
}
我们使用的是 5.5.6 版本。
这是预期的行为。您的 html 应该有一个根标签,否则它就不是真正的 html。仅仅因为文本在浏览器中显示并不意味着格式正确。
我一直在使用 XMLWorkerHelper 将通过富文本编辑器在页面上输入的格式化文本添加到 PDF。我注意到有时并非所有文本都呈现在 PDF 中。显然 XMLWorkerHelper 不在 HTML 标签之间丢弃文本。 这是正确的行为吗?
我写了一个 JUnit 测试用例来说明问题:
public class XMLWorkerTest {
@Test
public void test() throws IOException, DocumentException {
Document document = new Document();
String fileName = "itext_test_" + System.currentTimeMillis() + ".pdf";
PdfWriter.getInstance(document, new FileOutputStream(fileName));
document.open();
Paragraph paragraph = new Paragraph();
String s1 = "not between tags<b>between tags</b>not between tags";
addHtml(paragraph, s1);
// NOT OK: 'not between tags' missing twice
paragraph.add(Chunk.NEWLINE);
String s2 ="<span>" + s1 + "</span>";
addHtml(paragraph, s2);
// OK
document.add(paragraph);
document.close();
}
private void addHtml(final Paragraph paragraph, String html) throws IOException {
XMLWorkerHelper.getInstance().parseXHtml(new ElementHandler() {
@Override
public void add(Writable writable) {
if (writable instanceof WritableElement) {
for (Element element : ((WritableElement) writable).elements()) {
paragraph.add(element);
}
}
}
}, new ByteArrayInputStream(html.getBytes()), Charset.defaultCharset());
}
}
我们使用的是 5.5.6 版本。
这是预期的行为。您的 html 应该有一个根标签,否则它就不是真正的 html。仅仅因为文本在浏览器中显示并不意味着格式正确。