用xpdf和pdfbox来处理中文PDF文档及其比较

上传人:cn****1 文档编号:510294838 上传时间:2024-01-15 格式:DOC 页数:15 大小:49KB
返回 下载 相关 举报
用xpdf和pdfbox来处理中文PDF文档及其比较_第1页
第1页 / 共15页
用xpdf和pdfbox来处理中文PDF文档及其比较_第2页
第2页 / 共15页
用xpdf和pdfbox来处理中文PDF文档及其比较_第3页
第3页 / 共15页
用xpdf和pdfbox来处理中文PDF文档及其比较_第4页
第4页 / 共15页
用xpdf和pdfbox来处理中文PDF文档及其比较_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《用xpdf和pdfbox来处理中文PDF文档及其比较》由会员分享,可在线阅读,更多相关《用xpdf和pdfbox来处理中文PDF文档及其比较(15页珍藏版)》请在金锄头文库上搜索。

1、用 xpdf 和 pdfbox 来处理中文 PDF 文档及其比较我在以前的项目中使用的是 pdfbox ,在读取中文文档时 可以读出大部分的文字,但是在数字、分页等地方还是不可 避免的出现乱码。于是我在网上搜索,看有没有什么解决方 法,看到有说法:“PDFBox 看起来非常的方便,它的 API 功能强大。甚至能 和 Lucene 进行无缝的结合。 但是它有一个致命的弱点, 就是 它不支持中文。要提取中文的文本,可以采用另一个非常出 色的工具 xpdf 。” 于是我决定自己比较一下这两种方法处理中文 pdf 文档时在 时间性能、读取效果等各个方面的效果。一、关于 XPDF 和 PDFBOX1.x

2、pdfxpdf 只是一个软件, 通过 java 采用命令行调用, 并获取输出 结果, 如此来说使用简单, 但是相当受限, 如:无法跨平台, 无法处理特定格式(表格等) ,无法处理图片和其他附件。 这种调用必定限制了它的灵活性。2.pdfboxpdfbox (个BSD许可下的源码开放项目)是一个为开发人员读取和创建PDF文档而准备的纯Java类库。二、XPDF 的配置1.工具包下载 点这里 下载 我下载的是: xpdf-3.02pl4-win32.zip 另外还需要一个语言包: 2.工作路径设置 参考资料点这里在本文中以 c:xpdftestxpdf 作为 xpdf 的工作路径。 将 xpdf-

3、3.02p14-win32.zip 解压到 c:xpdftestxpdf 下。 将 解压到 c:xpdftestxpdfxpdf-chinese-simplified 下。 解压后的目录结构如图 1 所示: 3.修改配置文件 为了启用中文简体语言包,必须将 xpdf-chinese-simplified 目录下的 sample-xpdfrc 文件进行如下配置,并将其另存为 xpdfrc 文件 。注意:此文件为配置文件,而且名称必须是 xpdfrc 。如果 是别的名字,即使调用 pdftotext.exe 时,传入 ” -cfg xpdfrc2 ” 来告诉 xpdf 配置文件的名字, 好像 pd

4、ftotext.exe 也并没有使用这个配置文件。所以为了减少误解,请您将配 置文件直接命名为 xpdfrc 。修改 sample-xpdfrc 文件之一 在文件后面 加上一段话 :Txt 代码# begin Chinese Simplified support package (2004-jul-27)cidToUnicode Adobe-GB1C:/xpdftest/xpdf/xpdf-chinese-simplified/Adobe-GB1.cidToUni codeunicodeMap ISO-2022-CNC:/xpdftest/xpdf/xpdf-chinese-simplifie

5、d/ISO-2022-CN.unicode MapunicodeMap EUC-CNC:/xpdftest/xpdf/xpdf-chinese-simplified/EUC-CN.unicodeMapunicodeMap GBK C:/xpdftest/xpdf/xpdf-chinese-simplified/GBK.unicodeMap cMapDir Adobe-GB1C:/xpdftest/xpdf/xpdf-chinese-simplified/CMaptoUnicodeDirC:/xpdf/chinese-simplified/CMap#displayCIDFontTT Adobe-

