使用XMLWorker将HTML解析为iText元素

时间:2015-06-09 16:28:20

标签: java itext

我需要创建包含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;
}

0 个答案:

没有答案