xpdf转换pdf文件
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文件相关推荐
- java图片转换pdf_Java实现图片转换PDF文件的示例代码
最近因为一些事情,需要将一张简单的图片转换为PDF的文件格式,在网上找了一些工具,但是这些工具不是需要注册账号,就是需要下载软件. 而对于只是转换一张图片的情况下,这些操作显然是非常繁琐的,所以作者就 ...
- 将HTML文件转换为PDF文件(Thymeleaf模板转换,简单解决中文问题, 解决HTML带图片转换PDF文件问题)
将HTML文件转换为PDF文件 一.导入依赖 <!-- itext生成Pdf --> <dependency><groupId>com.itextpdf</g ...
- aspose office系列转换pdf文件
ASPOSE office系列转换PDF文件的正确姿势 1.jar 2.pom依赖 3.代码 相关jar和license.xml下载地址 1.jar 序号 jar名称 对应文件 1 aspose.sl ...
- 如何用pdf转换器快速转换PDF文件
迅捷PDF转换器是一款专业的PDF转换软件,有了这款转换工具,大家可以很轻松地把不可编辑的PDF文档转换成可编辑的常用文档(Word.Excel.PPT)等,更好地保存文档文本.图像.编排,方便编辑使 ...
- docx4j实现word文件转换pdf文件
目录 前言 PDF文件导出 word文件转换pdf文件 前言 前段时间在项目中遇到了导出pdf的问题,之前在项目中遇到导出文件莫不是excle或者word文件的导出,所以在遇到需要导出pdf文件时,我 ...
- Java实现图片转换PDF文件
文章目录 引入依赖 前端页面 控制层接口 PDF工具类 页面效果 最近因为一些事情,需要将一张简单的图片转换为PDF的文件格式,在网上找了一些工具,但是这些工具不是需要注册账号,就是需要下载软件. 而 ...
- 在线.class文件转换.java_word在线转换pdf的方法推荐,如何快速转换pdf文件?
"龙门胜地,代出英豪,百年名校,再展雄姿."2020年高考已经落下帷幕,我任职的学校频频传来捷报,本科.一本达线人数比去年剧增!当时领导们吩咐了一个任务,叫我这个语文老师编辑一份& ...
- xpdf读取pdf文件并根据pdf内容修改文件名称
0:前言 今天一哥们说他苦逼,导师逼他看文档,全是pdf,而且还是英文的,而且非常多,1000多个,我了个shit,更搞的是文档名字不是标题名,是编号,什么5026a001.pdf,都是这种 然后我说 ...
- 图片批量转换pdf文件
文章目录 1. 依赖 2. 工具类抽取 1. 依赖 <!--图片转换pdf Start--><!-- https://mvnrepository.com/artifact/com.i ...
最新文章
- 三年努力,梦归阿里!
- try catch finally
- KVM — 与 QEMU 和 Libvirt 的关系
- No result defined for action
- 电容式传感器位移性能试验报告_圆柱形电容式接近开关可以分3类?
- 联想小新锐7000设置vt_小新Pro 14 2021正式发布,联想举行秋季新品发布会,10款新品齐亮相...
- C#实现进度条progress control(转载)
- Spring AOP之公共的切入点配置
- 基于WCF的RESTFul WebAPI如何对传输内容实现压缩
- Linux文件系统Ext2,Ext3,Ext4性能大比拼
- 剑指offer题解 带讲解 python版 第一部分
- 基于Java visualvm的可视化监控的使用
- windows系统: 解决ie谷歌浏览器证书错误.2021-05-27
- BP算法简单推导过程
- 阿里云RPA(机器人流程自动化)— 码栈应用教程,让一切变得自动化
- vue 点击文字input_Vue实现点击按钮复制文本内容
- 盘古开源:Web3.0浪潮来袭,离不开分布式存储赋能
- android 文字滚动组件,Android textview 跑马灯文字滚动效果
- sja1000 中断_[转载]SJA1000的错误中断处理
- 杠铃策略,给你的“B计划”一个“阶层跃升”的机会
热门文章
- Linux下配置IPV6,C程序适配IPV6
- vue form action post 方式提交
- 上海python培训比较好的机构
- 欧陆词典PEST2词库
- Linux网络编程(IO多路复用)
- update过程中遇到kb2829760补丁无法更新而导致vs安装失败的解决方法: 1、安装KB2829760; 2、安装KB2829760中文语言包; 3、安装VS2013 with upda
- (学习日记)2023.4.11
- 消息中间件学习总结(8)——RocketMQ之RocketMQ捐赠给Apache那些鲜为人知的故事
- dex文件在模拟器测试运行
- 火车票在开车前多长时间停止取票?