6、GB1 /usr/gkai00mp.ttf# end Chinese Simplified support package注意: 路径要跟自己配置的一样。 修改 sample-xpdfrc 文件 之二另外,配置文件中原先没有加上一个“ textPageBreaks ”控 制。为了避免这个分页符号,我们需要在 sample-xpdfrc 文 件 “ text output control ”下面 加上一段话 :Txt 代码# If set to yes, text extraction willinsert page# breaks (form feed characters) between

7、pages. This # defaults to yes.textPageBreaks no设置 textPageBreaks 为 no 的意思是:在 PDF 文档的两页 之间不加入分页符号。 之所以这样,是因为这个符号有时 候会引起 SAX 解析 XML 上的困难。修改 sample-xpdfrc 文件之三 配置文件中原先把 textEncoding 注释了。 这样默认的字符集 是 Latin1 。我们必须打开它, 并且就是指定 textEncoding 为 UTF-8 ,而不是 GB2312 。即修改这句话 :Txt 代码textEncoding UTF-8三、PDFBOX 的配置 请点

8、这里 查看 PDFBOX 的配置。四、工程调用示范在自己的常用工作环境下新建一个工程PdfTest,并在此工程下新建一个包 pdfToText。此包包括三个类:TestPdfToText.java 包括 Main 函数,调用并测试 xpdf 和 pdfbox 对 PDF 文档的处理效果。PdfboxToText.java 用 pdfbox 来处理 PDF 文档。 XpdfToText.java 用 xpdf 来处理 PDF 文档。 目录结构如图 2 所示: 在 C 盘根目录下有 061231.pdf ,在 工程中相应设置路径进行测试,以下是源代码 : TestPdfToText.javaJav

9、a 代码package pdfToText;/* 功能描述:测试用 XPDF 和 PDFBOX 来读取中文 PDF 文 件生成 TXT 文件的效果* author Emily* Create 2010-03-07*/ public class TestPdfToText /*param args*/public static void main(String args) String rootPath = c:061231;/pdf 文件路径String pdffile = rootPath + .pdf;/ 用 xpdf 生成的 txt 文件路径String xpdfToTxtfile =

10、rootPath + _xpdf.txt;/ 用 pdfbox 生成的 txt 文件路径String pdfboxToTxtfile = rootPath + _pdfbox.txt;/XPDFtrylong begin = System.currentTimeMillis();XpdfToText xpToTxt = newXpdfToText(pdffile);xpToTxt.toTextFile(xpdfToTxtfile);long end = System.currentTimeMillis();+ (end - begin) + ms);catch(Exception e)e.pr

11、intStackTrace();/PDFBOXtrylong begin = System.currentTimeMillis();PdfboxToText pbToTxt = newPdfboxToText(pdffile);pbToTxt.toTextFile(pdfboxToTxtfile);long end = System.currentTimeMillis();+ (end - begin) + ms);catch(Exception e)e.printStackTrace();PdfboxToText.javaJava 代码package pdfToText;public cla

12、ss PdfboxToText private String filePath;public PdfboxToText(String filePath) this.filePath = filePath;public String getTextFromPdf()String result = null; FileInputStream is = null; PDDocument document = null; try is = new FileInputStream(filePath);PDFParser parser = new PDFParser(is);parser.parse();

13、document = parser.getPDDocument();PDFTextStripper stripper = newPDFTextStripper();result = stripper.getText(document); catch (FileNotFoundException e) e.printStackTrace(); catch (IOException e) e.printStackTrace(); finally if (is != null) try is.close();catch(IOExceptione)e.printStackTrace();if (doc

14、ument != null) trydocument.close();catch (IOException e)e.printStackTrace();return result;public void toTextFile(String filePath)String pdfContent = getTextFromPdf(); tryFile f = new File(filePath);if(!f.exists()BufferedWriter output = newBufferedWriter(new FileWriter(f);output.write(pdfContent); ou

15、tput.close();catch (Exception e) e.printStackTrace();XpdfToText.javaJava 代码package pdfToText;public class XpdfToText / PDF 文件名private File pdffile;/ 转换器的存放位置,默认在 c:xpdftestxpdf 下面 private String CONVERTOR_STORED_PATH = c:xpdftestxpdf;/ 转换器的名称,默认为 pdftotextprivate String CONVERTOR_NAME = pdftotext;/ 构造函数,参数为 pdf 文件的路径public XpdfToText(String pdffile) throws IOException this.p

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号