这两天在做项目时,需要用到pdf2htmlEX将pdf文件转成html供移动端用户浏览,以及使用ffmpeg截取视频封面图,这两个库安装下来大概花去了一天多时间,因为之前没接触过。这里看pdf转成html的示例:
Runtime rt = Runtime.getRuntime(); StringBuilder command = new StringBuilder(); command.append("/usr/local/bin/pdf2htmlEX").append(" "); if(destDir!=null&&!"".equals(destDir.trim()))//生成文件存放位置,需要替换文件路径中的空格 command.append("--dest-dir ").append(destDir.replace(" ","\" \"")).append(" "); command.append("--optimize-text 1 ");//尽量减少用于文本的HTML元素的数目 (default: 0) command.append("--process-outline 0 ");//html中显示链接:0——false,1——true command.append("--font-format woff ");//嵌入html中的字体后缀(default ttf) ttf,otf,woff,svg command.append(pdfFile.replace(" ","\" \"")).append(" ");//需要替换文件路径中的空格 if(htmlFileName!=null&&!"".equals(htmlFileName.trim())){ command.append(htmlFileName); if(htmlFileName.indexOf(".html")==-1) command.append(".html"); }
这段代码是在linux上运行的,windows的写法差不多,这里只说centos下的。在执行这段代码后,控制台打印的语句是:
pdf2htmlEX --dest-dir /usr/local/tools/tomcat_1/webapps/ROOT//file/upload/backend/media --optimize-text 1 --process-outline 0 --font-format woff /usr/local/tools/tomcat_1/webapps/ROOT//file/upload/backend/media/054cc554-02ba-43e8-a78a-599ff0aafeb6.pdf 054cc554-02ba-43e8-a78a-599ff0aafeb6.html
但是却报了这样的错误:Caused by: java.io.IOException: error=2,No such file or directory
说是pdf2htmlEX不是文件或目录,但是在执行pdf2htmlEX -v的时候,打印了:
按道理是ok的啊,报错让人很郁闷。我尝试将
pdf2htmlEX --dest-dir /usr/local/tools/tomcat_1/webapps/ROOT//file/upload/backend/media --optimize-text 1 --process-outline 0 --font-format woff /usr/local/tools/tomcat_1/webapps/ROOT//file/upload/backend/media/054cc554-02ba-43e8-a78a-599ff0aafeb6.pdf 054cc554-02ba-43e8-a78a-599ff0aafeb6.html
这段命令拷贝到命令行下运行,结果:
成功运行,再看看HTML文件
确实也生成了!
那么问题来了,为什么命令行直接运行很ok,java调用执行的却不ok?
这里给出解决方法:
第一步:
export LD_LIBRARY_PATH=/usr/local/lib
sudo ldconfig
因为pdf2htmlEX安装成功后的位置在/usr/local/lib下;
第二步:
command.append("/usr/local/bin/pdf2htmlEX")
要写绝对路径!
这样子就解决了。