最近遇到个需求,客户要将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为PDFfunction 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、看到这里了,点个赞呗,坑都是我一点点填的,很辛苦的呢~