码迷,mamicode.com
首页 > 编程语言 > 详细

java利用pdfbox处理pdf

时间:2014-08-06 01:37:40      阅读:603      评论:0      收藏:0      [点我收藏+]

标签:Lucene   style   blog   http   color   java   os   io   

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

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

下载jar包:http://pdfbox.apache.org/downloads.html#recent

创建pdf,写入pdf的代码,官网上有介绍:http://pdfbox.apache.org/cookbook/documentcreation.html

直接搬过来

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 = new PDDocument();
 3 
 4 // Create a new blank page and add it to the document
 5 PDPage blankPage = new PDPage();
 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 properly
12 // 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 = new PDDocument();
PDPage page = new PDPage();
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 = new PDPageContentStream(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 package tools;
 2 
 3 import java.io.File;
 4 import java.io.FileNotFoundException;
 5 import java.io.FileWriter;
 6 import java.io.IOException;
 7 import java.net.MalformedURLException;
 8 import java.net.URL;
 9 import org.apache.pdfbox.pdmodel.PDDocument;
10 import org.apache.pdfbox.util.PDFTextStripper;
11 
12 public class PDFHandler {
13     public static void readPDF(String pdfFile) {
14         String txtFile = null;
15         PDDocument doc = null;
16         FileWriter writer = null;
17         URL url = null;
18         try {
19             url = new URL(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 = new FileWriter(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 void main(String[] args) {
81         readPDF("resource/正则表达式.pdf");
82     }
83 }


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

Lucene Integration

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

好吧!

 

java利用pdfbox处理pdf,布布扣,bubuko.com

java利用pdfbox处理pdf

标签:Lucene   style   blog   http   color   java   os   io   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!