利用pdfbox读取pdf文件内容和图片

     最近用pdfbox读取pdf文件中的内容和图片,可以获取每一页的内容和图片,但有个问题是没法获取图片在页面的位置。源码如下:

package com.util;


import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.StringWriter;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;


import javax.imageio.ImageIO;


import org.apache.pdfbox.pdfparser.PDFParser;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDDocumentCatalog;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.graphics.xobject.PDXObjectImage;
import org.apache.pdfbox.util.PDFTextStripper;
 
public class PdfBoxUtil {
 
try {

InputStream inputStream = new BufferedInputStream(new FileInputStream(new File("D:/android/a.pdf")));
//PDFParser parser = new PDFParser( inputStream );
//parser.parse();
PDDocument pdfDocument = PDDocument.load(inputStream); 
//PDDocument pdfDocument = parser.getPDDocument(); 
StringWriter writer = new StringWriter();
PDFTextStripper stripper = new PDFTextStripper();
stripper.writeText(pdfDocument, writer);
String contents = writer.getBuffer().toString();
 
/*
PDDocumentInformation documentInformation = pdfDocument.getDocumentInformation();
System.out.println("标题:" + documentInformation.getTitle());
PDDocumentInformation info = pdfDocument.getDocumentInformation();
System.out.println("标题:" + info.getTitle());
System.out.println("主题:" + info.getSubject());
System.out.println("作者:" + info.getAuthor());
System.out.println("关键字:" + info.getKeywords());
System.out.println("应用程序:" + info.getCreator());
System.out.println("pdf 制作程序:" + info.getProducer());
System.out.println("作者:" + info.getTrapped());
System.out.println("创建时间:" + dateFormat(info.getCreationDate()));
System.out.println("修改时间:" + dateFormat(info.getModificationDate()));
*/
 

/** 文档页面信息 **/
PDDocumentCatalog cata = pdfDocument.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) { 


//本页面文字内容
StringWriter sw = new StringWriter(); 
PDFTextStripper pst = new PDFTextStripper();
pst.setStartPage(i+1);
  pst.setEndPage(i+1);
pst.writeText(pdfDocument, sw); 
String content = sw.getBuffer().toString();
System.out.println(content);

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("D:/" + count);
count++;
}
}
}

}
} catch (Exception e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}


public static String dateFormat(Calendar calendar) throws Exception {
if (null == calendar)
return null;
String date = null;
try {
String pattern = "yyyy-MM-dd";
SimpleDateFormat format = new SimpleDateFormat(pattern);
date = format.format(calendar.getTime());
} catch (Exception e) {
throw e;
}
return date == null ? "" : date;
}
}


最后实在没办法,只好将每一页的内容转换成图片。替换如上红色部分代码,将每一页打印成图片。

if (null != page) { 

BufferedImage img1 =  page.convertToImage(); 

File file = new File("D:/"+i+".PNG");
ImageIO.write(img1, "PNG", file);

}

环保网

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值