项目使用背景

内部使用的文件管理系统,实现doc,docx文件的在线预览功能;整体功能类似于知网的功能缩减版:文件的管理,在线预览,查重功能。其中还使用到pdf2htmlEX实现pdf转html,最终实现文章重复部分标红操作。

-- 同OpenOffice4使用篇

优点:

格式完美转换,样式一模一样,解析的html标签还算工整。

缺点:

Linux安装太麻烦了(但是我用docker,一切环境都不是事儿)

格式和html标签没法自定义,html的后续操作难度加大

插件的安装方法

查看作者GitHub里面有最原始的方法,也是最好的。

linux安装起来比较的麻烦,每个版本的系统可能都不一样,有些没办法装上。

最简单的方法就是使用安装好的docker镜像,把自己的开发环境集成上去就ok了。

e752dfeb628f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

2019329-195816.jpg

docker search pdf2htmlEX

找了个熟悉系统的版本,centos。项目打包上句就ok了

插件使用方法

插件是以调用命令执行的,所以只要能掉命令就行

java采用 Runtime.getRuntime() 来运行

以下是java代码示例

import org.apache.commons.lang3.StringUtils;

import java.io.File;

/**

* pdf转html工具类

*

* @author 1nchaos

* @date 2019/3/7 13:20

*/

public class Pdf2HtmlUtil {

/**

* 调用pdf2htmlEX将pdf文件转换为html文件

*

* @param exeFilePath pdf2htmlEX.exe文件路径

* @param pdfFile pdf文件绝对路径

* @param destDir 生成的html文件存放路径

* @param htmlFileName 生成的html文件名称

* @return

*/

public static boolean pdf2html(String exeFilePath, String pdfFile, String htmlFileName) {

if (StringUtils.isBlank(exeFilePath) && StringUtils.isBlank(pdfFile)

&& StringUtils.isBlank(htmlFileName)) {

System.out.println("传递的参数有误!");

return false;

}

Runtime rt = Runtime.getRuntime();

StringBuilder command = new StringBuilder();

command.append(exeFilePath).append(" ");

// 生成文件存放位置,需要替换文件路径中的空格

// if (destDir != null && !"".equals(destDir.trim())) {

// command.append("--dest-dir ").append(destDir.replace(" ", "\" \"")).append(" ");

// }

// 尽量减少用于文本的HTML元素的数目 (default: 0)

command.append("--optimize-text 1 ");

command.append("--zoom 1.4 ");

// html中显示链接:0——false,1——true

command.append("--process-outline 0 ");

// 嵌入html中的字体后缀(default ttf)

command.append("--font-format woff ");

// ttf,otf,woff,svg 需要替换文件路径中的空格

command.append(pdfFile.replace(" ", "")).append(" ");

if (!"".equals(htmlFileName.trim())) {

command.append(htmlFileName.replaceAll(" ", ""));

if (!htmlFileName.contains(".html")) {

command.append(".html");

}

}

if (streamPrintInfo(rt, command)) return true;

return false;

}

/**

* 调用pdf2htmlEX将pdf文件转换为html文件

*

* @param exeFilePath pdf2htmlEX.exe文件路径

* @param pdfFile pdf文件绝对路径

* @param destDir 生成的html文件存放路径

* @param htmlFileName 生成的html文件名称

* @return

*/

public static boolean pdf2html(String exeFilePath, String pdfFile, String htmlFileName, String destDir) {

if (StringUtils.isBlank(exeFilePath) && StringUtils.isBlank(pdfFile)

&& StringUtils.isBlank(htmlFileName)) {

System.out.println("传递的参数有误!");

return false;

}

Runtime rt = Runtime.getRuntime();

StringBuilder command = new StringBuilder();

command.append(exeFilePath).append(" ");

// 生成文件存放位置,需要替换文件路径中的空格

if (destDir != null && !"".equals(destDir.trim())) {

command.append("--dest-dir ").append(destDir.replace(" ", "\" \"")).append(" ");

}

// 尽量减少用于文本的HTML元素的数目 (default: 0)

command.append("--optimize-text 1 ");

command.append("--zoom 1.4 ");

// html中显示链接:0——false,1——true

command.append("--process-outline 0 ");

// 嵌入html中的字体后缀(default ttf)

command.append("--font-format woff ");

// ttf,otf,woff,svg 需要替换文件路径中的空格

command.append(pdfFile.replace(" ", "\" \"")).append(" ");

if (!"".equals(htmlFileName.trim())) {

command.append(htmlFileName);

if (!htmlFileName.contains(".html")) {

command.append(".html");

}

}

if (streamPrintInfo(rt, command)) return true;

return false;

}

/**

* @param pdfFile

* @param destDir 生成的html文件存放路径

* @return

*/

public static boolean pdf2htmlLinux(String pdfFile, String destDir) {

if (StringUtils.isBlank(pdfFile) && StringUtils.isBlank(destDir)) {

System.out.println("传递的参数有误!");

return false;

}

Runtime rt = Runtime.getRuntime();

StringBuilder command = new StringBuilder();

command.append("pdf2htmlEX").append(" ");

// 尽量减少用于文本的HTML元素的数目 (default: 0)

command.append("--optimize-text 1 ");

command.append("--zoom 1.4 ");

// html中显示链接:0——false,1——true

command.append("--process-outline 0 ");

// 嵌入html中的字体后缀(default ttf)

command.append("--font-format woff ");

// ttf,otf,woff,svg 需要替换文件路径中的空格

command.append(pdfFile.replace(" ", "\" \"")).append(" ");

// 生成文件存放位置,需要替换文件路径中的空格

if (destDir != null && !"".equals(destDir.trim())) {

command.append("--dest-dir ").append(destDir.replace(" ", "\" \"")).append(" ");

}

return streamPrintInfo(rt, command);

}

public static boolean pdf2htmlLinux(String pdfFile, String htmlFileName, String destDir) {

if (StringUtils.isBlank(pdfFile) && StringUtils.isBlank(htmlFileName)) {

System.out.println("传递的参数有误!");

return false;

}

Runtime rt = Runtime.getRuntime();

StringBuilder command = new StringBuilder();

command.append("pdf2htmlEX").append(" ");

// 生成文件存放位置,需要替换文件路径中的空格

if (destDir != null && !"".equals(destDir.trim()))

command.append("--dest-dir ").append(destDir.replace(" ", "\" \"")).append(" ");

// 尽量减少用于文本的HTML元素的数目 (default: 0)

command.append("--optimize-text 1 ");

command.append("--zoom 1.4 ");

// html中显示链接:0——false,1——true

command.append("--process-outline 0 ");

// 嵌入html中的字体后缀(default ttf)

command.append("--font-format woff ");

// ttf,otf,woff,svg 需要替换文件路径中的空格

command.append(pdfFile.replace(" ", "\" \"")).append(" ");

if (!"".equals(htmlFileName.trim())) {

command.append(htmlFileName);

if (!htmlFileName.contains(".html")) {

command.append(".html");

}

}

if (streamPrintInfo(rt, command)) return true;

return false;

}

private static boolean streamPrintInfo(Runtime rt, StringBuilder command) {

try {

System.out.println("Command:" + command.toString());

Process p = rt.exec(command.toString());

StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(), "ERROR");

// 开启屏幕标准错误流

errorGobbler.start();

StreamGobbler outGobbler = new StreamGobbler(p.getInputStream(), "STDOUT");

// 开启屏幕标准输出流

outGobbler.start();

int w = p.waitFor();

int v = p.exitValue();

if (w == 0 && v == 0) {

return true;

}

} catch (Exception e) {

e.printStackTrace();

}

return false;

}

}

