java 如何读取PDF文件内容

java 如何读取PDF文件内容,第1张

import java.io.File

import java.io.FileOutputStream

import java.io.OutputStreamWriter

import java.io.Writer

import java.net.MalformedURLException

import java.net.URL

import org.pdfbox.pdmodel.PDDocument

import org.pdfbox.util.PDFTextStripper

public class PdfReader {

public void readFdf(String file) throws Exception {

// 是否排序

boolean sort = false

// pdf文件

String pdfFile = file

// 输入文本文件名称

String textFile = null

// 编码方式

String encoding = "UTF-8"

// 开始提取页数

int startPage = 1

// 结束提取页数

int endPage = Integer.MAX_VALUE

// 文件输入流,生成文本文件

Writer output = null

// 内存中存储的PDF Document

PDDocument document = null

try {

try {

// 首先当作一个URL来装载文件,如果得到异常再从本地文件系统//去装载文件

URL url = new URL(pdfFile)

//注意参数已不是以前版本中的URL.而是File。

document = PDDocument.load(pdfFile)

// 获取PDF的文件名

String fileName = url.getFile()

// 以原来PDF的名称来命名新产生的txt文件

if (fileName.length() >4) {

File outputFile = new File(fileName.substring(0, fileName

.length() - 4)

+ ".txt")

textFile = outputFile.getName()

}

} catch (MalformedURLException e) {

// 如果作为URL装载得到异常则从文件系统装载

//注意参数已不是以前版本中的URL.而是File。

document = PDDocument.load(pdfFile)

if (pdfFile.length() >4) {

textFile = pdfFile.substring(0, pdfFile.length() - 4)

+ ".txt"

}

}

// 文件输入流,写入文件倒textFile

output = new OutputStreamWriter(new FileOutputStream(textFile),

encoding)

// PDFTextStripper来提取文本

PDFTextStripper stripper = null

stripper = new PDFTextStripper()

// 设置是否排序

stripper.setSortByPosition(sort)

// 设置起始页

stripper.setStartPage(startPage)

// 设置结束页

stripper.setEndPage(endPage)

// 调用PDFTextStripper的writeText提取并输出文本

stripper.writeText(document, output)

} finally {

if (output != null) {

// 关闭输出流

output.close()

}

if (document != null) {

// 关闭PDF Document

document.close()

}

}

}

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

PdfReader pdfReader = new PdfReader()

try {

// 取得E盘下的SpringGuide.pdf的内容

pdfReader.readFdf("E://SpringGuide.pdf")

} catch (Exception e) {

e.printStackTrace()

}

}

}

可以使用PDFBOX0.7.3控件:

import java.io.InputStreamimport java.io.IOException

import org.apache.lucene.document.Documentimport org.pdfbox.cos.COSDocument

import org.pdfbox.pdfparser.PDFParserimport org.pdfbox.pdmodel.PDDocument

import org.pdfbox.pdmodel.PDDocumentInformationimport org.pdfbox.util.PDFTextStripper

import com.search.code.Index

public Document getDocument(Index index, String url, String title, InputStream is)throws DocCenterException {COSDocument cosDoc = null<br/> try {cosDoc = parseDocument(is)<br/> } catch (IOException e) {

closeCOSDocument(cosDoc)

throw new DocCenterException("无法处理该PDF文档", e)

}

if (cosDoc.isEncrypted()) {

if (cosDoc != null)

closeCOSDocument(cosDoc)

throw new DocCenterException("该PDF文档是加密文档,无法处理")

}

String docText = null

try {

PDFTextStripper stripper = new PDFTextStripper()

docText = stripper.getText(new PDDocument(cosDoc))

} catch (IOException e) {

closeCOSDocument(cosDoc)

throw new DocCenterException("无法处理该PDF文档", e)

}

PDDocument pdDoc = null

try {pdDoc = new PDDocument(cosDoc)<br/> PDDocumentInformation docInfo = pdDoc.getDocumentInformation()<br/> if(docInfo.getTitle()!=null &&!docInfo.getTitle().equals("")){<br/>title = docInfo.getTitle()}

} catch (Exception e) {

closeCOSDocument(cosDoc)

closePDDocument(pdDoc)

System.err.println("无法取得该PDF文档的元数据" + e.getMessage())

} finally {

closeCOSDocument(cosDoc)

closePDDocument(pdDoc)

}

return null

}

private static COSDocument parseDocument(InputStream is) throws IOException {

PDFParser parser = new PDFParser(is)parser.parse()return parser.getDocument()

}

private void closeCOSDocument(COSDocument cosDoc) {

if (cosDoc != null) {try {cosDoc.close()} catch (IOException e) {}

}}

private void closePDDocument(PDDocument pdDoc) {

if (pdDoc != null) {

try { pdDoc.close()

} catch (IOException e) {

}}}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/10820396.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-11
下一篇2023-05-11

发表评论

登录后才能评论

评论列表(0条)

    保存