PDFBOX 解析PDF

 1、使用PDFBox处理PDF文档

PDF全称Portable Document Format,是Adobe公司开发的电子文件格式。这种文件格式与操作系统平台无关,可以在Windows、Unix或Mac OS等操作系统上通用。

PDF文件格式将文字、字型、格式、颜色及独立于设备和分辨率的图形图像等封装在一个文件中。如果要抽取其中的文本信息,需要根据它的文件格式来进行解析。幸好目前已经有不少工具能帮助我们做这些事情,其中就有PDFBOX

PDFBox是Java实现的PDF文档API库,提供PDF文档的一系列操作。例如创建、处理以及文档内容提取等功能,也包含了一些命令行实用工具。

主要有以下特性:

  • PDF格式的文本抽取
  • 合并PDF文档
  • PDF文档的加密与解密
  • Lucene搜索引擎集成
  • 填充表单数据
  • 创建一个文本文件的PDF
  • 创建PDF页面图象
  • 打印PDF文档

 

2、PDFBox的下载

最常见的一种PDF文本抽取工具就是PDFBox了,访问网址http://sourceforge.net/projects/pdfbox/。读者可以在该网页下载其最新的版本。本书采用的是PDFBox-0.7.3版本。PDFBox是一个开源的Java PDF库,这个库允许你访问PDF文件的各项信息。

3、在Eclipse中配置

以下是在Eclipse中创建工程,并导入pdf工具类的过程

(1)在Eclipse的workspace中创建一个普通的Java工程:pdfprj

(2)把下载的PDFBox-0.7.3.zip解压。

(3)进入external目录下,可以看到,这里包括了PDFBox所有用到的外部包。复制下面的Jar包到工程pdfprj的lib目录下(如还未建立lib目录,则先创建一个)。

  1.  bcmail-jdk14-132.jar
  2.  bcprov-jdk14-132.jar
  3.  checkstyle-all-4.2.jar
  4.  FontBox-0.1.0-dev.jar
  5.  lucene-core-2.0.0.jar

然后再从PDFBox的lib目录下,复制PDFBox-0.7.3.jar到工程的lib目录下。

(4)在工程上单击右键,在弹出的快捷菜单中选择“Build Path->Config Build Path->Add Jars”命令,把工程lib目录下面的包都加入工程的Build Path。

 

4.使用PDFBox解析PDF内容

  抽取pdf文本内容

    

private PDDocument document = null;
	public static void main(String[] args) throws IOException {
		String file = "d:\\pdf\\pdf-type.pdf";
		PDFBOX parse = new PDFBOX();
		parse.openPDFFile(file);
		}
	public void openPDFFile(String file) throws IOException {
		InputStream is = null;
		File f = new File(file);
		is = new FileInputStream(f);
		this.document = this.parseDocument(is);
		//获取页数
		List pages = this.document.getDocumentCatalog().getAllPages();
		int pageSize = pages.size();
		System.out.println("pdf页数:"+pageSize);
		this.getPdfText();

	}
	public PDDocument parseDocument(InputStream input) throws IOException {
		PDDocument document = PDDocument.load(input);
		if (document.isEncrypted()) {
			try {
				document.decrypt("");
			} catch (CryptographyException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (InvalidPasswordException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return document;
	}
     /*
      * 抽取pdf文本内容
      */
	public void getPdfText() throws IOException {
		PDFTextStripper stripper = new PDFTextStripper();
		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(
				"d:\\pdf-type.txt"));
		BufferedWriter bw = new BufferedWriter(osw);
		stripper.setShouldSeparateByBeads(true);
		stripper.writeText(document, bw);
		bw.close();
		document.close();
	}

 

  抽取pdf文档信息:

 

 

 

  
    public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";   
       
    /**  
     * 解析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()));   
      
            /** 文档页面信息 **/  
            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;   
    }   

 

你可能感兴趣的:(eclipse,搜索引擎,OS,Lucene,Adobe)