收藏
回答

小程序怎么实现word转PDF?

请教各位大神,小程序怎么在云函数中实现word转pdf?

我尝试用了libreoffice-convert这个库,但是总是有问题,又不知道问题在哪里,把代码贴出来,请各位指教。

或者还有没有其他的方法啊?

感谢各位指点!

// 云函数入口文件
const cloud = require('wx-server-sdk')
const {
    createReport
} = require('docx-templates')
const fs = require('fs')
const path = require('path')
const dayjs = require('dayjs')
const axios = require("axios")
const libre = require('libreoffice-convert')
libre.convertAsync = require('util').promisify(libre.convert)




cloud.init({
    env'cloud1-7g1pdoii23b288bf'
})


// 云函数入口函数
exports.main = async (event, context) => {
    console.log(event)
    const res = await cloud.downloadFile({
        fileID: event.downloadFileID,
    })
    const template = res.fileContent
    console.log('当前下载读取文件成功')
    //导入当事人签字图片并转码
    let signBuffer1 = await axios({
        method'get',
        url: event.signPathLitigantURL,
        responseType'arraybuffer',
      })
    const signPathLitigant64 = new Buffer.from(signBuffer1.data, 'binary').toString('base64')
    //导入执法人员签字图片并转码
    let signBuffer2 = await axios({
        method'get',
        url: event.signPathOfficersURL,
        responseType'arraybuffer',
        headers: { "Content-Type""*" }
      })
    const signPathOfficer64 = new Buffer.from(signBuffer2.data, 'binary').toString('base64')
    //导入印章图片并转码
    let signBuffer3 = await axios({
        method'get',
        url: event.sealURL,
        responseType'arraybuffer',
        headers: { "Content-Type""*" }
      })
    const seal64 = new Buffer.from(signBuffer3.data, 'binary').toString('base64')

    //开始编译插入
    const buffer = await createReport({
        template,
        data: {
            //变量
            
        },
        additionalJsContext: {
            getMapPicture1async () => {
                const res = signPathLitigant64;
                return {
                width3,
                height1.6875,
                data: res,
                extension'.png'
                };
            },
            getMapPicture2async () => {
                const res = signPathOfficer64;
                return {
                width3,
                height1.6875,
                data: res,
                extension'.png'
                };
            },
            getMapPicture3async () => {
                const res = seal64;
                return {
                width4,
                height4,
                data: res,
                extension'.png'
                };
            },
        },
        cmdDelimiter: ['+''+']   //以{}作为变量分隔符
        
    })
    //开始转换PDF
    const ext = '.pdf'
    const pdfBuf = await libre.convertAsync(buffer, ext, undefined);
    console.log('pdfBuf:',pdfBuf)
    const preDir = dayjs().format("YYYYMMDD");//日期
    console.log('当前的日期是',preDir)
    const stringRandom = require('string-random')
    const randfilename = stringRandom(32)//随机文件名
    const cloudPath = `${preDir}/${randfilename}.pdf`//文件
    console.log('当前云路径是',cloudPath)
    return await cloud.uploadFile({
        cloudPath: cloudPath,
        fileContent: pdfBuf
    })



    
}
回答关注问题邀请回答
收藏

2 个回答

  • 陈昊东
    陈昊东
    2022-11-22

    请问一下你的Buffer.from中的“Buffer”是从引入的什么npm包呢?我这边一直报错:Buffer is not defined。

    2022-11-22
    有用
    回复 1
    • 万垒之鹰
      万垒之鹰
      2022-11-23
      你说的是哪一个buffer?我现在重新使用了一个库,用的“office-to-pdf”,现在本地调试成功生成了PDF,但是真机调试又失败,唉,心力交瘁
      2022-11-23
      回复
  • Mr.Zhao
    Mr.Zhao
    2022-11-21

    先不运行,你说的问题是什么问题 报错?

    2022-11-21
    有用
    回复 17
    • 万垒之鹰
      万垒之鹰
      2022-11-21
      云函数本地调试显示的问题是“The ”path“ argument must be of type string. Received undefined“
      2022-11-21
      回复
    • Mr.Zhao
      Mr.Zhao
      2022-11-21回复万垒之鹰
      截个图
      2022-11-21
      回复
    • 万垒之鹰
      万垒之鹰
      2022-11-21
      2022-11-21
      回复
    • Mr.Zhao
      Mr.Zhao
      2022-11-21回复万垒之鹰
      这个打印都没执行  直接报错了吗
      2022-11-21
      回复
    • 万垒之鹰
      万垒之鹰
      2022-11-21
      下载读取文件这一步执行成功了的
      2022-11-21
      回复
    查看更多(12)
登录 后发表内容