近日,遇到一个需求,要将 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。

word文档转pdf并在任意浏览器预览打印一体化方案_在线打开pdf这样的实现方式对用户来说需要安装软件,不够友好,于是采用新的方案,引入 pdf.js 来实现 pdf 预览。


官网:http://mozilla.github.io/pdf.js/
源码地址:https://github.com/mozilla/pdf.js


下载后,文件目录如下:

word文档转pdf并在任意浏览器预览打印一体化方案_在线打开pdf_02

其中代表的含义如下:


├── 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>

最终效果:

word文档转pdf并在任意浏览器预览打印一体化方案_jar_03

附录

aspose.words.jar 三个破解版的 jar 包:

点击下载 aspose.words.jar​

pdf.js 调试可用的文件:

点击下载 调试可用 pdf.js​