当前位置: 首页 > article >正文

xml导出pdf简单实现

1. 引入依赖

<dependency>
   <groupId>com.itextpdf</groupId>
   <artifactId>itext7-core</artifactId>
   <version>8.0.1</version>
</dependency>

2. 代码实现

import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.property.TextAlignment;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class XmlToPdf {

    public static void main(String[] args) throws Exception {
        // 读取XML文件
        File xmlFile = new File("example.xml");
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(xmlFile);
        doc.getDocumentElement().normalize();

        // 创建PDF文档
        PdfWriter writer = new PdfWriter("output.pdf");
        PdfDocument pdf = new PdfDocument(writer);
        Document pdfDoc = new Document(pdf, PageSize.A4);

        // 遍历XML元素并将其添加到PDF文档中
        processNode(pdfDoc, doc.getDocumentElement());

        // 关闭文档
        pdfDoc.close();
    }

    private static void processNode(Document pdfDoc, Node node) {
        if (node.getNodeType() == Node.ELEMENT_NODE) {
            Element element = (Element) node;
            Paragraph paragraph = new Paragraph(element.getTextContent())
                    .setTextAlignment(TextAlignment.CENTER);
            pdfDoc.add(paragraph);
        }

        NodeList children = node.getChildNodes();
        for (int i = 0; i < children.getLength(); i++) {
            processNode(pdfDoc, children.item(i));
        }
    }
}


http://www.kler.cn/a/106260.html

相关文章:

  • shell脚本配置nginx
  • 基础IO2
  • 关于强化学习的一份介绍
  • 酒店行业数据仓库
  • 8.C++面向对象5(实现一个较为完善的日期类)
  • 类和对象——拷贝构造函数,赋值运算符重载(C++)
  • 软考高级系统架构师冲关预测
  • 【牛牛送书 | 第二期】《ChatGPT 驱动软件开发:AI 在软件研发全流程中的革新与实践》
  • 易基因: Nature Biotech:番茄细菌性青枯病的噬菌体联合治疗|国人佳作
  • 【Matlab2016】Matlab中文版的下载、安装、激活(不建议安装过高版本!!)
  • 特殊类设计[下] --- 单例模式
  • Spring Boot整合OAuth2实现GitHub第三方登录
  • java开发中,如何在springboot下使用单例模式
  • C语言 sizeof 函数内部进行计算
  • 计算机网络【CN】子网划分与子网掩码
  • 构建客户门户的痛点及低代码工具解决方案
  • c++编译使用log4cplus
  • 系列十四、Spring如何处理线程安全问题
  • 基于STC系列单片机实现定时器扫描数码管显示定时器/计数器产生频率的功能
  • 2023年第四届MathorCup大数据挑战赛(B题)|电商零售商家需求预测及库存优化问题|数学建模完整代码+建模过程全解全析
  • 【Linux】进程优先级|进程并发概念|在vim中批量化注释
  • ————python网络并发测试题————
  • 使用hibernate,报出ORA-00933_ SQL 命令未正确结束
  • 小程序如何设置自取规则
  • 容联七陌百度营销通BCP解决方案,让营销更精准
  • Git撤销已经push到远程分支的commit