编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

x-easypdf 读取和创建PDF(itext 读取pdf)

wxchong 2024-07-21 07:12:28 开源技术 12 ℃ 0 评论

x-easypdf基于pdfbox二次封装,极大降低使用门槛,以组件化的形式进行pdf的构建

官网地址 :https://www.x-easypdf.cn/#/README

jar包引入,截止2022-08-09 最新版本为 v2.9.10

<dependency>
			<groupId>wiki.xsx</groupId>
			<artifactId>x-easypdf</artifactId>
			<version>2.9.10</version>
		</dependency>
import wiki.xsx.core.pdf.component.image.XEasyPdfImage;
import wiki.xsx.core.pdf.component.layout.XEasyPdfHorizontalLayout;
import wiki.xsx.core.pdf.component.line.XEasyPdfDottedSplitLine;
import wiki.xsx.core.pdf.component.table.XEasyPdfCell;
import wiki.xsx.core.pdf.component.table.XEasyPdfRow;
import wiki.xsx.core.pdf.component.table.XEasyPdfTable;
import wiki.xsx.core.pdf.component.text.XEasyPdfText;
import wiki.xsx.core.pdf.doc.*;
import wiki.xsx.core.pdf.footer.XEasyPdfFooter;
import wiki.xsx.core.pdf.handler.XEasyPdfHandler;
import wiki.xsx.core.pdf.header.XEasyPdfHeader;
import wiki.xsx.core.pdf.mark.XEasyPdfWatermark;
/***
     *  创建PDF
     * @param outPdfPath  输出路径
     * @param isReadOnly 是否只读
     * @param titleStr  头部标题
     * @param waterStr 水印
     * @param tabHead 表格标题
     * @param tables  表格内容
     * @throws Exception
     */
    public void createPdf2(String outPdfPath,boolean isReadOnly,String titleStr,String waterStr,String[] tabHead,List<HashMap<String,Object>> tables)throws Exception{
        // 构建文档
        XEasyPdfDocument document = XEasyPdfHandler.Document.build();
        if(isReadOnly) {
            // 获取文档权限
            XEasyPdfDocumentPermission permission = document.permission();
            // 设置为只读
            permission.setReadOnly();
            // 完成操作
            permission.finish();
        }
        XEasyPdfPage page = XEasyPdfHandler.Page.build();
        if(!StrUtil.isEmpty(waterStr)) {
            //水印
            XEasyPdfWatermark watermark = XEasyPdfHandler.Watermark.build(waterStr).setAlpha(0.1f).setFontSize(20);
            page.setWatermark(watermark);
        }
        //页眉页脚
        XEasyPdfHeader header=XEasyPdfHandler.Header.build();
        XEasyPdfImage image = XEasyPdfHandler.Image.build(new File("D:/3.png"),30,30).setMarginLeft(5);
        XEasyPdfText headTxt = XEasyPdfHandler.Text.build("江苏XXX有限公司").setVerticalStyle(XEasyPdfPositionStyle.CENTER);

        // 水平布局
        XEasyPdfHorizontalLayout layout = XEasyPdfHandler.Layout.Horizontal.build().addLayoutComponent(
                XEasyPdfHandler.Layout.Component.build(100, 35).setComponent(image)
                ,XEasyPdfHandler.Layout.Component.build(200, 35).setComponent(headTxt)
        );
        header.addComponent(layout);

        //页脚
        XEasyPdfFooter footer = XEasyPdfHandler.Footer.build(XEasyPdfHandler.Text.build("第1页/共1页")).setMarginLeft(200);
        page.setHeader(header);
        page.setFooter(footer);

        XEasyPdfDottedSplitLine line = XEasyPdfHandler.SplitLine.DottedLine.build();
        line.setLineWidth(1).setColor(Color.CYAN);
        page.addComponent(line);

        //添加标题
        XEasyPdfText title = XEasyPdfHandler.Text.build(titleStr);
        title.setFontSize(18);
        title.setHorizontalStyle(XEasyPdfPositionStyle.CENTER);
        title.setMarginTop(10);
        page.addComponent(title);
        if(null!=tabHead&& tabHead.length>0){
            //添加表格
            // 表格
            XEasyPdfTable table = XEasyPdfHandler.Table.build();
            table.setBorderWidth(1);
            table.setMarginLeft(50);
            table.setMarginTop(20);
            table.setVerticalStyle(XEasyPdfPositionStyle.CENTER);
            table.setBorderColor(Color.BLACK);

            // 表格行
            XEasyPdfRow row =null;
            // 表格列(单元格)
            XEasyPdfCell cell =null;
            //标题行
            row=XEasyPdfHandler.Table.Row.build();
            row.setHorizontalStyle(XEasyPdfPositionStyle.CENTER);
            row.setBackgroundColor(Color.lightGray);
            for (int i = 0; i <tabHead.length ; i++) {
                cell=XEasyPdfHandler.Table.Row.Cell.build(100, 30);
                cell.addContent(XEasyPdfHandler.Text.build(tabHead[i]).setMarginLeft(5));
                row.addCell(cell);
            }
            table.addRow(row);
            //内容行
            for (HashMap<String, Object> r : tables) {
                row=XEasyPdfHandler.Table.Row.build();
                //row.setHorizontalStyle(XEasyPdfPositionStyle.CENTER);
                for (Map.Entry<String, Object> entry : r.entrySet()) {
                    cell=XEasyPdfHandler.Table.Row.Cell.build(100, 25);
                    cell.addContent(XEasyPdfHandler.Text.build(entry.getValue().toString()).setMarginLeft(5));
                    // 添加单元格到表格行
                    row.addCell(cell);
                }
                // 添加表格行到表格
                table.addRow(row);
            }
            page.addComponent(table);
        }

        // 添加空白页面
        document.addPage(page);
        document.save(outPdfPath);
    }

