[Java 实现pdf转excel ]

目录

前言:

Apache POI和pdfbox库实现pdf转excel的详细代码实现:

综上所述:

Java实现iText pdf转excel详细代码实现

综上所述:

依赖:


前言:

  笔记而已

Apache POI和pdfbox库实现pdf转excel的详细代码实现:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.text.PDFTextStripper;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class PdfToExcelConverter {

    public static void main(String[] args) {
        String pdfFilePath = "sample.pdf";
        String excelFilePath = "output.xlsx";
        
        try {
            String pdfText = getPdfText(pdfFilePath);
            writeTextToExcel(pdfText, excelFilePath);
            System.out.println("PDF successfully converted to Excel!");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static String getPdfText(String pdfFilePath) throws IOException {
        PDDocument pdfDoc = PDDocument.load(new FileInputStream(new File(pdfFilePath)));
        PDFTextStripper stripper = new PDFTextStripper();
        String pdfText = stripper.getText(pdfDoc);
        pdfDoc.close();
        return pdfText;
    }

    private static void writeTextToExcel(String pdfText, String excelFilePath) throws IOException {
        boolean isXlsx = excelFilePath.endsWith(".xlsx");
        Workbook workbook = isXlsx ? new XSSFWorkbook() : new HSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");
        String[] lines = pdfText.split("\n");
        int rowIndex = 0;
        for (String line : lines) {
            Row row = sheet.createRow(rowIndex++);
            String[] cells = line.split("	");
            int cellIndex = 0;
            for (String cellValue : cells) {
                Cell cell = row.createCell(cellIndex++);
                cell.setCellValue(cellValue);
            }
        }
        workbook.write(new File(excelFilePath));
        workbook.close();
    }

}

综上所述:

  • 通过pdfbox库获取pdf文件的文本内容。
  • 使用Apache POI创建一个Excel工作簿对象和一个工作表对象。
  • 将pdf文本内容逐行添加到工作表中的单元格中。
  • 将工作簿写入Excel文件中。

Java实现iText pdf转excel详细代码实现

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.itextpdf.text.pdf.PdfReader;
import com.itextpdf.text.pdf.parser.PdfTextExtractor;
import com.itextpdf.text.pdf.parser.Vector;
import com.itextpdf.text.pdf.parser.VectorParserListener;
import com.itextpdf.text.pdf.parser.VectorRenderFilter;
import com.itextpdf.text.pdf.parser.TextRenderInfo;
import com.itextpdf.text.pdf.parser.RenderFilter;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.parser.PdfContentStreamProcessor;
import com.itextpdf.text.pdf.parser.PdfRenderListener;
import com.itextpdf.text.pdf.parser.PdfTextExtractor;
import com.itextpdf.text.pdf.parser.RenderListener;
import com.itextpdf.text.pdf.parser.TextRenderInfo;
import com.itextpdf.text.pdf.parser.TextRenderInfo;
import com.itextpdf.text.pdf.parser.Vector;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class PdfToExcelConverter {
    public static void main(String[] args) {

        try {
            String pdfFilePath = "sample.pdf";
            String excelFilePath = "output.xlsx";

            // 读取PDF文件
            PdfReader reader = new PdfReader(new FileInputStream(pdfFilePath));
            PdfContentStreamProcessor processor = new PdfContentStreamProcessor(new RenderListener() {
                private List<String> lines = new ArrayList<>();
                private String currentLine = "";
                private boolean newLine = false;

                @Override
                public void renderText(TextRenderInfo renderInfo) {
                    String text = renderInfo.getText();
                    Vector baseline = renderInfo.getBaseline().getStartPoint();
                    float x = baseline.get(Vector.I1);
                    float y = baseline.get(Vector.I2);
                    if (newLine || currentLine.isEmpty()) {
                        currentLine = text;
                        newLine = false;
                    } else {
                        currentLine += "	" + text;
                    }
                    if (text.endsWith("\n")) {
                        currentLine = currentLine.trim();
                        if (!currentLine.isEmpty()) {
                            lines.add(currentLine);
                        }
                        currentLine = "";
                        newLine = true;
                    }
                }

                @Override
                public void renderImage(ImageRenderInfo renderInfo) {
                }

                @Override
                public void endTextBlock() {
                }

                @Override
                public void beginTextBlock() {
                }
            });
            for (int i = 1; i <= reader.getNumberOfPages(); i++) {
                processor.processContent(reader.getPageContent(i), reader.getPageResources(i));
            }
            reader.close();

            // 将读取的内容写入Excel文件
            Workbook workbook = new XSSFWorkbook();
            Sheet sheet = workbook.createSheet();
            int rowIndex = 0;
            for (String line : lines) {
                Row row = sheet.createRow(rowIndex++);
                String[] cells = line.split("	");
                int cellIndex = 0;
                for (String cellValue : cells) {
                    Cell cell = row.createCell(cellIndex++);
                    cell.setCellValue(cellValue);
                }
            }
            FileOutputStream outputStream = new FileOutputStream(new File(excelFilePath));
            workbook.write(outputStream);
            workbook.close();
            System.out.println("PDF successfully converted to Excel!");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

综上所述:

  • 使用iText库的 PdfReader 类读取PDF文件,使用 PdfContentStreamProcessor 类解析PDF内容,并将其转换为字符串。
  • 将解析得到的字符串逐行添加到Excel工作表中的单元格中。
  • 将工作簿写入Excel文件中。

需要注意的是,iText库的解析功能支持多种PDF格式和语言,也可以处理文本、表格、图像、链接等内容。因此,使用iText库可以更加灵活地处理PDF文件的内容。

依赖:

在你的项目中使用iText库,需要在你的项目中引入以下依赖:   根据版本情况来
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13</version>
</dependency>

在你的项目中使用Apache POI库,需要在你的项目中引入以下依赖:


<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.0.0</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.0.0</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml-schemas</artifactId>
    <version>5.0.0</version>
</dependency>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/28130.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用Python将《青花瓷》的歌词生成词云图

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 因为上次有小伙伴问我&#xff0c;歌曲的歌词和评论怎么生成词云图&#xff0c;想买代码… 当时我就拒绝了&#xff0c;直接免费送给了他。 所以今天来分享给大家 我们以周董的《青花瓷》为例&#xff0c;要对《青花瓷》歌词…

DDP分布式训练中遇到的一些问题

1&#xff1a;所有forward的输出必须参与到loss计算并回传 2&#xff1a;类似于layer_norm这样的操作是无需进行分布式通信的&#xff0c;也无法进行分布式通信&#xff0c;所以在DDP的时候必须把find_unused_parameters设置为True 3&#xff1a;当报错形式为如下时&#xff…

Linux基础知识3

Linux基础知识 适合有Linux基础的人群进行复习。 禁止转载&#xff01; 用户与用户组管理 Linux系统下的3类用户和功能&#xff1b; 答&#xff1a; root用户&#xff08;或称根用户、超级用户&#xff09;&#xff1a;Linux的内置用户&#xff0c;权限最高&#xff0c;具有…

Qt学习06:QPainter绘画

文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 Qt学习06&#xff1a;QPainter绘画 Qt绘图 Paint System Qt的绘制系统支持在屏幕和打印设备上使用相同的API进行绘制&#xff0c;主要基于QPainter、QPaintDevice和QPaintEngine类。 QPainter用于执行绘图操作&#xff…

KYOCERA Programming Contest 2023(AtCoder Beginner Contest 305)(A、B、C、D)[施工中]

文章目录 A - Water Station(模拟)B - ABCDEFG&#xff08;模拟&#xff09;C - Snuke the Cookie Picker(模拟、暴力)D - Sleep Log&#xff08;二分&#xff0c;前缀&#xff09; A - Water Station(模拟) 题意&#xff1a;在[0,100]所有 x % 5 0的地方设置一个水站&#x…

有效延缓痴呆症:延世大学发现梯度提升机模型能准确预测 BPSD 亚综合征

内容一览&#xff1a;随着人口老龄化程度不断加剧&#xff0c;痴呆症已经成为公共健康问题。目前医学界治疗该病还只能通过药物缓解&#xff0c;尚未发现治愈的有效方法&#xff0c;因此&#xff0c;预防痴呆症尤为紧迫。在这一背景下&#xff0c;延世大学的研究人员开发了多个…

【每日挠头算法题(5)】重新格式化字符串|压缩字符串

欢迎~ 一、重新格式化字符串思路1&#xff1a;构造模拟具体代码如下&#xff1a; 思路2&#xff1a;双指针法具体代码如下&#xff1a; 二、字符串压缩思路1&#xff1a;简单替换 总结 一、重新格式化字符串 点我直达~ 思路1&#xff1a;构造模拟 1.遍历字符串&#xff0c;…

2023-6-12-第三式单例模式

&#x1f37f;*★,*:.☆(&#xffe3;▽&#xffe3;)/$:*.★* &#x1f37f; &#x1f4a5;&#x1f4a5;&#x1f4a5;欢迎来到&#x1f91e;汤姆&#x1f91e;的csdn博文&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f49f;&#x1f49f;喜欢的朋友可以关注一下&#xf…

HTTPS

HTTP 协议内容都是按照文本的方式明文传输的。 这就导致在传输过程中出现一些被篡改的情况。为了保证安全&#xff0c;现在大多数网站都采用HTTPS协议。HTTPS协议是在HTTP协议的基础上引入了一个加密层SSL。 目录 HTTPS的加密流程对称加密非对称加密为什么引入非对称加密&…

Python处理办公自动化的10大场景

在编程世界里&#xff0c;Python已经是名副其实的网红了。Python最大优势在于容易学&#xff0c;门槛比Java、C低非常多&#xff0c;给非程序员群体提供了用代码干活的可能性。当然Python能成为大众编程工具&#xff0c;不紧是因为易学&#xff0c;还因为Python有成千上万的工具…

抖音电商发展路径:从外链种草到达人/品牌直播

复盘抖音电商发展&#xff0c;可以总结出以下几点发展特征&#xff1a; 策略重心的变化 以种草为核心&#xff0c;给电商引流站外成交&#xff08;2019 年及之前&#xff09;→ 力推达人直播但效 果一般&#xff08;2020 上半年&#xff09;→ 推品牌自播并彻底闭环&#xff0…

Redis.conf 详解

我们启动 Redis&#xff0c;一般都是通过 Redis.conf 启动。 因此&#xff0c;我们必须了解 Redis.conf 的配置&#xff0c;才能更好理解和使用 Redis。 单位 单位注意事项&#xff1a;当需要内存大小时&#xff0c;可以指定为1k 5GB 4M等 通常形式&#xff1a; 1k > 1000字…

谈谈几个常见数据结构的原理

数组 数组是最常用的数据结构&#xff0c;创建数组必须要内存中一块 连续 的空间&#xff0c;并且数组中必须存放 相同 的数据类型。比如我们创建一个长度为10&#xff0c;数据类型为整型的数组&#xff0c;在内存中的地址是从1000开始&#xff0c;那么它在内存中的存储格式如…

【lvs集群】HAProxy搭建Web集群

HAProxy搭建Web集群 一、 HAProxy简介1.1HAProxy主要特性1.2HAProxy负载均衡策略非常多&#xff0c;常见的有如下8种1.3LVS、Nginx、HAproxy的区别1.4常见的Web集群调度器 二、Haproxy搭建 Web 群集haproxy服务器部署节点服务器部署 三、定义监控页面与定义日志3.1定义监控页面…

Multimodal fusion via cortical network inspired losses(第一次优质论文分享)

Multimodal fusion via cortical network inspired losses 论文介绍1. 论文研究的任务是什么&#xff1f;2. 论文关注/拟解决的问题是什么&#xff1f;3. 论文提出什么方法如何解决这个问题&#xff1f;4. 如何设计实验 来证明 所提方法确实解决了 拟解决的问题&#xff1f; 论…

kotlin协程flow retry功能函数返回失败后重试(4)

kotlin协程flow retry功能函数返回失败后重试&#xff08;4&#xff09; import kotlinx.coroutines.delay import kotlinx.coroutines.flow.* import kotlinx.coroutines.runBlockingfun main(args: Array<String>) {var count 0 //重试计数runBlocking {load().onEach…

RetinaNet网络介绍

前言 上一篇博文我们介绍了Focal Loss&#xff0c;原理也比较简单&#xff0c;有不了解的小伙伴可以先跳转到之前的博文了解一下。Focal Loss介绍。这篇博文我们来看下Focal Loss的出处&#xff1a;Focal Loss for Dense Object Detection&#xff0c;这篇论文提出了RetainNet之…

chatgpt赋能python:Python怎么建服务器?

Python怎么建服务器&#xff1f; 作为一名具有10年Python编程经验的工程师&#xff0c;我深入研究了Python的一些高级特性&#xff0c;其中包括Python如何建立服务器的方法。Python是一个高级的编程语言&#xff0c;可以轻松创建服务器应用程序&#xff0c;并为您的网站提供高…

低秩矩阵(Low-Rank)的意义

&#xff11;&#xff0e;回顾基础&#xff1a; 矩阵的秩度量的是矩阵行列之间的相关性&#xff0c;如果各行各列都是线性无关的&#xff0c;矩阵就是满秩。非零元素的行或列决定了秩的大小。&#xff0f;&#xff0f;划重点&#xff0c;秩可以度量矩阵自身相关性 讲个小故事…

windows 服务程序和桌面程序集成(七)效果演示及源程序下载

系列文章目录链接 windows 服务程序和桌面程序集成&#xff08;一&#xff09;概念介绍windows 服务程序和桌面程序集成&#xff08;二&#xff09;服务程序windows 服务程序和桌面程序集成&#xff08;三&#xff09;UDP监控工具windows 服务程序和桌面程序集成&#xff08;四…
最新文章