使用pdfbox解析pdf文档信息(属性,内容,图片)
2016-05-04 11:36
573 查看
package parse; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; 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 org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocumentCatalog; import org.apache.pdfbox.pdmodel.PDDocumentInformation; 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; /** * 使用 pdfbox 解析pdf 文档信息 * @author longhuiping * */ public class PDFParse { public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; public static void main(String[] args) throws Exception { PDFParse p = new PDFParse(); String pdfPath="E:\\上海项目测试\\文档\\35.pdf"; String imgSavePath="E:\\上海项目测试\\pdfImage\\"; pdfParse(pdfPath, imgSavePath); } /** * 解析pdf文档信息 * @param pdfPath pdf文档路径 * @throws Exception */ public static void pdfParse( String pdfPath, String imgSavePath ) throws Exception { InputStream input = null; File pdfFile = new File( pdfPath ); PDDocument document = null; try{ input = new FileInputStream( pdfFile ); //加载 pdf 文档 document = PDDocument.load( input ); /** 文档属性信息 **/ PDDocumentInformation info = document.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())); //获取内容信息 PDFTextStripper pts = new PDFTextStripper(); String content = pts.getText( document ); System.out.println( "内容:" + content ); /** 文档页面信息 **/ 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++; } } } } }catch( Exception e) { throw e; }finally{ if( null != input ) input.close(); if( null != document ) document.close(); } } /** * 获取格式化后的时间信息 * @param dar 时间信息 * @return * @throws Exception */ public static String dateFormat( Calendar calendar ) throws Exception { if( null == calendar ) return null; String date = null; try{ String pattern = DATE_FORMAT; SimpleDateFormat format = new SimpleDateFormat( pattern ); date = format.format( calendar.getTime() ); }catch( Exception e ) { throw e; } return date == null ? "" : date; } }
相关文章推荐
- Android属性之build.prop生成过程分析
- shell 去除 ^M
- #chkconfig: 2345 20 80
- AJAX简单使用介绍
- UIViewContentMode
- Opencv人脸识别备忘
- 【LeetCode】112. Path Sum Java,C++,解法及注释
- 【BZOJ4540】【Hnoi2016】序列 线段树
- AsyncTask的简单使用
- 一个perl URLencode URLdecode的方法 (2009-07-22 15:47:36)转载▼
- asp连接oracle
- Java 输入/输出流的详解
- 关于R语言和社交网络分析的几篇文章
- 一款超小且很好用的eclipse properties 编辑器插件
- dstat---性能检测工具
- APP推广应该做哪些事|干货分享
- Material Design之TextInputLayout
- 庆祝首日开通技术博客
- 监听滑动事件和消除与内嵌recyclerview冲突的Scrollview
- Andriod 中两个Activity之间传值的几种思路