java利用pdfbox处理pdf

刚开始以为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

时间: 2024-10-25 17:12:49

java利用pdfbox处理pdf的相关文章

新知识:Java 利用itext填写pdf模板并导出(昨天奋战到深夜四点,知道今天两点终于弄懂)

废话少说,不懂itext干啥用的直接去百度吧. ***************制作模板******************* 1.先用word做出界面 2.再转换成pdf格式 3.用Adobe Acrobat 打开你刚刚用word转换成的pdf 会出现如下界面 下一步 点击浏览,选择刚才你转换好的pdf 下一步 4.打开后它会自动侦测并命名表单域,右键表单域,点击属性,出现文本域属性对话框,有的人说要改成中文字体,可是我没有改一样成功啦 5.一般情况下不需要修改什么东西,至少我没有修改哦 6.直

java使用pdfbox操作pdf文件

import java.io.FileInputStream; import org.apache.pdfbox.cos.COSDocument; import org.apache.pdfbox.pdfparser.PDFParser; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.util.PDFTextStripper; public class Read {  public String rea

利用lucene和pdfBox对PDF文本进行内容的解析

/*  * 这段代码的功能是利用PDFBox.zip的包  * 利用lucene对PDF文本进行内容的解析  * 读取pdf文件的内容.然后重新的写入到同名的.txt文件中  * */ 结果截图: package pdfbox; import java.io.File; import java.io.FileOut... songtaste.com/user/10335914/infosongtaste.com/user/10335923/infosongtaste.com/user/10335

java操作office和pdf文件java读取word,excel和pdf文档内容

在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下Java对word.excel.pdf文件的读取.本篇博客只是讲解简单应用.如果想深入了解原理.请读者自行研究一些相关源码. 首先我们来认识一下读取相关文档的jar包: 1. 引用POI包读取word文档内容 poi.jar 下载地址 http://apache.freelamp.com/poi/release/bin/poi-bin-3.6-20091214.zip 

利用lucene对PDF文本进行内容的解析

/* * 这段代码的功能是利用PDFBox.zip的包 * 利用lucene对PDF文本进行内容的解析 * 读取pdf文件的内容.然后重新的写入到同名的.txt文件中  * */ 结果截图: package pdfbox; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.net.MalformedU

java根据模板导出pdf

在网上看了一些Java生成pdf文件的,写的有点乱,有的不支持写入中文字体,有的不支持模板,有的只是随便把数据放里面生成文件,完全不考虑数据怎样放置的以及以后的维护性,想想还是自己总结一个完全版的导出pdf的工具类吧,总结一下网上的方法,加上自己的完善.具有以下特点: 综合特点: 一对一,点对点的给对应的地方写值,比如模板里面放了个name标识,在程序里把"张三"赋给name,那么输出的pdf里面name的地方就变成了张三,准确方便快捷 支持中文,可以使用自己下载的字体. 支持图片:图

Java程序员从笨鸟到菜鸟之(一百零三)java操作office和pdf文件(一)java读取word,excel和pd

在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下java对word.excel.pdf文件的读取.本篇博客只是讲解简单应用.如果想深入了解原理.请读者自行研究一些相关源码. 首先我们来认识一下读取相关文档的jar包: 1. 引用POI包读取word文档内容 poi.jar 下载地址 http://apache.freelamp.com/poi/release/bin/poi-bin-3.6-20091214.ziph

利用itextsharp导出pdf

在项目中,客户要求把一些表格导出pdf格式,在网上找了好久终于发现一个完美的解决方案,利用itextsharp可以很方便的导出pdf文件,不说太多了,直接上图,有图有真相 首先是页面图片 然后是导出的pdf图片 导出pdf代码如下: //导出Mold pdf文档 public void exportpdf_Mold(string quotenum, string fullpath) { string pdfName = quotenum + ".pdf"; string savePat

Java 利用replaceAll 替换中括号

Java的replaceAll函数默认是不能替换中括号的,例如想替换[b]到<b>,结果却就变成[<b>] 解决方案就是首先利用正则表达式替换中括号,然后再替换中括号内的内容: Java代码   infos = infos.replaceAll("[\\[\\]]",""); 不过后来又查询了下资料,发现中括号在java中居然是特殊字符,一对中括号里的内容是一组正则表达式.所以如果打算让[b]-><b>,只要如下写法: Ja