近日,遇到一个需求,要将 word 文档转化为 pdf 文档,并且能在 IE 浏览器、火狐浏览器、谷歌浏览器等主流浏览器上展示 pdf 内容。
分析:目前在线预览 word 文档用的是卓正的 pageoffice 控件,只需要将这份 word 文档转成 pdf ,再展示在浏览器即可。
一、将 word 文件转化成 pdf 文件
这个需求,实现的方案有很多,之前也使用过开源的工具进行转化,比如 openOffice、libreOffice 。他们的好处是提供免费的接口,但是弊端也很明显,那就是需要在服务器安装软件。鉴于项目的拓展和实施现场的增加,决定换一种配置更加简单的方式来实现需求。
在项目中,引入 aspose.words.jar ,然后只需要简单的几行代码,便可实现 word 文件转化为 pdf 文件的功能:
package com.cdw.master;
import java.io.File;
import com.aspose.words.Document;
public class WordToPdf {
public static void main(String[] args) {
try {
// doc路径
Document document = new Document("C:\\Users\\Administrator\\Desktop\\de115dc0dfc34e1da9a4d8e0b6b3cbd2.doc");
// pdf路径
File outputFile = new File("C:\\Users\\Administrator\\Desktop\\java实现word转pdf文件.pdf");
// 操作文档保存
document.save(outputFile.getAbsolutePath(), com.aspose.words.SaveFormat.PDF);
} catch (Exception e) {
e.printStackTrace();
}
}
}
而后,只需要将生成的 pdf 文件路径存入数据库,转化的简单需求就完成了。
注意:
linux 服务器下如果出现中文乱码,那可能是服务器缺少中文字体,安装中文字体就可以解决。
安装字体的方法如下:
- 查看系统支持的字体
fc-list- 查看系统支持的中文字体
fc-list :lang=zh- 创建字体目录(需要root权限,linux系统默认的字体存放路径为/usr/share/fonts,没有可自行创建)
cd /usr/share/fontsmkdir windows- cp字体文件(将需要新增的字体文件拷贝到指定目录中)
cd windows cp ~/fonts/* ./- 目录和字体文件设置为所有用户可见
chmod 755 …/windows chmod 755 ./*- 应用字体
mkfontscale (如果提示 mkfontscale: command not found,需自行安装 # yum install mkfontscale )
mkfontdirfc-cache -fv (如果提示 fc-cache: command not found,则需要安装# yum install fontconfig )- 再次查看系统支持的字体
fc-list
二、在浏览器直接打开 pdf 文件
这个需求,原本的实现方案是,谷歌、火狐等现代浏览器,可以直接打开 pdf 文件,不做处理,但是 IE 浏览器打开 pdf 文件会显示下载,这时候,需要安装 Adobe_Reader 软件,然后在 IE 浏览器的加载项中,启用 Adobe PDF Reader。
这样的实现方式对用户来说需要安装软件,不够友好,于是采用新的方案,引入 pdf.js 来实现 pdf 预览。
官网:http://mozilla.github.io/pdf.js/
源码地址:https://github.com/mozilla/pdf.js
下载后,文件目录如下:
其中代表的含义如下:
├── LICENSE
├── build/
│ ├── pdf.js - 显示层
│ └── pdf.worker.js - 核心层
└── web/
├── cmaps/ - 字符映射(由核心要求)
├── compressed.tracemonkey-pldi-09.pdf - 测试 pdf
├── debugger.js - 有帮助的PDF调试功能
├── images/ - 观看者和注释图标的图像
├── l10n.js - 汉化
├── locale/ - 翻译文件
├── viewer.css - viewer 页面样式
├── viewer.html - viewer 页面
└── viewer.js - viewer js
使用的方法也很简单,只需要在页面调用即可,下面给出演示代码:
<script type="text/javascript">
var pdfFilePath = '${pdfFilePath}';//后台传过来的 pdf 文件路径
$(function() {
showPdf(pdfFilePath);
});
function showPdf(pdfFilePath){
document.getElementsByTagName('iframe')[0].src = "${resource}/pdfjs/web/viewer.html?file="+encodeURIComponent("${root}/writPrint/download.do?path=" + pdfFilePath + "&fileType=pdf");
document.getElementsByTagName('iframe')[0].height = document.documentElement.clientHeight-10;
}
/**
* 页面变化调整高度
*/
window.onresize = function(){
var fm = document.getElementsByTagName("iframe")[0];
fm.height = window.document.documentElement.clientHeight-10;
}
</script>
<div style="margin:10px auto;">
<iframe src="" width="100%" frameborder="0"></iframe>
</div>
最终效果:
附录
aspose.words.jar 三个破解版的 jar 包:
pdf.js 调试可用的文件:
sq62909746bdc34 2 月前