以下是命令参数

用法: pdf2htmlEX [options] []

-f,--first-page 需要转换的起始页 (默认: 1)

-l,--last-page 需要转换的最后一页 (默认: 2147483647)

--zoom 缩放比例

--fit-width 适合宽度 像素

--fit-height 适合高度 像素

--use-cropbox 使用剪切框 (default: 1)

--hdpi 图像水平分辨率 (default: 144)

--vdpi 图像垂直分辨率 (default: 144)

--embed 指定哪些元素应该被嵌入到输出

--embed-css 将CSS文件嵌入到输出中 (default: 1)

--embed-font 将字体文件嵌入到输出中 (default: 1)

--embed-image 将图片文件嵌入到输出中 (default: 1)

--embed-javascript 将javascript文件嵌入到输出中 (default: 1)

--embed-outline 将链接嵌入到输出中 (default: 1)

--split-pages 将页面分割为单独的文件 (default: 0)

--dest-dir 指定目标目录 (default: ".")

--css-filename 生成的css文件的文件名 (default: "")

--page-filename 分割的网页名称 (default:"")

--outline-filename 生成的链接文件名称 (default:"")

--process-nontext 渲染图行,文字除外 (default: 1)

--process-outline 在html中显示链接 (default: 1)

--printing 支持打印 (default: 1)

--fallback 在备用模式下输出 (default: 0)

--embed-external-font 嵌入局部匹配的外部字体 (default: 1)

--font-format 嵌入的字体文件后缀 (ttf,otf,woff,svg) (default: "woff")

--decompose-ligature 分解连字-> fi (default:0)

--auto-hint 使用fontforge的autohint上的字体时不提示 (default: 0)

--external-hint-tool 字体外部提示工具 (overrides --auto-hint) (default: "")

--stretch-narrow-glyph 伸展狭窄的字形,而不是填充 (default: 0)

--squeeze-wide-glyph 收缩较宽的字形,而不是截断 (default: 1)

--override-fstype clear the fstype bits in TTF/OTF fonts (default:0)

--process-type3 convert Type 3 fonts for web (experimental) (default: 0)

--heps 合并文本的水平临界值,单位:像素(default: 1)

--veps vertical threshold for merging text, in pixels (default: 1)

--space-threshold 断字临界值 (临界值 * em) (default:0.125)

--font-size-multiplier 一个大于1的值增加渲染精度 (default: 4)

--space-as-offset 把空格字符作为偏移量 (default: 0)

