如何用java解析pdf

tmdwoshihuoxingren 2010-09-03 04:29:47
纯文本格式的pdf我已经解析出来了,但是我还要解析图片版本或者文字版中带图片的pdf。
解析纯文本的代码如下:
package pdfbox;
import java.io.ByteArrayOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.OutputStreamWriter;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.util.PDFTextStripper;
import org.apache.*;

public class pdf2 {
public static String getText(String file){
String s="";
String pdffile=file;
PDDocument pdfdoc=null;
try {
pdfdoc=PDDocument.load(pdffile);
PDFTextStripper stripper=new PDFTextStripper();
s=stripper.getText(pdfdoc);

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
if (pdfdoc!=null){
pdfdoc.close();
}
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return s;
}
public static void toTextFile(String doc,String filename) throws Exception{
String pdffile=doc;
PDDocument pdfdoc=PDDocument.load(doc);
try {
pdfdoc=PDDocument.load(pdffile);
PDFTextStripper stripper=new PDFTextStripper();
PrintWriter pw=new PrintWriter(new FileWriter(filename));
stripper.writeText(pdfdoc, pw);

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try {
if (pdfdoc!=null){
pdfdoc.close();
}
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
String sc=getText("E:/solution.pdf");
System.out.print(sc);
toTextFile("E:/solution.pdf","E:/solution.txt");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}
...全文
1199 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaodonggehh 2012-11-15
  • 打赏
  • 举报
回复
解析图片:	PDDocumentCatalog cata = document.getDocumentCatalog();
			List pages = cata.getAllPages();
			int count = 1;
			for( int i = 0; i < pages.size(); i++ )
			{
				PDPage page = ( PDPage ) pages.get( i );
				if( null != page )
				{
					PDResources res = page.findResources();
					
					//获取页面图片信息
					Map imgs = res.getImages();
					if( null != imgs )
					{
						Set keySet = imgs.keySet();
						Iterator it = keySet.iterator();
						while( it.hasNext() )
						{
							Object obj =  it.next();
							PDXObjectImage img = ( PDXObjectImage ) imgs.get( obj );
							img.write2file( imgSavePath + count );
							count++;
						}
					}
				}
			}
chp845 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
纯文本格式的pdf我已经解析出来了,但是我还要解析图片版本或者文字版中带图片的pdf。
解析纯文本的代码如下:
package pdfbox;
import java.io.ByteArrayOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
……
[/Quote]
单纯是解析的图片或者文字而不显示pdf的还是比较好做的,根据属性提取相关数据
chinajiangfei 2012-05-07
  • 打赏
  • 举报
回复
楼主解析pdf标签怎么解析 说下思路。谢谢!
wyl5338616 2011-10-25
  • 打赏
  • 举报
回复
android上调用pdfbox-1.2.1可以实现么,急切想知道
tmdwoshihuoxingren 2010-12-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fanzhkui 的回复:]
请问一下 LZ的解析过程对所有的中文PDF文档都适用吗 我也是这样做的 但有些文档解析为乱码甚至有些解析不了!!望赐教!!!!
[/Quote]

我试过的pdf解析都是好的,可能是你程序设置有点问题吧,我的是utf-8
fanzhkui 2010-12-08
  • 打赏
  • 举报
回复
请问一下 LZ的解析过程对所有的中文PDF文档都适用吗 我也是这样做的 但有些文档解析为乱码甚至有些解析不了!!望赐教!!!!
tmdwoshihuoxingren 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 a131988 的回复:]
itext
[/Quote]
itext的貌似只能创建pdf,而不能解析pdf吧!?
解未知数 2010-09-06
  • 打赏
  • 举报
回复
itext
tmdwoshihuoxingren 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tmdwoshihuoxingren 的回复:]
哎,上面那个问题还没解决啊!自己顶下!
另外,今天又遇到一个问题,比较郁闷
我现在的项目用的是postgresql,有个表里有如下测试数据:53.56、70.2、60.0、30.0等,我的查询语句为<isGreaterThan prepend=" AND " property="percent" compareValue="0">
percent like '%$percent$%'
……
[/Quote]
这个问题俺自己解决了,再次顶下第一个问题!
tmdwoshihuoxingren 2010-09-04
  • 打赏
  • 举报
回复
哎,上面那个问题还没解决啊!自己顶下!
另外,今天又遇到一个问题,比较郁闷
我现在的项目用的是postgresql,有个表里有如下测试数据:53.56、70.2、60.0、30.0等,我的查询语句为<isGreaterThan prepend=" AND " property="percent" compareValue="0">
percent like '%$percent$%'
</isGreaterThan>
但是这样任何数据都查不到,后来我改为这样:
<isGreaterThan prepend=" AND " property="percent" compareValue="0">
percent <![CDATA[=]]> #percent#
</isGreaterThan>
然后我就可以查到60或者60.0的数据,而53.56、70.2这类数据查不到
请问如何解决?
tmdwoshihuoxingren 2010-09-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 logyina 的回复:]
org.apache.pdfbox.pdmodel.PDDocument

你这个是 哪一个jar 提供的啊?? 我之前用的 itext
[/Quote]
用的是pdfbox-1.2.1.zip
龙思霓 2010-09-03
  • 打赏
  • 举报
回复
org.apache.pdfbox.pdmodel.PDDocument

你这个是 哪一个jar 提供的啊?? 我之前用的 itext
龙思霓 2010-09-03
  • 打赏
  • 举报
回复
续LZ的问题,我也想知道一个问题: 在pdf中是可以设置预填项的名字的,这个名字并且可以在java中通过程序获取到。之后把值填充进去
也就说 我们只需要一个 pdf模板,然后通过java 来填写这个模板就 OK !
对于这样的实现我也只是在网上看见过,但是在实践过程中 失败了…………
不知道有没有会做这样的------- 我很像知道!
嘻嘻!

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