XmlParserToPdf

package test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.tree.DefaultAttribute;
import test.CreateDocumentImpl;

/**
 *
 * Java递归遍历XML所有元素并做相应的处理
 * @author Wang Jin
 * @version 1.0, 2012-10-22
 * @see
 * @since
 */
public class XmlParserToPdf
{

    private CreateDocumentImpl pdfDocument;
    @SuppressWarnings("unchecked")
    public XmlParserToPdf(Element elm)
    {
        pdfDocument = new CreateDocumentImpl();
        String fileSrc = "E:\\wangjin.pdf";
        Map attrlist = getNoteAttributes(elm);
        pdfDocument.initDocument(fileSrc, attrlist);
        pdfDocument.openPdf();
    }

    public static void main(String args[]) throws DocumentException
    {

        String path = "E:\\doc.xml";
        // 读取XML文件
        SAXReader reader = new SAXReader();
        Document doc = reader.read(path);
        // 获取XML根元素
        Element root = doc.getRootElement();
        XmlParserToPdf test = new XmlParserToPdf(root);
        test.getElementList(root);
        test.close();
    }

    /**
     * 获取节点所有属性值 <功能详细描述>
     * @param element
     * @return
     * @see [类、类#方法、类#成员]
     */
    @SuppressWarnings("unchecked")
    public Map getNoteAttributes(Element element)
    {

        DefaultAttribute e = null;
        List list = element.attributes();
        Map<String, String> attrmaps = new HashMap<String, String>();
        for (int i = 0; i < list.size(); i++)
        {
            e = (DefaultAttribute)list.get(i);
            attrmaps.put(e.getName(), e.getValue());
        }
        return attrmaps;
    }

    /**
     * 递归遍历所有元素节点 <功能详细描述>
     * @param element
     * @see [类、类#方法、类#成员]
     */
    public void getElementList(Element element)
    { // 适配器
        adpateXmlElement(element);
    }

    /**
     * 适配器xml
     */
    @SuppressWarnings("unchecked")
    public void adpateXmlElement(Element elm)
    {
        if ("table".equals(elm.getName()))
        {
            // 做表格处理
            handleTable(elm);
        }
        else if ("list".equals(elm.getName()))
        {
            // 做列表的处理
            handleList(elm);

        }
        else
        {
            List elements = elm.elements();
            if (elements.isEmpty())
            {

                if ("image".equals(elm.getParent().getName()))
                {
                    handleImage(elm);
                }
                else if ("second_title".equals(elm.getParent().getName()))
                {
                    handleSecondTitle(elm);
                }
                else if ("first_title".equals(elm.getParent().getName()))
                {
                    handleFirstTitle(elm);
                }
                else if ("caption".equals(elm.getName()))
                {
                    handleCaption(elm);
                }
                else
                {
                    handleOther(elm);
                }
            }
            else
            {
                // 有子元素
                Iterator it = elements.iterator();
                while (it.hasNext())
                {

                    Element elem = (Element)it.next();
                    getElementList(elem);
                }
            }
        }
    }

    public void close()
    {
        pdfDocument.closePdf();
    }

    /**
     * 处理表格标签
     */
    @SuppressWarnings("unchecked")
    public void handleTable(Element elm)
    {
        Map attrlist = getNoteAttributes(elm);
        List tableValues = new ArrayList();
        List trNodes = elm.elements();
        for (Iterator trNode = trNodes.iterator(); trNode.hasNext();)
        {
            Element trContent = (Element)trNode.next();
            List tdNodes = trContent.elements();
            for (Iterator tdNode = tdNodes.iterator(); tdNode.hasNext();)
            {
                Element tdContent = (Element)tdNode.next();
                String tdData = (String)tdContent.getData();
                tableValues.add(tdData);
            }
        }
        pdfDocument.addTable(tableValues, attrlist);
    }

    /**
     * 处理列表标签
     *
     */
    @SuppressWarnings("unchecked")
    public void handleList(Element elm)
    {
        // 做列表的处理
        Map attrlist = getNoteAttributes(elm);
        List itemNodes = elm.elements();
        List dataSource = new ArrayList();
        for (Iterator itemNode = itemNodes.iterator(); itemNode.hasNext();)
        {
            Element itemContent = (Element)itemNode.next();
            String itemData = (String)itemContent.getData();
            dataSource.add(itemData);
        }
        pdfDocument.addItem(dataSource, attrlist);
    }

    /**
     * 处理一级标题
     *
     */
    @SuppressWarnings("unchecked")
    public void handleFirstTitle(Element elm)
    {
        Map attrlist = getNoteAttributes(elm);
        String dataSource;

        //System.out.println("wangjin:" + elm.getParent().attribute("id"));
        if(elm.getParent().attribute("id") == null)
        {
            dataSource = "·"+elm.getText();
        }
        else if (elm.getParent().getParent().attribute("id") == null)
        {
            dataSource = "·"+ elm.getParent().attributeValue("id") + "、"
                    + elm.getText();
        }
        else
        {
            dataSource =  "·"+elm.getParent().getParent().attributeValue("id") + "."
                    + elm.getParent().attributeValue("id") + "、"
                    + elm.getText();
        }
        pdfDocument.addText(dataSource, attrlist);
    }

    /**
     * 处理列二级标题
     *
     */
    @SuppressWarnings("unchecked")
    public void handleSecondTitle(Element elm)
    {
        Map attrlist = getNoteAttributes(elm);
        String dataSource;
        if(elm.getParent().attribute("id") == null)
        {
            dataSource =elm.getText();
        }
        else if (elm.getParent().getParent().attribute("id") == null)
        {
            dataSource ="  ▫"+ elm.getParent().attributeValue("id") + "、"
                    + elm.getText();
        }
        else if (elm.getParent().getParent().getParent().attribute("id") == null)
        {
            dataSource = "  ▫"+elm.getParent().getParent().attributeValue("id") + "."
                    + elm.getParent().attributeValue("id") + "、"
                    + elm.getText();
        }
        else
        {
            dataSource = "  ▫"+elm.getParent().getParent().getParent()
                .attributeValue("id")
                    + "."
                    + elm.getParent().getParent().attributeValue("id")
                    + "."
                    + elm.getParent().attributeValue("id")
                    + "、"
                    + elm.getText();
        }

        pdfDocument.addText(dataSource, attrlist);
    }

    /**
     * 处理图片
     */
    @SuppressWarnings("unchecked")
    public void handleImage(Element elm)
    {
        Map attrlist = getNoteAttributes(elm);
        String dataSource = elm.getText();
        pdfDocument.addImage(dataSource, attrlist);
    }

    /**
     *处理章节标题
     *
     */
    @SuppressWarnings("unchecked")
    public void handleCaption(Element elm)
    {
        Map attrlist = getNoteAttributes(elm);
        String dataSource = elm.getText();
        pdfDocument.addText(dataSource, attrlist);
    }

    /**
     * 处理其他的标题
     */
    @SuppressWarnings("unchecked")
    public void handleOther(Element elm)
    {
        Map attrlist = getNoteAttributes(elm);
        String dataSource = elm.getText();
        if (elm.getParent().attribute("id") == null)
        {
            dataSource = elm.getText();
        }
        else
        {
            dataSource = elm.getParent().attributeValue("id") + "、"
                    + elm.getText();
        }
        pdfDocument.startNewPage();
        pdfDocument.addText(dataSource, attrlist);
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值