PDFBox看起来非常的方便,它的API功能强大。甚至能和Lucene进行无缝的结合。但是它有一个致命的弱点,就是它不支持中文。要提取中文的文本,可以采用另一个非常出色的工具xpdf。

下载的是: xpdf-3.02pl4-win32.zip包

另外还需要一个语言包: xpdf-chinese-simplified.tar.gz,支持中文

工作路径的设置:

把 xpdf-3.02pl4-win32.zip包解压到 E:\PDFBox\xpdf(路径可以自己设定)

把 xpdf-chinese-simplified.tar.gz解压到 E:\PDFBox\xpdf\xpdf-chinese-simplified(必须要放在上面解压的目录里面)

解压后的目录结构

设置配置文件

sample-xpdfrc文件的名称修改为xpdfrc,

修改xpdfrc文件的配置,使用xpdf-chinese-simplified的中文转码

1,在xpdfrc配置文件中添加配置

#----- begin Chinese Simplified support package (2004-jul-27)cidToUnicode     Adobe-GB1  E:/PDFBox\xpdf/xpdf-chinese-simplified/Adobe-GB1.cidToUnicodeunicodeMap ISO-2022-CN     E:/PDFBox\xpdf/xpdf-chinese-simplified/ISO-2022-CN.unicodeMapunicodeMap EUC-CN       E:/PDFBox\xpdf/xpdf-chinese-simplified/EUC-CN.unicodeMapunicodeMap GBK      E:/PDFBox\xpdf/xpdf-chinese-simplified/GBK.unicodeMapcMapDir      Adobe-GB1  E:/PDFBox\xpdf/xpdf-chinese-simplified/CMaptoUnicodeDir                 E:/PDFBox\xpdf/xpdf-chinese-simplified/CMap#displayCIDFontTT   Adobe-GB1  /usr/..../gkai00mp.ttf#----- end Chinese Simplified support package

配置正确上面的路径

2,在配置文件xpdfrc中原先没有加上一个“ textPageBreaks ”控制。为了避免这个分页符号,我们需要在 xpdfrc 文件 “text output control ”下面 加上一段话 :

# If set to "yes", text extraction will  insert  page
# breaks  (form feed characters) between pages.  This
# defaults to "yes".
textPageBreaks      no

3,配置文件中原先把 textEncoding 注释了。这样默认的字符集是 Latin1 。我们必须打开它,并且就是指定 textEncoding 为UTF-8 ,而不是 GB2312 。即修改这句话 :

textEncoding        UTF-8

写个java类XpdfToText.java来调用这个jar包程序

package com.pdfToText;import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;public class XpdfToText {// PDF文件名private File pdffile;// 转换器的存放位置,默认在c:\xpdftest\xpdf下面private String CONVERTOR_STORED_PATH = "E:\\PDFBox\\xpdf\\";// 转换器的名称,默认为pdftotextprivate String CONVERTOR_NAME = "pdftotext";// 构造函数,参数为pdf文件的路径public XpdfToText(String pdffile) throws IOException {this.pdffile = new File(pdffile);}// 将pdf转为文本文档,参数为目标文件的路径public void toTextFile(String targetfile) throws IOException {toTextFile(targetfile, true);}// 将pdf转为doc文档,参数为目标文件的路径,文件名称和原来名称相同public void toTextDocFile() throws Exception {if(pdffile!=null&&pdffile.length()>0){String targetfile = pdffile.getAbsolutePath();targetfile = targetfile.substring(0, targetfile.lastIndexOf("."))+".doc";toTextFile(targetfile, true);}else{throw new FileNotFoundException("没有可以转换的文件!");}}// 将pdf转为文本文档,参数为目标文件的路径,文件名称和原来名称相同public void toTextTxtFile() throws Exception {if(pdffile!=null&&pdffile.length()>0){String targetfile = pdffile.getAbsolutePath();targetfile = targetfile.substring(0, targetfile.lastIndexOf("."))+".txt";toTextFile(targetfile, true);}else{throw new FileNotFoundException("没有可以转换的文件!");}}// 将pdf转为文本文档,参数1为目标文件的路径,// 参数2为true则表示使用PDF文件中的布局public void toTextFile(String targetfile, boolean isLayout)throws IOException {String[] cmd = getCmd(new File(targetfile), isLayout);for(String cdms :cmd)System.out.println(cdms);Runtime.getRuntime().exec(cmd);}// 获取PDF转换器的路径public String getCONVERTOR_STORED_PATH() {return CONVERTOR_STORED_PATH;}// 设置PDF转换器的路径public void setCONVERTOR_STORED_PATH(String path) {if (!path.trim().endsWith("\\"))path = path.trim() + "\\";this.CONVERTOR_STORED_PATH = path;}// 解析命令行参数private String[] getCmd(File targetfile, boolean isLayout) {// 命令字符String command = CONVERTOR_STORED_PATH + CONVERTOR_NAME;// PDF文件的绝对路径String source_absolutePath = pdffile.getAbsolutePath();// 输出文本文件的绝对路径String target_absolutePath = targetfile.getAbsolutePath();// 保持原来的layoutString layout = "-layout";// 设置编码方式String encoding = "-enc";String character = "GBK";// 设置不打印任何消息和错误String mistake = "-q";// 页面之间不加入分页String nopagebrk = "-nopgbrk";// 如果isLayout为false,则设置不保持原来的layoutif (!isLayout)layout = "";return new String[] { command, layout, encoding, character, mistake,nopagebrk, source_absolutePath, target_absolutePath };}
}

