itext,jxl实现pdf转为txt,txt转excel

news/2024/7/21 7:24:44 标签: itext, jxl, pdf, txt, excel

itextjxlpdftxttxtexcel_0">itextjxl实现pdf转为txttxtexcel

pom.xml配置

<!--管理依赖的版本号-->
<properties>
    <com.itextpdf.version>5.3.2</com.itextpdf.version>
    <org.bouncycastle.version>1.52</org.bouncycastle.version>
    <jxl.version>1.0</jxl.version>
</properties>
   
<!--依赖-->
<dependencies>
   <dependency>
       <groupId>com.itextpdf</groupId>
       <artifactId>itextpdf</artifactId>
       <version>${com.itextpdf.version}</version>
       <scope>compile</scope>
   </dependency>
   <!--读取pdf-->
   <dependency>
       <groupId>org.bouncycastle</groupId>
       <artifactId>bcpg-jdk15on</artifactId>
       <version>${org.bouncycastle.version}</version>
   </dependency>
   <!--text-->
   <dependency>
       <groupId>jxl</groupId>
       <artifactId>jxl</artifactId>
       <version>${jxl.version}</version>
   </dependency>
</dependencies>

itext_pdftxt_32">itext 读取pdf->txt

package itext;


import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.FilteredTextRenderListener;
import com.itextpdf.text.pdf.parser.LocationTextExtractionStrategy;
import com.itextpdf.text.pdf.parser.PdfTextExtractor;
import com.itextpdf.text.pdf.parser.RegionTextRenderFilter;
import com.itextpdf.text.pdf.parser.RenderFilter;
import com.itextpdf.text.pdf.parser.TextExtractionStrategy;

public class ReadPdfByiText {

    public static void main(String[] args) throws IOException {
        String outputPath = "D:\\developcodespace\\PdfContent_1.txt";
        PrintWriter writer = new PrintWriter(new FileOutputStream(outputPath));
        String fileName = "D:\\developcodespace\\20190323175137823782.pdf";

        readPdf(writer, fileName);//直接读全PDF面

        //readPdf_filter(fileName);//读取PDF面的某个区域

    }

    public static void readPdf(PrintWriter writer,String fileName){
        String pageContent = "";
        try {
            PdfReader reader = new PdfReader(fileName);
            int pageNum = reader.getNumberOfPages();
            for(int i=1;i<=pageNum;i++){
                String textFromPage = PdfTextExtractor.getTextFromPage(reader, i);
                pageContent += textFromPage;//读取第i页的文档内容
//                pageContent += PdfTextExtractor.getTextFromPage(reader, i);//读取第i页的文档内容
            }
            writer.write(pageContent);
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            writer.close();
        }
    }

    public static void readPdf_filter(PrintWriter writer,String fileName){
        String pageContent = "";
        try {
            Rectangle rect = new Rectangle(90, 0, 450, 40);
            RenderFilter filter = new RegionTextRenderFilter(rect);
            PdfReader reader = new PdfReader(fileName);
            int pageNum = reader.getNumberOfPages();
            TextExtractionStrategy strategy;
            for (int i = 1; i <= pageNum; i++) {
                strategy = new FilteredTextRenderListener(new LocationTextExtractionStrategy(), filter);
                pageContent +=PdfTextExtractor.getTextFromPage(reader, i, strategy);
            }
			/*String[] split = pageContent.split(" ");
			for(String ss : split){
				System.out.println(ss.substring(ss.lastIndexOf(":")+1, ss.length()));
			}*/
            writer.write(pageContent);
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            writer.close();
        }
    }
}

jxltxtexcel_107">jxl读取txt->excel