--tounicode 如何处理ToUnicode的CMap (0=auto, 1=force,-1=ignore) (default: 0)

--optimize-text 尽量减少用于文本的HTML元素的数目 (default: 0)

--bg-format 指定背景图像格式 (default: "png")

-o,--owner-password 所有者密码 (为了加密文件)

-u,--user-password 用户密码 (为了加密文件)

--no-drm 覆盖文档的 DRM 设置 (default: 0)

--clean-tmp 转换后删除临时文件 (default: 1)

--data-dir 指定的数据目录 (default: ".\share\pdf2htmlEX")

--debug 打印调试信息 (default: 0)

-v,--version 打印版权和版本信息

-h,--help 打印使用帮助信息

最后感谢作者带来这么好的插件!!!完美转换

pdf2html java_pdf2HtmlEX的使用相关推荐

  1. html无损转换pdf,Pdf2html :高保真PDF至HTML转换

    高保真PDF至HTML转换 pdf2htmlEX介绍 传统pdf2html有两种: 一种相当于pdf2text加一些比较弱的格式,基本跟pdf2text也差不了多少 另一种是把所有渲染成图片然后嵌到一 ...

  2. php调用pdf2html,php html2pdf

    * 安装composer 运行html2pdf时,readme里面建议按照composer-setup.exe 安装过程中出现openssl的问题,在php.ini中开启相应extension即可, ...

  3. windows系统下的 pdf2html (pdf 转html)开源工具 pdf2htmlEX 使用方法

    pdf2htmlEX windows系统可执行版下载地址: http://soft.rubypdf.com/software/pdf2htmlex-windows-version 使用方法: 将需要转 ...

  4. c执行cmd pdf2swf_pdf2swf 和pdf2html 使用命令详解

    pdf2swf 将pdf文档转换为flash方式阅读,可以满足公式.图片的格式定义: pdf2htmlEX 将pdf文档转换为html方式阅读,有一下优点: 在HTML文件中精确显示原生文本 保持PD ...

  5. php word excel转pdf文件怎么打开,php office文件(word/excel/ppt)转pdf文件,pptpdf

    php office文件(word/excel/ppt)转pdf文件,pptpdf 把代码放到了github上,点击进入 前阶段有个项目用到了线上预览功能, 关于预览office文件实现核心就是,把o ...

  6. 修改Docker容器字符编码为-zh_CN.UTF-8中文字符集

    版本记录 2019.4.26日 第一版 问题描述 公司的java项目中使用了openoffice和pdf2html对文件进行格式转换,word,ppt,pdf文件都转换没有问题,唯独excel转换后显 ...

  7. python写表格_python写入表格

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! import xlwt #导入xlwt 库 book =xlwt.workboo ...

  8. WEB在线预览PDF

    这是我在博客园发表的第一篇文章.以后会陆续把在线预览其他格式文档的解决方案发表出来. 解决思路:把pdf转换成html显示. 在线预览pdf我暂时了解3种解决方案,欢迎大家补充. 方案一: 利用pdf ...

  9. java-pdf转word,java开发面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索hairyang001加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各 ...

最新文章

  1. javascript语法糖_语法糖和JavaScript糖尿病
  2. 清华硕士爆料:这些才是机器学习必备的数学基础
  3. ansible1.7.2源码安装教程
  4. iOS之深入解析类加载的底层原理:分类如何加载到类以及分类和类的配合使用
  5. mysql网页化_页面化操作数据库
  6. git 删除远程分支和本地分支
  7. android 自动挂断,[转]android 来电自动接听和自动挂断
  8. 2019下半年系统集成项目管理工程师上午真题
  9. 做空指控不成立 百度收购YY直播已基本完成
  10. 【软件项目管理】需求规格说明可以包括系统的运行环境
  11. Asp.Net IIS 管理类(全)
  12. 在Linux操作系统中,下载并安装软件
  13. shiro+springMVC整合文档及Demo
  14. deepin photoshop_Linux/Deepin 系统简单安装 Photoshop CS6 教程,附安装包
  15. JAVA反射机制Reflection详解
  16. linux无法解析域名
  17. Ubuntu 18.04 LTS 桌面版 WPS 安装字体
  18. 洛谷P5149 会议座位
  19. Win2008安装11g报错:orandce11.dll.dbl and orancds11.dll.dbl 文件找不到
  20. THE FOOL 【找规律】

热门文章

  1. 互联网“香饽饽”?数据挖掘或成热门行业
  2. LuceneElasticSeach
  3. VS2015 解决 “有太多的错误导致IntelliSense引擎无法正常工作,其中有些错误无法在编辑其中查看”问题
  4. 3DMax软件有什么方法调节摄像机
  5. 2021-05-29当微商怎么引流?微商如何利用闲鱼引流?
  6. 微软媒体服务器,Azure 媒体服务概述
  7. monkey自动化测试脚本
  8. 无状态编程, lambda 表达式中传入的局部变量,为什么需要是不可变的(final)
  9. 入行游戏建模,做场景建模师必备软件有哪些?有无发展前景
  10. uml的用例图中扩展关系与包含关系