本文使用系统CentOS 7
1、获取压缩包
点击下载pdf2htmlEX-0.14.6.tar.gz
2、解压
tar zxvf pdf2htmlEX-0.14.6.tar.gz
3、此时直接安装会有问题,需要先编译安装libfontforge
安装所以要的依赖程序
sudo yum install automake unzip libtool autoconf pango-devel pangoxft-devel
sudo yum install cmake gcc gnu-getopt java-1.8.0-openjdk libpng-devel fontforge-devel cairo-devel poppler-devel libspiro-devel freetype-devel poppler-data libjpeg-turbo-devel git make gcc-c++
wget https://github.com/coolwanglu/fontforge/archive/pdf2htmlEX.zip # 下载压缩包
unzip pdf2htmlEX.zip # 解压
cd fontforge-pdf2htmlEX/ # 移动到目录
./autogen.sh # 执行脚本
出现以上提示表示成功
继续依次执行
./configure
make
如果出现以上错误则修改解压出来的文件中的ufo.c文件 /fontforge-pdf2htmlEX/fontforge/ufo.c
文件中搜索 SplinePointListInterpretGlif 关键字
将方法内的参数改为 SplineFont *sf,char *filename,char *memory, int memlen, int em_size, int ascent,int stroked
如下图
继续执行
make install
出现上图文件表示成功
4、回到pdf2htmlEX 目录继续安装
配置环境变量
echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig' >> /etc/profile
执行安装
cmake .
sudo make
sudo make install
以下两条都执行
export LD_LIBRARY_PATH=/usr/local/lib
echo 'export LD_LIBRARY_PATH=/usr/local/lib' >> /etc/profile
最后校验是否安装成功
pdf2htmlEX -h
如上图表示成功
5、命令基础使用
具体参数说明在下面有
pdf2htmlEX --zoom 1.5 --dest-dir [转换后文件保存的目录,不存在则创建] [需要转换的文件]
eg: pdf2htmlEX --zoom 1.5 --dest-dir /usr/local/pdf2html/temp/ /usr/local/pdf2html/temp/测试转换.pdf
转换中
转换成功
常用参数说明
-f,--first-page <int> 需要转换的起始页 (默认: 1)
-l,--last-page <int> 需要转换的最后一页 (默认: 2147483647)
--zoom <fp> 缩放比例
--fit-width <fp> 适合宽度 <fp> 像素
--fit-height <fp> 适合高度 <fp> 像素
--use-cropbox <int> 使用剪切框 (default: 1)
--hdpi <fp> 图像水平分辨率 (default: 144)
--vdpi <fp> 图像垂直分辨率 (default: 144)
--embed <string> 指定哪些元素应该被嵌入到输出
--embed-css <int> 将CSS文件嵌入到输出中 (default: 1)
--embed-font <int> 将字体文件嵌入到输出中 (default: 1)
--embed-image <int> 将图片文件嵌入到输出中 (default: 1)
--embed-javascript <int> 将javascript文件嵌入到输出中 (default: 1)
--embed-outline <int> 将链接嵌入到输出中 (default: 1)
--split-pages <int> 将页面分割为单独的文件 (default: 0)
--dest-dir <string> 指定目标目录 (default: ".")
--css-filename <string> 生成的css文件的文件名 (default: "")
--page-filename <string> 分割的网页名称 (default:"")
--outline-filename <string> 生成的链接文件名称 (default:"")
--process-nontext <int> 渲染图行,文字除外 (default: 1)
--process-outline <int> 在html中显示链接 (default: 1)
--printing <int> 支持打印 (default: 1)
--fallback <int> 在备用模式下输出 (default: 0)
--embed-external-font <int> 嵌入局部匹配的外部字体 (default: 1)
--font-format <string> 嵌入的字体文件后缀 (ttf,otf,woff,svg) (default: "woff")
--decompose-ligature <int> 分解连字-> fi (default:0)
--auto-hint <int> 使用fontforge的autohint上的字体时不提示 (default: 0)
--external-hint-tool <string> 字体外部提示工具 (overrides --auto-hint) (default: "")
--stretch-narrow-glyph <int> 伸展狭窄的字形,而不是填充 (default: 0)
--squeeze-wide-glyph <int> 收缩较宽的字形,而不是截断 (default: 1)
--override-fstype <int> clear the fstype bits in TTF/OTF fonts (default:0)
--process-type3 <int> convert Type 3 fonts for web (experimental) (default: 0)
--heps <fp> 合并文本的水平临界值,单位:像素(default: 1)
--veps <fp> vertical threshold for merging text, in pixels (default: 1)
--space-threshold <fp> 断字临界值 (临界值 * em) (default:0.125)
--font-size-multiplier <fp> 一个大于1的值增加渲染精度 (default: 4)
--space-as-offset <int> 把空格字符作为偏移量 (default: 0)
--tounicode <int> 如何处理ToUnicode的CMap (0=auto, 1=force,-1=ignore) (default: 0)
--optimize-text <int> 尽量减少用于文本的HTML元素的数目 (default: 0)
--bg-format <string> 指定背景图像格式 (default: "png")
-o,--owner-password <string> 所有者密码 (为了加密文件)
-u,--user-password <string> 用户密码 (为了加密文件)
--no-drm <int> 覆盖文档的 DRM 设置 (default: 0)
--clean-tmp <int> 转换后删除临时文件 (default: 1)
--data-dir <string> 指定的数据目录 (default: ".\share\pdf2htmlEX")
--debug <int> 打印调试信息 (default: 0)
-v,--version 打印版权和版本信息
-h,--help 打印使用帮助信息
6、java调用方法
public static String pdfTohtml(File pdfTempFile){
String absolutePath = pdfTempFile.getAbsolutePath();
//需要执行的指令
String instruct = String.format("pdf2htmlEX --zoom 1.5 --dest-dir %s %s"
,absolutePath.replace(absolutePath.substring(absolutePath.lastIndexOf("/")),"")
,absolutePath);
// 创建ProcessBuilder对象,并设置Shell脚本文件作为参数
ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash","-c", instruct);
int exitCode = 0;
try {
// 启动Shell进程执行脚本
Process process = processBuilder.start();
// 等待命令执行完成
exitCode = process.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
if (exitCode==0){
log.info("Pdf:{} 转换成功" ,absolutePath);
}else {
throw new BusinessException("pdf转换html失败");
}
//转化成功后返回文件路径
return absolutePath.replace(FileUtil.extName(absolutePath), OfficeConstants.OFFICE_HTML);
}