`

sooba xpdf lucene

    博客分类:
  • java
阅读更多
XPDF使用文档
XPDF版本 3.0.2
日期 2008-11-26
文档版本 V1.0

1、概述
读取PDF文件中的文本内容,可以使用开源项目xpdf。下载地址:http://www.foolabs.com/xpdf/download.html。
注意使用:xpdf-3.02pl2-win32.zip以及xpdf-chinese-simplified.tar.gz(支持中文)。

2、安装
将xpdf-3.02pl2-win32.zip解压缩到D盘xpdf目录下,我们将以d:\xpdf作为xpdf的工作路径。
将xpdf-chinese-simplified.tar解压缩到xpdf根目录下的xpdf-chinese-simplified目录中。
为了启用中文简体语言包,您必须将xpdf目录下的sample-xpdfrc文件另存为xpdfrc文件。
注意:此文件为配置文件,而且名称必须是xpdfrc。如果是别的名字,即使调用pdftotext.exe时,传入”-cfg xpdfrc2”来告诉xpdf配置文件的名字,好像pdftotext.exe也并没有使用这个配置文件。所以为了减少误解,请您将配置文件直接命名为xpdfrc。
并在这个xpdfrc文件最后加上以下配置,注意Map文件的路径一定要正确。

Java代码
#----- begin Chinese Simplified support package (2004-jul-27)  
cidToUnicode     Adobe-GB1  D:/xpdf/ xpdf-chinese-simplified/Adobe-GB1.cidToUnicode  
unicodeMap ISO-2022-CN     D:/xpdf/ xpdf-chinese-simplified/ISO-2022-CN.unicodeMap  
unicodeMap EUC-CN       D:/xpdf/xpdf-chinese-simplified/EUC-CN.unicodeMap  
unicodeMap GBK      D:/xpdf/xpdf-chinese-simplified/GBK.unicodeMap  
cMapDir      Adobe-GB1  D:/xpdf/xpdf-chinese-simplified/Cmap  
toUnicodeDir                 D:/xpdf/xpdf-chinese-simplified/Cmap  
#displayCIDFontTT   Adobe-GB1  /usr/..../gkai00mp.ttf  
#----- end Chinese Simplified support package 

#----- begin Chinese Simplified support package (2004-jul-27)
cidToUnicode     Adobe-GB1  D:/xpdf/ xpdf-chinese-simplified/Adobe-GB1.cidToUnicode
unicodeMap ISO-2022-CN     D:/xpdf/ xpdf-chinese-simplified/ISO-2022-CN.unicodeMap
unicodeMap EUC-CN       D:/xpdf/xpdf-chinese-simplified/EUC-CN.unicodeMap
unicodeMap GBK      D:/xpdf/xpdf-chinese-simplified/GBK.unicodeMap
cMapDir      Adobe-GB1  D:/xpdf/xpdf-chinese-simplified/Cmap
toUnicodeDir                 D:/xpdf/xpdf-chinese-simplified/Cmap
#displayCIDFontTT   Adobe-GB1  /usr/..../gkai00mp.ttf
#----- end Chinese Simplified support package另外,配置文件中原先没有加上一个“textPageBreaks”控制。为了避免这个分页符号,我们需要在xpdfrc文件“text output control”下面加上这么一段话:
Java代码
# If set to "yes", text extraction will  insert  page  
# breaks  (form feed characters) between pages.  This  
# defaults to "yes".  
textPageBreaks      no 

# If set to "yes", text extraction will  insert  page
# breaks  (form feed characters) between pages.  This
# defaults to "yes".
textPageBreaks      no
设置textPageBreaks为no的意思是:在PDF文档的两页之间不加入分页符号。之所以这样,是因为这个符号有时候会引起SAX解析XML上的困难。
配置文件中原先把textEncoding注释了。这样默认的字符集是Latin1。我们必须打开它
Java代码
#textEncoding       UTF-8 
textEncoding        GBK 

#textEncoding UTF-8
textEncoding GBK
3、命令行调用
D:\xpdf\xpdf-3.02pl2-win32>pdftotext.exe -cfg xpdfrc d:\dwr中文文档(pdf).pdf

4、JAVA调用示范
pdftotext.exe的运行参数中,

Java代码
private String excuteStr = "D:\\xpdf\\xpdf-3.02pl2-win32\\pdftotext.exe";  
      
public String getContent()  {         
        String[] cmd = new String[] { excuteStr, "-enc", "UTF-8", "-q", file.getAbsolutePath(),"-" };  
 
        Process p = null;  
        BufferedInputStream bis = null ;  
        InputStreamReader reader = null;  
        StringBuffer sb = null;  
        BufferedReader br = null;  
          
        try {  
            p = Runtime.getRuntime().exec(cmd);  
            bis = new BufferedInputStream(p.getInputStream());  
            reader = new InputStreamReader(bis, "UTF-8");  
              
            sb = new StringBuffer();  
            br = new BufferedReader(reader);  
            String line = br.readLine();  
            sb = new StringBuffer();  
            while (line != null) {  
                System.out.println(line);  
                sb.append(line);  
                sb.append(" ");  
                line = br.readLine();  
            }  
 
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            try {  
                br.close() ;  
            } catch (IOException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
        }  
          
        content = sb.toString() ;  
          
        return content ;  
    } 

private String excuteStr = "D:\\xpdf\\xpdf-3.02pl2-win32\\pdftotext.exe";

public String getContent()  {
String[] cmd = new String[] { excuteStr, "-enc", "UTF-8", "-q", file.getAbsolutePath(),"-" };

Process p = null;
BufferedInputStream bis = null ;
InputStreamReader reader = null;
StringBuffer sb = null;
BufferedReader br = null;

try {
p = Runtime.getRuntime().exec(cmd);
bis = new BufferedInputStream(p.getInputStream());
reader = new InputStreamReader(bis, "UTF-8");

sb = new StringBuffer();
br = new BufferedReader(reader);
String line = br.readLine();
sb = new StringBuffer();
while (line != null) {
System.out.println(line);
sb.append(line);
sb.append(" ");
line = br.readLine();
}

} catch (IOException e) {
e.printStackTrace();
} finally {
try {
br.close() ;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

content = sb.toString() ;

return content ;
}
一个应用的demo
Java代码
package com.cs;  
 
public interface Parsable {  
      
    public String getTitle() ;  
    public String getContent()  ;  
    public String getSummary()  ;  


package com.cs;

public interface Parsable {

public String getTitle() ;
public String getContent()  ;
public String getSummary()  ;
}

Java代码
package com.cs;  
 
import java.io.BufferedInputStream;  
import java.io.BufferedReader;  
import java.io.File;  
import java.io.IOException;  
import java.io.InputStreamReader;  
 
public class PdfParser implements Parsable {  
    private File file ;  
    private String content ;//内容  
      
    /* 
     * pdf解读需配置 
     */ 
    private String executeStr = "E:\\EclipseStudyWorkspace\\LuceneParse\\xpdf\\xpdf-3.02pl2-win32\\pdftotext.exe" ;  
      
    public PdfParser(File file){  
        this.file = file ;  
    }  
      
    public String getContent(){  
          
        if (content != null){  
            return content ;  
        }  
          
        String[] cmd = new String[]{executeStr,"-enc","UTF-8","-q",file.getAbsolutePath(),"-"} ;  
        Process p = null ;  
       
       
        BufferedReader br = null ;  
        StringBuffer sb = new StringBuffer() ;  
        try {  
            p = Runtime.getRuntime().exec(cmd) ;  
              
            br = new BufferedReader(new InputStreamReader(p.getInputStream(),"UTF-8")) ;  
              
            String str = null ;  
            while((str = br.readLine() ) != null ){  
                sb.append(str).append("\n") ;  
            }  
              
        } catch (IOException e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        } finally{  
            if (br != null){  
                try {  
                    br.close() ;  
                } catch (IOException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
            }  
        }  
        content = sb.toString() ;  
          
        return content ;  
    }  
      
    public String getSummary() {  
        String summary ;  
        if (content == null ) {  
            getContent() ;  
        }  
          
        if (content.length() > 200) {  
            summary = content.substring(0, 200) ;  
        }else {  
            summary = content ;  
        }  
          
        return summary;  
    }  
      
    public String getTitle(){  
        return file.getName() ;  
    }  
      
    public static void main(String[] args){  
        PdfParser parser = new PdfParser(new File("E:\\EclipseStudyWorkspace\\LuceneParse\\fileSource\\123.pdf")) ;  
        System.out.println("pdf content : "+parser.getContent()) ;  
    }  


package com.cs;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

public class PdfParser implements Parsable {
private File file ;
private String content ;//内容

/*
* pdf解读需配置
*/
private String executeStr = "E:\\EclipseStudyWorkspace\\LuceneParse\\xpdf\\xpdf-3.02pl2-win32\\pdftotext.exe" ;

public PdfParser(File file){
this.file = file ;
}

public String getContent(){

if (content != null){
return content ;
}

String[] cmd = new String[]{executeStr,"-enc","UTF-8","-q",file.getAbsolutePath(),"-"} ;
Process p = null ;


BufferedReader br = null ;
StringBuffer sb = new StringBuffer() ;
try {
p = Runtime.getRuntime().exec(cmd) ;

br = new BufferedReader(new InputStreamReader(p.getInputStream(),"UTF-8")) ;

String str = null ;
while((str = br.readLine() ) != null ){
sb.append(str).append("\n") ;
}

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

return content ;
}

public String getSummary() {
String summary ;
if (content == null ) {
getContent() ;
}

if (content.length() > 200) {
summary = content.substring(0, 200) ;
}else {
summary = content ;
}

return summary;
}

public String getTitle(){
return file.getName() ;
}

public static void main(String[] args){
PdfParser parser = new PdfParser(new File("E:\\EclipseStudyWorkspace\\LuceneParse\\fileSource\\123.pdf")) ;
System.out.println("pdf content : "+parser.getContent()) ;
}
}


项目的结构
-projectName
------------src
------------webroot
------------xpdf
            ----xpdf-3.02pl2-win32
            ----xpdf-chinese-simplified
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    xpdf-3.02pl4-win32.zip

    这意味着用户可以在使用Xpdf时进行中文查询,这对于处理中文PDF文档的Lucene索引和搜索至关重要。Lucene是一个高性能、全文本搜索库,它可以集成到各种应用中,为用户提供强大的文本搜索功能。通过结合Xpdf的中文...

    xpdf-3.02pl2-linux.tar.gz(对pdf格式文件操作的工具包)(linux下使用)

    标签中提到了`lucene`,这是一个Java开发的全文搜索引擎库,这可能意味着xpdf工具包与Lucene结合使用时,可以方便地索引和搜索PDF文档中的内容。开发者可以利用这些工具处理大量PDF文档,构建强大的文档检索系统。 ...

    基于xPDF和Qt的PDF阅读器。

    PDFReader-D是一个基于xPDF库和Qt框架开发的PDF阅读器项目。这个项目的主要目标是提供一个用户友好的界面来查看PDF文档,并且能够处理PDF中的层(Layers)信息。xPDF是一个开源的PDF处理工具集,它包含了处理PDF文件...

    Lucene应用中Pdf文档文本数据提取方法研究

    通过xpdf,可以从Pdf文件中准确地抽取文本内容,使其能够被Lucene索引和检索。具体步骤如下: 1. **下载并安装xpdf**: 首先,从官方网站http://www.foolabs.com/xpdf/ 下载xpdf工具包,并按照指南完成安装。 2. **...

    xpdf4.0库,使用C/C++操作PDF文件的库

    Xpdf库是一个强大的开源工具包,专为C和C++开发者设计,用于处理PDF(Portable Document Format)文件。这个库提供了丰富的API,使得在各种应用中读取、解析、渲染和编辑PDF文档变得轻而易举。Xpdf库的最新版本是...

    xpdf-chinese-simplified.zip

    《Xpdf中文版详解及其在文档处理中的应用》 Xpdf是一款开源的PDF文档阅读和处理工具,专门针对中文环境进行了优化,名为"xpdf-chinese-simplified",其压缩包文件"xpdf-chinese-simplified.zip"包含了适用于简体...

    Xpdf Language Support Packages

    Xpdf是一款广受欢迎的开源PDF阅读器,专为那些寻求轻量级且功能强大的PDF文档查看解决方案的用户设计。这款软件支持多种操作系统,包括但不限于Linux、Windows和macOS,这使得它在跨平台应用中具有很高的灵活性。...

    xpdf实现pdf读取

    Xpdf是一款开源的PDF阅读器和工具集,主要用于Linux系统,它提供了查看、打印和提取PDF文件内容的功能。本篇文章将详细介绍如何使用Xpdf来实现PDF的读取。 首先,Xpdf的核心组件包括: 1. **pdftotext**:这个工具...

    开源pdf库(XPDF) VC6.0测试工程

    **开源PDF库XPDF在VC6.0下的测试工程** XPDF是一款著名的开源PDF库,主要功能是解析、渲染和处理PDF文档。它由多个组件组成,包括pdftohtml、pdffonts、pdfinfo等,可用于查看PDF元数据、提取文本和图像,以及将PDF...

    pdf编辑文件xpdf

    安装xpdf的过程通常涉及到下载源代码包,例如你提供的xpdf-3.03,然后通过编译和安装步骤来完成。首先,解压下载的压缩包: ``` tar -zxvf xpdf-3.03.tar.gz ``` 接着,进入解压后的目录并配置安装: ``` cd xpdf-...

    xPDF For PHP (PHP读取PDF文件) php_xpdf.dll

    PHP读取PDF文件, 仅支持 Thread Safety 版本的 PHP 5.5.x / 5.6.x / 7.0.x / 7.1.x / 7.2.x, 将对应的版本 php_xpdf.dll 复制到 PHP ext 目录下。 编译采用版本分别为 5.5.38 / 5.6.40 / 7.0.33 / 7.1.26 / 7.2.14 ...

    xpdf-4.03.tar.gz

    《xpdf:一款高效实用的PDF阅读器》 在信息化高度发展的今天,PDF(Portable Document Format)文件格式已经成为文档分享和传播的主流选择。而xpdf,作为一个历史悠久且备受推崇的开源PDF阅读器,为用户提供了高效...

    xpdf配置修改完成版

    **Xpdf:PDF处理工具的配置与应用** Xpdf是一款开源的PDF阅读器和转换工具,主要用于在Linux和Unix环境中查看、转换以及提取PDF文档内容。这个“xpdf配置修改完成版”似乎已经预设了适合直接使用的配置,使得用户...

    xpdf-chinese-simplified.rar

    标题中的"xpdf-chinese-simplified.rar"表明这是一个与处理中文PDF文档相关的压缩包,其中包含了XPDF工具的简体中文版本。XPDF是一款开源的PDF文档处理工具集,主要用于PDF文档的查看、转换和提取信息,尤其在处理非...

    java代码xpdf实例

    Java代码中的XPDF实例主要涉及的是使用XPDF库在Java应用程序中处理PDF文档。XPDF是一套开源的PDF工具,包括了PDF文档的查看、转换、提取文本等能力。在这个实例中,我们可能会关注以下几个核心知识点: 1. **XPDF ...

    使用xpdf提取中文PDF文档

    ### 使用xpdf提取中文PDF文档知识点详解 #### 一、前言 随着数字化时代的到来,PDF文档因其良好的兼容性和稳定性而被广泛应用于各种场景中。然而,在处理包含大量中文内容的PDF时,如何高效准确地提取其中的文字...

    Xpdf of linux

    **Xpdf 在 Linux 环境中的应用与详解** Xpdf 是一款专为 Linux 操作系统设计的轻量级 PDF 阅读器。它以其小巧的体积、快速的加载速度以及基本的功能集,成为许多 Linux 用户首选的 PDF 查看工具。在某些情况下,...

    xpdf-chinese-simplified-traditional-and-font.zip

    《Xpdf中文支持与字体详解》 在信息技术领域,PDF(Portable Document Format)是一种广泛使用的文档格式,它能够保持文档的原始布局和样式,便于跨平台分享和阅读。然而,对于中文用户而言,PDF文档的显示效果往往...

    开源PDF阅读器xpdf3.0.4

    **开源PDF阅读器xpdf3.0.4详解** PDF(Portable Document Format)是一种广泛用于电子文档交换的格式,因其跨平台性和保真性而深受用户喜爱。在众多的PDF阅读器中,开源项目xpdf是一款高效且轻量级的解决方案,特别...

Global site tag (gtag.js) - Google Analytics