public List<String> readPdf2(String pdfPath)throws  Exception{
        // 读取文档
        XEasyPdfDocument document = XEasyPdfHandler.Document.load(pdfPath);

        // 获取文档总页数
        int totalPage = document.getTotalPage();
        // 打印文档总页数
        System.out.println("totalPage = " + totalPage);
        // 获取文档信息
        XEasyPdfDocumentInfo information = document.information();
        System.out.println(information.getTitle()+" "+information.getAuthor());
        // 定义待接收文本列表
        List<String> dataList = new ArrayList<>(10);
        // 获取文档图像器
        /*XEasyPdfDocumentExtractor extractor = document.extractor();
        extractor.extractText(dataList,0);*/
        // 获取文档分析器
        XEasyPdfDocumentAnalyzer analyzer = document.analyzer();
        // 分析文本(第一页和第三页)
        analyzer.analyzeText(0);
        // 获取分析文本
        List<XEasyPdfDocumentAnalyzer.TextInfo> textInfoList = analyzer.getTextInfoList();
        // 打印文本
        for (XEasyPdfDocumentAnalyzer.TextInfo textInfo : textInfoList) {
            System.out.println(textInfo.getTextContent());
        }
       // System.out.println("textInfoList = " + textInfoList);
        // 获取文档拆分器
        //XEasyPdfDocumentFormFiller formFiller = document.formFiller();

        /*List<XEasyPdfPage> pages = document.getPageList();
        for (XEasyPdfPage page : pages) {

        }*/
        // 关闭文档
        document.close();

        return dataList;
    }

public static void main(String[] args) {
        try {
            PdfUtil pdfUtil=new PdfUtil();

            List<HashMap<String,Object>> tables=new ArrayList<>();
            HashMap<String ,Object> row=null;
            for (int i = 1; i <=10 ; i++) {
                row=new HashMap<>();
                row.put("fKey","row"+i);
                row.put("fName","ZZZ"+i);
                row.put("fBir","2022-07-0"+i);
                tables.add(row);
            }
            String[] tabHead={"代码","名称","生日"};
            pdfUtil.createPdf2("d:/3.pdf",false,"我是标题","6718",tabHead,tables);

            pdfUtil.readPdf2("d:/2.pdf");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表