java pdfbox_java利用pdfbox处理pdf

本文介绍了使用Apache PDFBox库来创建和读取PDF文件的方法。通过示例代码展示了如何生成简单的PDF文档,并将PDF文件转换为文本文件,解决了PDF读取过程中的常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

刚开始以为java读取pdf向读取txt文件一样简单,图样图森普!乱码问题!

在网上找了下资料,发现Apache的PDFBOX,下面写一下PDFBOX读取PDF的代码。

直接搬过来

Create a blank PDF

This small sample shows how to create a new PDF document using PDFBox.

1 //Create a new empty document

2 PDDocument document = newPDDocument();3

4 //Create a new blank page and add it to the document

5 PDPage blankPage = newPDPage();6 document.addPage( blankPage );7

8 //Save the newly created document

9 document.save("BlankPage.pdf");10

11 //finally make sure that the document is properly12 //closed.

13 document.close();

Hello World using a PDF base font

This small sample shows how to create a new document and print the text "Hello World" using one of the PDF base fonts.

//Create a document and add a page to it

PDDocument document = newPDDocument();

PDPage page= newPDPage();

document.addPage( page );//Create a new font object selecting one of the PDF base fonts

PDFont font =PDType1Font.HELVETICA_BOLD;//Start a new content stream which will "hold" the to be created content

PDPageContentStream contentStream = newPDPageContentStream(document, page);//Define a text content stream using the selected font, moving the cursor and drawing the text "Hello World"

contentStream.beginText();

contentStream.setFont( font,12);

contentStream.moveTextPositionByAmount(100, 700 );//注意这个坐标,(0,0)为本页的左下角

contentStream.drawString( "Hello World");

contentStream.endText();//Make sure that the content stream is closed:

contentStream.close();//Save the results and ensure that the document is properly closed:

document.save( "Hello World.pdf");

document.close();

Read PDF

下面是我参考网上的代码自己尝试的,官网没有具体例子介绍

其实整个过程就是 加载Document(pdf文档) 利用IO流写入到TXT文件

1 packagetools;2

3 importjava.io.File;4 importjava.io.FileNotFoundException;5 importjava.io.FileWriter;6 importjava.io.IOException;7 importjava.net.MalformedURLException;8 importjava.net.URL;9 importorg.apache.pdfbox.pdmodel.PDDocument;10 importorg.apache.pdfbox.util.PDFTextStripper;11

12 public classPDFHandler {13 public static voidreadPDF(String pdfFile) {14 String txtFile = null;15 PDDocument doc = null;16 FileWriter writer = null;17 URL url = null;18 try{19 url = newURL(pdfFile);20 } catch(MalformedURLException e) {21 //有异常说明无法转成url,以文件系统处理

22 url = null;23 }24

25 if(url != null) {//url处理

26 try{27 doc = PDDocument.load(url);//加载文档

28 String fileName =url.getFile();29 if(fileName.endsWith(".pdf")) { //得到新文件的文件名

30 File outFile = new File(fileName.replace(".pdf", ".txt"));31 txtFile =outFile.getName();32 } else{33 return;34 }35 } catch(IOException e) {36 e.printStackTrace();37 return;38 }39 } else {//文件系统处理

40 try{41 doc =PDDocument.load(pdfFile);42 if(pdfFile.endsWith(".pdf")) {43 txtFile = pdfFile.replace(".pdf", ".txt");44 } else{45 return;46 }47 } catch(IOException e) {48 e.printStackTrace();49 return;50 }51 }52 try{53 writer = newFileWriter(txtFile);54 PDFTextStripper textStripper = new PDFTextStripper();//读取PDF到TXT中的操作类

55 textStripper.setSortByPosition(false);//这个看了下官方说明,不是很确定是什么意思,但是为了提高效率最好设为false,缺省为false

56 textStripper.setStartPage(1);//起始页,缺省为第一页

57 textStripper.setEndPage(2);//结束页,缺省为最后一页

58 textStripper.writeText(doc, writer);//最重要的一步,写入到txt

59 } catch(FileNotFoundException e) {60 e.printStackTrace();61 } catch(IOException e) {62 e.printStackTrace();63 } finally{64 if(doc != null) {65 try{66 doc.close();67 } catch(IOException e) {68 e.printStackTrace();69 }70 }71 if(writer!= null) {72 try{73 writer.close();74 } catch(IOException e) {75 e.printStackTrace();76 }77 }78 }79 }80 public static voidmain(String[] args) {81 readPDF("resource/正则表达式.pdf");82 }83 }

本来处理pdf这个需求是在学习Lucene过程中提出的,不过在官网上看到了这个

Lucene Integration

Document luceneDocument = LucenePDFDocument.getDocument( ... );

好吧!

原文:http://www.cnblogs.com/erbin/p/3893450.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值