最近遇到个需求,客户要将word文档上传到服务器并显示出来,保持格式不变。
思路:先将word转pdf,然后再转成图片显示
为啥不直接将word转成html或者直接转成图片呢,因为Word转html会丢失样式,不直接转成图片是因为没找到合适点插件。。。(找到的老铁可以留言告诉我一下)
系统:centos7
1、安装 libreoffice.x86_64,这个是免费的办公套件,官网:主页 | LibreOffice 简体中文官方网站 - 自由免费的办公套件
yum install libreoffice.x86_64
2、安装word转pdf插件:office-to-pdf
cnpm install office-to-pdf
3、写代码转pdf
var toPdf = require("office-to-pdf");
var fs = require('fs');
// 转换word为PDF
function wordToPdf(){
let wordFile = __dirname + "/test.docx";
return fs.readFile(wordFile, function(err, result){
if(err){
console.log(err);
}else{
toPdf(result).then(
(pdfBuffer) => {
fs.writeFileSync("./test.pdf", pdfBuffer);
console.log('成功生成PDF文件')
}, (err) => {
console.log(err);
}
);
}
});
}
wordToPdf()
以上如果能成功运行并生成了pdf文件,则进行下一步,如果pdf中文变成方格或者乱码,试试将windows的字体文件导入centos里
4、安装pdf转图片的组件
yum install ImageMagick ghostscript poppler poppler-utils
5、安装node的pdf-image插件,具体使用参考:https://www.npmjs.com/package/pdf-image
cnpm install pdf-image
6、写代码将pdf转成图片
var PDFImage = require("pdf-image").PDFImage;
var pdfImage = new PDFImage("/www/test/test.pdf");
pdfImage.convertFile().then(function (imagePaths) {
// [ /tmp/slide-0.png, /tmp/slide-1.png ]
console.log(imagePaths)
},err=>{
console.log(err)
});
7、结束。imagePaths即得到的所有图片,然后就可以为所欲为了
8、看到这里了,点个赞呗,坑都是我一点点填的,很辛苦的呢~