package itext;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class TextToExcel {

    public static void main(String[] args) {

        File file = new File("D:\\developcodespace\\PdfContent_1.txt");// 将读取的txt文件
        File file2 = new File("D:\\developcodespace\\work.xls");// 将生成的excel表格

        if (file.exists() && file.isFile()) {

            InputStreamReader read = null;
            String line = "";
            BufferedReader input = null;
            WritableWorkbook wbook = null;
            WritableSheet sheet;

            try {
                read = new InputStreamReader(new FileInputStream(file), "utf-8");
                input = new BufferedReader(read);

                wbook = Workbook.createWorkbook(file2);// 根据路径生成excel文件
                sheet = wbook.createSheet("first", 0);// 新标签页

                try {
                    Label company = new Label(0, 0, "公司名称");// 如下皆为列名
                    sheet.addCell(company);
                    Label position = new Label(1, 0, "岗位");
                    sheet.addCell(position);
                    Label salary = new Label(2, 0, "薪资");
                    sheet.addCell(salary);
                    Label status = new Label(3, 0, "状态");
                    sheet.addCell(status);
                } catch (RowsExceededException e) {
                    e.printStackTrace();
                } catch (WriteException e) {
                    e.printStackTrace();
                }

                int m = 1;// excel行数
                int n = 0;// excel列数
                Label t;
                while ((line = input.readLine()) != null) {
                    if(!line.startsWith("014")){
                        continue;
                    }
                    String[] words = line.split("[ \t]");// 把读出来的这行根据空格或tab分割开

                    for (int i = 0; i < words.length; i++) {
                        if (!words[i].matches("\\s*")) { // 当不是空行时
                            t = new Label(n, m, words[i].trim());
                            sheet.addCell(t);
                            n++;
                        }
                    }
                    n = 0;// 回到列头部
                    m++;// 向下移动一行
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (RowsExceededException e) {
                e.printStackTrace();
            } catch (WriteException e) {
                e.printStackTrace();
            } finally {
                try {
                    wbook.write();
                    wbook.close();
                    input.close();
                    read.close();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (WriteException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("over!");
            System.exit(0);
        } else {
            System.out.println("file is not exists or not a file");
            System.exit(0);
        }
    }
}


http://www.niftyadmin.cn/n/710773.html

相关文章

iframe 父子窗口操作

2019独角兽企业重金招聘Python工程师标准>>> // //在iframe子页面获取父页面元素 $(#objId, parent.document); $(window.parent.document).find("#objId");//在父页面获取iframe子页面的元素 $("#objid",document.frames(iframename).document…

跟林轩田的机器学习课程

前天刷完了leetcode的150题~算是完成了一个节点~后续每天回顾下几题&#xff0c;保持感觉~ 机器学习这块&#xff0c;感觉自己在实际上线的项目中也用过&#xff0c;各种算法也了解。 但是面试时让我一点儿不差的推导出来SVM&#xff0c;真是做不到&#xff0c;就是基础不牢固。…

IDEA之Jrebel插件实现springboot热部署

最近在搞springboot前后端分离的项目&#xff0c;用到springboot项目&#xff0c;每次改代码都要重启下很烦&#xff0c;于是寻找可以实现热部署的方法 归纳如下 1.spring-boot-devtools 2.spring-loaded 3.Jrebel(本文重点) 1.在pom中直接引入依赖 <dependency>&l…

DOC命令小问题~~+理解

在DOS中利用命令去除了文件的系统属性&#xff0c;隐藏属性以后&#xff0c;在WINDOWS视图模式下&#xff0c;还是看不到那些系统文件和系统文件夹&#xff0c;还是得通过文件夹选项中的“显示隐藏文件”“显示系统文件”才可以看到那些文件。这是为何啊&#xff1f;&#xff1…

32完数个数

32 完数个数 作者: xxx时间限制: 1S章节: 循环 问题描述 : 完数的定义&#xff1a;如果一个大于1的正整数的所有真因子(不包括自己的那些因子)之和等于它的本身&#xff0c;则称这个数是完数&#xff0c;比如6&#xff0c;28都是完数&#xff1a;6123&#xff1b;28124714。…

递归调用-水池蓄满水可以有多少种组合

2019独角兽企业重金招聘Python工程师标准>>> package com.ironman.util;import java.util.ArrayList; import java.util.Arrays; import java.util.List; /*** http://supercharles888.blog.51cto.com/609344/1345561*题目&#xff1a; 假设有一个大水池&#xff0c…

Rust标准库之叛逆的容器:CellT 和 RefCellT

2019独角兽企业重金招聘Python工程师标准>>> 基础概念 在介绍这两个容器之前&#xff0c;请随我一起复习一下Rust中的一些概念和规则&#xff08;已经熟悉的可以直接跳过&#xff09;。 Rust语言的资源管理采用所有权的方式来管理&#xff0c;一个对象&#xff08;值…