我需要创建包含HTML的iText Element(s)(或Chunk(s))。 HTML文档的一部分,使用XMLWorker解析为PDF。我已经尝试使用扩展AbstractTagProcessor的类,但我在最终的PDF文档中没有得到任何回报。不确定这是否可行。这是我正在使用的代码:
class Narrative extends AbstractTagProcessor implements TagProcessor {
@Override
public List<com.itextpdf.text.Element> end(WorkerContext ctx, Tag tag, List<com.itextpdf.text.Element> currentContent) {
List<com.itextpdf.text.Element> l = new ArrayList<com.itextpdf.text.Element>();
for (com.itextpdf.text.Element element : currentContent) {
try {
ElementList parsed = XMLWorkerHelper.parseToElementList(element.getChunks().get(0).getContent(), readCSS());
for(com.itextpdf.text.Element elem : parsed) {
l.add(elem);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return l;
}
更新 我想我找到了解决方案。我正在发布它,所以其他人可能不需要经历我想要找到的解决方案。欢迎反馈。
class Narrative extends Div implements TagProcessor {
private PdfPTable table = new PdfPTable(1);
public Narrative() {
table.setTotalWidth(650f);
table.setWidthPercentage(100f);
table.setKeepTogether(true);
table.getDefaultCell().setBorder(0);
}
@Override
public List<com.itextpdf.text.Element> end(WorkerContext ctx, Tag tag, List<com.itextpdf.text.Element> currentContent) {
List<com.itextpdf.text.Element> content = new ArrayList<Element>();
try {
content = HTMLWorker.parseToList(new StringReader(currentContent.get(0).getChunks().get(0).getContent()), null);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(com.itextpdf.text.Element c : content) {
PdfPCell cell = new PdfPCell();
cell.setBorder(0);
cell.addElement(c);
table.addCell(cell);
}
List<com.itextpdf.text.Element> l = new ArrayList<Element>();
l.add(table);
return l;
}