pdf提取文本,表格以及转图片:spire.pdf

server/2025/1/13 9:39:20/

文章目录

  • 🐒个人主页:信计2102罗铠威
  • 🏅JavaEE系列专栏
    • 📖前言:
    • 🎀 1. pdfbox
        • 1.1导入pdfbox 的maven依赖
        • 1.1 提取文本
        • 1.2 提取文本表格(可自行加入逻辑处理)
        • 1.3 pdf转换成图片代码(不推荐)

🐒个人主页:信计2102罗铠威

🏅JavaEE系列专栏

📖前言:

PDF转文本的插件常用的有:pdfbox ,itextpdf 和 spire.pdf 这几个,
spire.pdf这个转图片不推荐使用(图片不完整要收费),推荐使用我发布itextpdf 这篇文章的转图片方式

pdfbox_6">🎀 1. pdfbox

pdfbox_maven_7">1.1导入pdfbox 的maven依赖

spire官网入口(不谢~)

           <dependency><groupId>e-iceblue</groupId><artifactId>spire.pdf</artifactId><version>10.7.3</version></dependency>

因为这个是私服仓库,可能有的小伙伴下不下来依赖:在maven的配置文件中配置这个仓库即可:
看不懂的点这里~
在这里插入图片描述

在这里插入图片描述

<repositories><repository><id>com.e-iceblue</id><name>e-iceblue</name><url>https://repo.e-iceblue.cn/repository/maven-public/</url></repository>
</repositories>	
1.1 提取文本
java">import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.texts.PdfTextExtractOptions;
import com.spire.pdf.texts.PdfTextExtractor;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;public class ExtractTextFromPage
{public static void main(String[] args) throws IOException{// 创建 PdfDocument 对象PdfDocument doc = new PdfDocument();// 加载 PDF 文件doc.loadFromFile("input.pdf");// 获取第一页,遍历文档所有页便可提取文档所有文本内容PdfPageBase page = doc.getPages().get(0);// 创建PdfTextExtractor 对象PdfTextExtractor textExtractor = new PdfTextExtractor(page);// 创建PdfTextExtractOptions 对象PdfTextExtractOptions extractOptions = new PdfTextExtractOptions();// 从页面中提取文本String text = textExtractor.extract(extractOptions);// 写入到 txt 文件中Files.write(Paths.get("Extracted.txt"), text.getBytes());// 释放PdfDocument对象doc.dispose();}
}
1.2 提取文本表格(可自行加入逻辑处理)
java">import com.spire.pdf.*;
import com.spire.pdf.utilities.PdfTable;
import com.spire.pdf.utilities.PdfTableExtractor;import java.io.FileWriter;
import java.io.IOException;public class ExtractTable {public static void main(String[] args)throws IOException {//实例化PdfDocument类的对象PdfDocument pdf = new PdfDocument();//加载PDF文档pdf.loadFromFile("test.pdf");//创建StringBuilder类的实例StringBuilder builder = new StringBuilder();//创建PdfTableExtractor类的对象PdfTableExtractor extractor = new PdfTableExtractor(pdf);//遍历每一页for (int page = 0; page < pdf.getPages().getCount(); page++){//提取页面中的表格存入PdfTable[]数组PdfTable[] tableLists = extractor.extractTable(page);if (tableLists != null && tableLists.length > 0){//遍历表格for (PdfTable table : tableLists){int row = table.getRowCount();//获取表格行int column = table.getColumnCount();//获取表格列for (int i = 0; i < row; i++){for (int j = 0; j < column; j++){//todo 获取表格中的文本内容  表格坐标(i,j)String text = table.getText(i, j);//将获取的text写入StringBuilder容器builder.append(text+" ");}builder.append("\r\n");}}}}//保存为txt文档FileWriter fileWriter = new FileWriter("ExtractedTable.txt");fileWriter.write(builder.toString());fileWriter.flush();fileWriter.close();}
}
pdf_131">1.3 pdf转换成图片代码(不推荐)

可以看我发布itextpdf 这篇文章的转图片方式,它这个功能不完整

java">import com.spire.pdf.*;
import com.spire.pdf.graphics.PdfImageType;import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;public class PDFtoImage {public static void main(String[] args)throws IOException {//实例化PdfDocument类的对象PdfDocument pdf = new PdfDocument();//加载PDF文档pdf.loadFromFile("sample.pdf");//遍历PDF每一页,保存为图片for (int i = 0; i < pdf.getPages().getCount(); i++) {//将页面保存为图片,并设置DPI分辨率BufferedImage image = pdf.saveAsImage(i, PdfImageType.Bitmap,500,500);//将图片保存为png格式File file = new File( String.format(("ToImage-img-%d.png"), i));ImageIO.write(image, "PNG", file);}pdf.close();}
}

http://www.ppmy.cn/server/157980.html

相关文章

检验统计量与p值笔记

一、背景 以雨量数据为例&#xff0c;当获得一个站点一年的日雨量数据后&#xff0c;我们需要估计该站点的雨量的概率分布情况&#xff0c;因此我们利用有参估计的方式如极大似然法估计得到了假定该随机变量服从某一分布的参数&#xff0c;从而得到该站点的概率密度函数&#x…

【网络】计算机网络的分类 局域网 (LAN) 广域网 (WAN) 城域网 (MAN)个域网(PAN)

局域网是通过路由器接入广域网的 分布范围 局域网Local Area Network&#xff1a;小范围覆盖&#xff0c;速度高&#xff0c;延迟低(办公室&#xff0c;家庭&#xff0c;校园&#xff0c;网络) 广域网Wide Area Network 大范围覆盖&#xff0c;速度相对低&#xff0c;延迟高…

【会话详解】

会话详解 概述 会话&#xff1a; 用户通过浏览器访问多个Web资源的过程&#xff0c;从打开浏览器开始访问特定网站&#xff0c;直到关闭浏览器的过程称为会话&#xff08;Session&#xff09;。会话管理是Web应用中跟踪和存储用户状态的重要机制。 有状态会话&#xff1a; …

使用conda出现requests.exceptions.HTTPError 解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

openstack下如何生成centos9 centos10 和Ubuntu24 镜像

如何生成一个centos 10和centos 9 的镜像1. 下载 对应的版本 wget https://cloud.centos.org/centos/10-stream/x86_64/images/CentOS-Stream-GenericCloud-x86_64-10-latest.x86_64.qcow2 wget https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-Gener…

react与nodejs实现流式传输,并可以进行中断(fetch聊天版)

一、前端 1.首先我们直观流的接收&#xff0c;后面再来流的中断 // 创建一个新的 AbortControllerconst controller new AbortController();setAbortController(controller); // 保存控制器以便之后使用const responseStream: any await fetch("你的后端地址url",{…

使用RSyslog将Nginx Access Log写入Kafka

个人博客地址&#xff1a;使用RSyslog将Nginx Access Log写入Kafka | 一张假钞的真实世界 环境说明 CentOS Linux release 7.3.1611kafka_2.12-0.10.2.2nginx/1.12.2rsyslog-8.24.0-34.el7.x86_64.rpm 创建测试Topic $ ./kafka-topics.sh --zookeeper 192.168.72.25:2181/k…

多个表单使用相同的 ref 和 rules,表单验证规则不生效

在 Vue 和 Element UI 中&#xff0c;如果多个表单使用相同的 ref 和 rules&#xff0c;可能会导致表单验证规则不生效。这是因为 ref 是唯一的&#xff0c;多个表单共享同一个 ref 会导致冲突。 解决方法&#xff1a; 1. 为每个表单设置不同的 ref 为每个表单设置不同的 re…