写个测试的调用类方法:

public static void main(String[] args) throws Exception {XpdfToText xpdfToText = new XpdfToText("E:\\数学实践观(英文版)(1).pdf");xpdfToText.toTextTxtFile();}

能正确生成一个 E:\\数学实践观(英文版)(1).txt文件,完成。

xpdf转换pdf文件相关推荐

  1. java图片转换pdf_Java实现图片转换PDF文件的示例代码

    最近因为一些事情,需要将一张简单的图片转换为PDF的文件格式,在网上找了一些工具,但是这些工具不是需要注册账号,就是需要下载软件. 而对于只是转换一张图片的情况下,这些操作显然是非常繁琐的,所以作者就 ...

  2. 将HTML文件转换为PDF文件(Thymeleaf模板转换,简单解决中文问题, 解决HTML带图片转换PDF文件问题)

    将HTML文件转换为PDF文件 一.导入依赖 <!-- itext生成Pdf --> <dependency><groupId>com.itextpdf</g ...

  3. aspose office系列转换pdf文件

    ASPOSE office系列转换PDF文件的正确姿势 1.jar 2.pom依赖 3.代码 相关jar和license.xml下载地址 1.jar 序号 jar名称 对应文件 1 aspose.sl ...

  4. 如何用pdf转换器快速转换PDF文件

    迅捷PDF转换器是一款专业的PDF转换软件,有了这款转换工具,大家可以很轻松地把不可编辑的PDF文档转换成可编辑的常用文档(Word.Excel.PPT)等,更好地保存文档文本.图像.编排,方便编辑使 ...

  5. docx4j实现word文件转换pdf文件

    目录 前言 PDF文件导出 word文件转换pdf文件 前言 前段时间在项目中遇到了导出pdf的问题,之前在项目中遇到导出文件莫不是excle或者word文件的导出,所以在遇到需要导出pdf文件时,我 ...

  6. Java实现图片转换PDF文件

    文章目录 引入依赖 前端页面 控制层接口 PDF工具类 页面效果 最近因为一些事情,需要将一张简单的图片转换为PDF的文件格式,在网上找了一些工具,但是这些工具不是需要注册账号,就是需要下载软件. 而 ...

  7. 在线.class文件转换.java_word在线转换pdf的方法推荐,如何快速转换pdf文件?

    "龙门胜地,代出英豪,百年名校,再展雄姿."2020年高考已经落下帷幕,我任职的学校频频传来捷报,本科.一本达线人数比去年剧增!当时领导们吩咐了一个任务,叫我这个语文老师编辑一份& ...

  8. xpdf读取pdf文件并根据pdf内容修改文件名称

    0:前言 今天一哥们说他苦逼,导师逼他看文档,全是pdf,而且还是英文的,而且非常多,1000多个,我了个shit,更搞的是文档名字不是标题名,是编号,什么5026a001.pdf,都是这种 然后我说 ...

  9. 图片批量转换pdf文件

    文章目录 1. 依赖 2. 工具类抽取 1. 依赖 <!--图片转换pdf Start--><!-- https://mvnrepository.com/artifact/com.i ...

最新文章

  1. 三年努力,梦归阿里!
  2. try catch finally
  3. KVM — 与 QEMU 和 Libvirt 的关系
  4. No result defined for action
  5. 电容式传感器位移性能试验报告_圆柱形电容式接近开关可以分3类?
  6. 联想小新锐7000设置vt_小新Pro 14 2021正式发布,联想举行秋季新品发布会,10款新品齐亮相...
  7. C#实现进度条progress control(转载)
  8. Spring AOP之公共的切入点配置
  9. 基于WCF的RESTFul WebAPI如何对传输内容实现压缩
  10. Linux文件系统Ext2,Ext3,Ext4性能大比拼
  11. 剑指offer题解 带讲解 python版 第一部分
  12. 基于Java visualvm的可视化监控的使用
  13. windows系统: 解决ie谷歌浏览器证书错误.2021-05-27
  14. BP算法简单推导过程
  15. 阿里云RPA(机器人流程自动化)— 码栈应用教程,让一切变得自动化
  16. vue 点击文字input_Vue实现点击按钮复制文本内容
  17. 盘古开源:Web3.0浪潮来袭,离不开分布式存储赋能
  18. android 文字滚动组件,Android textview 跑马灯文字滚动效果
  19. sja1000 中断_[转载]SJA1000的错误中断处理
  20. 杠铃策略,给你的“B计划”一个“阶层跃升”的机会

热门文章

  1. Linux下配置IPV6,C程序适配IPV6
  2. vue form action post 方式提交
  3. 上海python培训比较好的机构
  4. 欧陆词典PEST2词库
  5. Linux网络编程(IO多路复用)
  6. update过程中遇到kb2829760补丁无法更新而导致vs安装失败的解决方法: 1、安装KB2829760; 2、安装KB2829760中文语言包; 3、安装VS2013 with upda
  7. (学习日记)2023.4.11
  8. 消息中间件学习总结(8)——RocketMQ之RocketMQ捐赠给Apache那些鲜为人知的故事
  9. dex文件在模拟器测试运行
  10. 火车票在开车前多长时间停止取票?