nodejs代码将word转成图片

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

要将图片写入到 Word 中,可以使用 `docxtemplater` 模块和 `officegen` 模块来实现。以下是一个使用 Node.js 将图片写入 Word 文档的示例代码: ```javascript const fs = require('fs'); const Docxtemplater = require('docxtemplater'); const ImageModule = require('docxtemplater-image-module'); const officegen = require('officegen'); // 读取 Word 模板文件 const content = fs.readFileSync('template.docx', 'binary'); // 创建 Docxtemplater 实例 const doc = new Docxtemplater(); // 加载图片模块 const imageModule = new ImageModule({ centered: false, getImage: (tagValue, tagName) => { // 读取图片文件 const img = fs.readFileSync(tagValue); // 创建 officegen 模块的 image 对象 const image = officegen('png'); image.setData(img); return image; }, getSize: (img, tagValue, tagName) => { return [200, 200]; }, getImageName: (tagValue, tagName) => { return 'My image'; }, }); // 绑定图片模块到 Docxtemplater 实例 doc.attachModule(imageModule); // 编译模板 doc.loadZip(content); doc.compile(); // 渲染数据 const data = { image: 'image.png', }; const result = doc.render(data); // 将渲染结果写入 Word 文件 fs.writeFileSync('output.docx', result); ``` 在上述代码中,我们首先使用 `fs` 模块读取 Word 模板文件,然后创建一个 `Docxtemplater` 实例,并使用 `ImageModule` 模块来加载图片。接着,我们将图片模块绑定到 `Docxtemplater` 实例中,并编译模板。最后,我们使用 `render` 方法渲染数据,并将渲染结果写入 Word 文件中。 需要注意的是,上述代码中使用的图片格式为 PNG 格式,如果需要使用其他格式的图片,需要相应地修改代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灿宝宝lo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值