`

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;   
    }   

 

分享到:
评论
1 楼 wqy110 2012-08-03  
PDFBOX ,提示找不到这个类。

相关推荐

    pdfbox 解析pdf里的图片和文字

    在这个场景中,我们将关注如何使用PDFBox解析PDF文档中的图片和文字。 首先,提取PDF中的图片是一项关键任务。PDFBox提供了`PDDocument`类,它是处理整个PDF文档的主要入口点。通过`PDDocument.load()`方法,我们...

    【Java】基于Pdfbox解析PDF文档中指定位置的文字和图片

    Apache PDFBox是一个开源Java库,支持PDF文档的开发和转换。 我们可以使用PDFBox开发可以创建,转换和操作PDF文档的Java程序。PDFBox的主要功能: Extract Text – 使用PDFBox,您可以从PDF文件中提取Unicode文本。 ...

    .Net c#使用PDFBox解析PDF文件

    在.Net中使用PDFBox需要引用: 1.PDFBox-0.7.3.dlll (8 MB) 2.IKVM.GNU.Classpath (7 MB) 3.IKVM.Runtime.dll (360 kB) 4.FontBox-0.1.0-dev.dll 使用方法: private static string parseUsingPDFBox(string ...

    pdfbox解析pdf的基本jar包

    pdfbox-0.7.3.jar fontbox-2.0.7.jar commons-logging-1.2.jar pdfbox-0.7.3.jar fontbox-2.0.7.jar commons-logging-1.2.jar

    C# pdfbox解析pdf文字及图片(源码)

    在C#中使用PDFBox解析PDF是一项技术含量较高的任务,涉及到对PDF格式的理解以及对PDFBox API的熟练运用。由于PDFBox是用Java开发的,所以.NET版本的实现可能与原版有些许差异,遇到问题时,可以参考Java版本的PDFBox...

    Java 解析 PDF, pdfbox读取PDF内容

    本文将深入探讨如何使用PDFBox库在Java中解析PDF并读取其内容。 PDFBox是Apache软件基金会的一个开源项目,它为Java开发者提供了一系列API来操作PDF文档,包括读取、创建、编辑以及签署PDF等任务。在本示例中,我们...

    pdfbox java解析pdf文档jar包+源代码+帮助文档+example

    本资源包含PDFBox的Java解析PDF文档所需的jar包,源代码,帮助文档以及示例(example),对于学习和使用PDFBox进行PDF操作具有极大的帮助。 首先,让我们深入了解一下PDFBox的主要功能: 1. **读取PDF文档**:...

    PDFBox-2.0.19 for .Net | c#用PDFBox解析PDF

    pdfbox for .Net目前的最新版PDFBox-2.0.19 用法: 将压缩包内所有dll拷贝到项目编译目录, 在项目中引用 IKVM.OpenJDK.Core.dll IKVM.OpenJDK.SwingAWT.dll pdfbox-app-2.0.19.dll 在代码中引入命名空间using org....

    PDFBox-2.0.12 for .Net | c#用PDFBox解析PDF

    pdfbox for .Net目前的最新版PDFBox-2.0.12 用法: 首先在引用中将下载的dll添加到项目中,同时在cs文件中引入命名空间using org.apache.pdfbox.text; 然后可以按如下代码编写demo PDDocument doc = PDDocument.load...

    java解析pdf框架pdfbox

    3. 使用PDFBox解析PDF 要解析PDF文档,首先需要加载文档: ```java PDDocument document = PDDocument.load(new File("123.pdf")); ``` 然后可以使用PDFTextStripper来提取文本: ```java PDFTextStripper ...

    电子发票解析软件 1.解析pdf电子发票数据,选择发票目录批量自动解析,生成解析统计excel文件 2.可以自动从邮箱下载发票文

    1.解析pdf,ofd,扫描图片电子发票数据,选择发票目录批量自动解析,生成解析统计excel文件 2.编辑解析的电子发票内容数据 3.导出打包电子发票数据,发票文件名可以选择多种命名方式 4.pdf相关工具:pdf转图片,ofd转...

    Java解析PDF文件源代码(代码中有详细注释)

    首先,Java解析PDF文件通常需要依赖特定的库,例如Apache PDFBox。在这个压缩包中,我们找到了PDFBox-0.6.6.jar,这是Apache PDFBox的一个旧版本,它提供了读取、写入和操作PDF文件的功能。PDFBox库包含了一系列的...

    pdfbox 提取 pdf 中 文字和图片 并 可转 html

    pdfbox 提取 pdf 中 文字和图片 并 可转 html 分2个文件,一个专门提取文本,内容可转为html,另一个文件专门用来提取图片,大家可自行整合为一个文件。使用pdfbox最新提取图片的方法。

    pdfbox-2.0.8.jar pdfbox 2.0.8 解析pdf获得文本内容

    java中pdfbox 2.0.8 解析pdf获得文本内容

    pdfbox和pdfrenderer所需包

    在IT行业中,处理PDF文件的任务时常涉及转换、渲染和解析等操作。在这个压缩包中,包含了两个主要的Java库,用于将PDF文件转换为图像:PDFBox和PDFRenderer。 **PDFBox** 是Apache软件基金会的一个开源项目,它提供...

    java使用pdfbox打印PDF

    PDFBox是由Apache软件基金会开发的Java库,其主要功能包括PDF文档的解析、生成、修改和显示。在PDFBox 2.0.8版本中,包含了对PDF文档处理的多种优化和增强,使得开发者能够更高效地处理PDF任务。 要使用PDFBox打印...

    Java 解析 pdf文件用到的jar包

    使用PDFBox解析PDF文件的基本步骤如下: 1. **初始化PDF文档**:首先,我们需要创建一个`PDDocument`对象,加载待处理的PDF文件。例如: ```java PDDocument document = PDDocument.load(new File("path_to_your_...

    PDFBox PDF处理类库 v3.0.0 alpha2.zip

    PDFBox是Apache软件基金会的一个开源项目,专门用于处理PDF(Portable Document Format)文档的Java类库。这个压缩包“PDFBox PDF处理类库 v3.0.0 alpha2.zip”包含的是PDFBox的最新预发布版本,即v3.0.0的alpha2...

    java解析pdf实例

    总结,这个实例展示了如何利用jsoup抓取网页上的PDF资源,并通过PDFBox解析PDF内容。尽管这不是jsoup的主要用途,但通过巧妙结合,可以实现从网页上获取并处理PDF文档的完整流程。在实际应用中,这样的组合可以用于...

Global site tag (gtag.js) - Google Analytics