`
Charlie_1989
  • 浏览: 13227 次
文章分类
社区版块
存档分类
最新评论

Java读取PDF文字内容的方法

 
阅读更多

最后编辑时间 :2015-01-0517:30

方法一:PDFBox

(一个BSD许可下的源码开放项目)是一个为开发人员读取和创建PDF文档而准备的纯Java类库。它提供如下特性:

提取文本,包括Unicode字符。和Jakarta Lucene等文本搜索引擎的整合过程十分简单。加密/解密PDF文档。从PDF和XFDF格式中导入或导出表单数据。向已有PDF文档中追加内容。将一个PDF文档切分为多个文档,覆盖PDF文档。

官网:http://pdfbox.apache.org/index.html 截止当前最新版本1.8.8

/**

* PdfboxUtil.java

* Create on 2015-1-5

*/

package charlie.utils.pdf;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileWriter;

import java.io.InputStream;

import org.apache.pdfbox.pdfparser.PDFParser;

import org.apache.pdfbox.pdmodel.PDDocument;

import org.apache.pdfbox.util.PDFTextStripper;

/**

* @author CharlieChen

* @DateTime 2015-1-5 上午9:55:38

* @version 1.0

*/

public class PdfboxUtil {

/**

* @param args

*/

public static void main(String[] args) {

String pdfPath = "D:/temp/成交单-PDF格式.pdf";

String txtfilePath = "D:/temp/成交单-PDF格式-pdfbox.txt";

PdfboxUtil pdfutil = new PdfboxUtil();

try {

String content = pdfutil.getTextFromPdf(pdfPath);

pdfutil.toTextFile(content, txtfilePath);

System.out.println("Finished !");

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 读取PDF文件的文字内容

* @param pdfPath

* @throws Exception

*/

public String getTextFromPdf(String pdfPath) throws Exception {

// 是否排序

boolean sort = false;

// 开始提取页数

int startPage = 1;

// 结束提取页数

int endPage = Integer.MAX_VALUE;

String content = null;

InputStream input = null;

File pdfFile = new File(pdfPath);

PDDocument document = null;

try {

input = new FileInputStream(pdfFile);

// 加载 pdf 文档

PDFParser parser = new PDFParser(input);

parser.parse();

document = parser.getPDDocument();

// 获取内容信息

PDFTextStripper pts = new PDFTextStripper();

pts.setSortByPosition(sort);

endPage = document.getNumberOfPages();

System.out.println("Total Page: " + endPage);

pts.setStartPage(startPage);

pts.setEndPage(endPage);

try {

content = pts.getText(document);

} catch (Exception e) {

throw e;

}

System.out.println("Get PDF Content ...");

} catch (Exception e) {

throw e;

} finally {

if (null != input)

input.close();

if (null != document)

document.close();

}

return content;

}

/**

* PDF文件内容写入到txt文件中

* @param pdfContent

* @param filePath

*/

public void toTextFile(String pdfContent,String filePath) {

try {

File f = new File(filePath);

if (!f.exists()) {

f.createNewFile();

}

System.out.println("Write PDF Content to txt file ...");

BufferedWriter output = new BufferedWriter(new FileWriter(f));

output.write(pdfContent);

output.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

另需要commons-logging和fontbox-1.8.8的jar包

pdfbox只能做到把文字分析出来,并无法很好的控制分析的顺序,格式,字体等信息。

排序sort为true后,PDF按行读取,保持了顺序,但是遇到分栏,分页就会需要额外处理

方法二:iText

用于能够快速产生PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。支持文本,表格,图形的操作,可以方便的跟 Servlet 进行结合。

/**

* ItextpdfUtil.java

* Create on 2015-1-5

* import iText-5.0.2.jar

*/

package charlie.utils.pdf;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.PrintWriter;

import com.itextpdf.text.pdf.PdfReader;

import com.itextpdf.text.pdf.parser.PdfReaderContentParser;

import com.itextpdf.text.pdf.parser.PdfTextExtractor;

import com.itextpdf.text.pdf.parser.SimpleTextExtractionStrategy;

import com.itextpdf.text.pdf.parser.TextExtractionStrategy;

/**

* @author CharlieChen

* @DateTime 2015-1-5 上午11:43:26

* @version 1.0

*/

public class ItextpdfUtil {

/**

* @param args

*/

public static void main(String[] args) {

String pdfPath = "D:/temp/成交单-PDF格式.pdf";

String txtfilePath = "D:/temp/成交单-PDF格式-itext.txt";

//readPdfToTxt(pdfPath,txtfilePath); //调用读取方法

System.out.println(readPdfToTxt(pdfPath));

System.out.println("Finished !");

}

/**

* 读取PDF文件内容到txt文件

*

* @param writer

* @param pdfPath

*/

private static void readPdfToTxt(String pdfPath,String txtfilePath) {

// 读取pdf所使用的输出流

PrintWriter writer = null;

PdfReader reader = null;

try {

writer = new PrintWriter(new FileOutputStream(txtfilePath));

reader = new PdfReader(pdfPath);

int num = reader.getNumberOfPages();// 获得页数

System.out.println("Total Page: " + num);

String content = ""; // 存放读取出的文档内容

for (int i = 1; i <= num; i++) {

// 读取第i页的文档内容

content += PdfTextExtractor.getTextFromPage(reader, i);

}

String[] arr = content.split("/n");

for(int i=0;i<arr.length;i++){

System.out.println(arr[i]);

/*String[] childArr = arr[i].split(" ");

for(int j=0;j<childArr.length;j++){

System.out.println(childArr[j]);

}*/

}

//System.out.println(content);

writer.write(content);// 写入文件内容

writer.flush();

writer.close();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 读取pdf内容

* @param pdfPath

*/

private static String readPdfToTxt(String pdfPath) {

PdfReader reader = null;

StringBuffer buff = new StringBuffer();

try {

reader = new PdfReader(pdfPath);

PdfReaderContentParser parser = new PdfReaderContentParser(reader);

int num = reader.getNumberOfPages();// 获得页数

TextExtractionStrategy strategy;

for (int i = 1; i <= num; i++) {

strategy = parser.processContent(i,

new SimpleTextExtractionStrategy());

buff.append(strategy.getResultantText());

}

} catch (IOException e) {

e.printStackTrace();

}

return buff.toString();

}

}

方法三:XPDF

xpdf是一个开源项目,我们可以调用他的本地方法来实现抽取中文pdf文件。过程复杂,参照以下博客:

在linux下如何安装xpdf:http://blog.chinaunix.net/uid-7591044-id-1742951.html

Window系统安装xpdf : http://blog.csdn.net/jiuyueguang/article/details/10083965

http://www.thinksaas.cn/group/topic/149121/

分享到:
评论

相关推荐

    java读取pdf的文字、图片、线条和对应坐标

    pdf文档的内容都是坐标定位的,文档内容主要包含文本、图片、线条;需要用到pdfbox和pdf2dom两个依赖包

    Java读取PDF查找指定文字位置,并添加悬浮图片(文档签字/盖章)

    本文将深入探讨如何使用Java读取PDF文件,查找特定文字的位置,并在此基础上添加悬浮图片,以实现签字或盖章的功能。首先,我们需要理解PDF文档的结构以及如何在Java中操作PDF。 PDF(Portable Document Format)是...

    java识别pdf图片中的文字

    Java识别PDF图片中的文字是一项常见的任务,特别是在文档处理和数据提取领域。Tess4J是一个强大的工具,它基于Tesseract OCR(光学字符识别)引擎,能够帮助开发者在Java应用程序中实现这一功能。以下是对这个主题的...

    用Java读取pdf中的数据

    使用iText的`PdfReader`类,我们可以打开PDF文件,获取其元数据,如作者、创建日期等,同时还能遍历PDF的页面,读取其中的文字、图像和表单数据。以下是一个基本的示例代码,展示如何使用iText的`PdfReader`读取PDF...

    C#生成PDF 读取PDF文本内容 获取PDF内图片

    本主题聚焦于利用C#处理PDF文档,包括生成PDF、读取PDF文本内容以及获取PDF内的图片。以下是对这些知识点的详细阐述: ### 1. C#生成PDF 生成PDF文件通常需要借助第三方库,因为.NET Framework的标准库并不直接...

    java获取pdf文件内容

    这里包含了一个FontBox-0.1.0.jar和pdfbox-0.7.3.jar两个jar包,还有一个PdfReader.java文件,很简单,建立一个...把main方法里面的pdf文件路径改下,最后右击执行java类就OK了! 目前无法批量执行!需要进一步优化!

    .NET生成PDF 读取PDF文本内容 获取PDF内图片

    在.NET开发环境中,生成PDF、读取PDF文本内容以及获取PDF内的图片是常见的需求,尤其在文档处理和报告生成的应用中。本文将详细介绍如何利用C#进行这些操作,并提供相关库和技术的概述。 首先,生成PDF文件在.NET中...

    java PDF关键字定位

    这个过程涉及到PDF的读取、内容遍历以及文本匹配,因此在实际应用中,你可能需要对代码进行优化,例如处理复杂的布局、调整高亮样式等。同时,也要注意性能问题,特别是对于大型PDF文档,搜索和处理可能会比较耗时。...

    【Java】基于Pdfbox解析PDF文档中指定位置的文字和图片

    Apache PDFBox是一个开源Java库,支持PDF文档的开发和转换。 我们可以使用PDFBox开发可以创建,转换和操作PDF文档的Java程序。PDFBox的主要功能: Extract Text – 使用PDFBox,您可以从PDF文件中提取Unicode文本。 ...

    Java 读取pdf文件中的数据

    ### Java读取PDF文件中的数据 #### 知识点概览 本文将详细介绍如何使用Java语言来读取PDF文件中的文本内容。此方法简洁高效,适用于处理大量的PDF文档。主要涉及的技术栈包括Java编程基础、PDFBox库的使用以及文件I...

    定时读取PDF文件,并批量插入到数据库

    在IT行业中,定时任务是常见的自动化操作,而本项目的核心在于定时读取PDF文件并将其内容批量插入到数据库。这个任务涉及到多个技术点,包括线程管理、PDF处理、数据库操作以及工具类的设计。以下是对这些知识点的...

    JAVA读取PDF中的文件内容需要的jar

    在这个场景中,"JAVA读取PDF中的文件内容需要的jar"指的是这些库的Java Archive (JAR) 文件,它们包含了处理PDF文件所需的类和方法。 Apache PDFBox是Apache软件基金会的一个开源项目,提供了丰富的API来读取、写入...

    java使用pdf模板套打二维码,文字,表格示例

    - 例如,你可以通过读取数据库或其他数据源获取信息,然后在指定位置填充到PDF上。 3. **生成并插入二维码**: - 使用第三方库如ZXing(Zebra Crossing)生成二维码图像,ZXing提供了多种语言的绑定,包括Java。 ...

    Java 读取PDF中的文本和图片的方法

    Java 读取 PDF 中的文本和图片的方法 本文将介绍通过 Java 程序来读取 PDF 文档中的文本和图片的方法。分别调用方法 extractText() 和 extractImages() 来读取,需要的朋友可以参考下。 读取 PDF 文本 在读取 PDF...

    java使用itext导出PDF文本绝对定位(实现方法)

    java使用iText导出PDF文本绝对定位(实现方法) iText是一个流行的Java类库,用于生成PDF文档。下面我们将探讨如何使用iText在Java中导出PDF文本,并实现绝对定位。 iText简介 iText是一个开源的Java类库,用于...

    Java实现PDF读写(Itext)与解析XML读写(Dom4j)

    一、用JAVA完成了PDF读写(IText的应用) 加密PDF文件,引用到的JAR包是 bcprov-jdk15on-147 生成PDF文件,引用到的JAR包是itext5.5.1 项目文件为PDFText.java 主要实现功能: 1、创建一个PDF文件:HelloWorld.pdf,...

    使用java实现对PDF增加文字水印功能

    总结起来,通过Java和iText库,我们可以方便地实现PDF文字水印的功能,保护文档的版权和防止非法复制。在处理包含亚洲字符的PDF时,需要引入如iTextAsianCmaps.jar这样的特殊字符集支持文件。这个过程需要对PDF结构...

    java 写的转pdf代码,支持表格内容的中文换行

    这个“java写的转pdf代码”是专为此目的设计的,它支持中文字符的正确换行以及表格内容的布局,同时允许开发者自定义CSS样式,以满足多样化的格式需求。 首先,我们要理解的是PDF(Portable Document Format)是一...

    java读取word,excel,pdf等文本

    ### Java读取Word、Excel及PDF文档的知识点详解 #### 一、概述 在实际开发过程中,经常需要处理各种格式的文档,如Word、Excel、PDF等。这些文档的读取通常涉及到不同的技术和库。本篇文章将详细介绍如何使用Java...

Global site tag (gtag.js) - Google Analytics