微信小程序生成pdf文件

avatar
作者
筋斗云
阅读量:0

环境准备:

        我这边采用的是express做后端语言操作,如果有不同请另外查阅pdfKit操作方式。

导入依赖版本,引入包资源

         // 生成pdf文件         const doc = new PDFDocument();         doc.font('/app/utils/微软雅黑.ttf')         // const customPDFFont = doc.registerFont('medium','../utils/源柔黑体-Medium.ttf')         const uuid = Date.now();         const pdfStream = fs.createWriteStream(`output${uuid}.pdf`)         doc.pipe(pdfStream);//关联pdfStream流           doc.fontSize(14).text('我的兴趣类型特点和偏好',{align:'left'})         doc.moveDown();// 移动到下一个段落          // 添加第一个类型和文本         doc.fontSize(12).text(typeOne,{align:'left'});         doc.text(txt1,{align:'left'});         doc.moveDown(); // 移动到下一个段落          // 监听pdfStream完成后的方法         pdfStream.on('finish',()=>{             // 可以在这里加入oss对象存储之类的逻辑...              // 读取自己写好的pdf文件             fs.createReadStream(`output${uuid}.pdf`)         })          doc.end();

我这边使用了cos对象存储的API

pdfStream.on('finish',()=>{

          // 监听是否已经创建完毕了

          const params = {

            Bucket: '存储桶',

            Region: '上传域',

            Key: `文件名`,

            Body: fs.createReadStream(`output${uuid}.pdf`)

          }

         

            cos.putObject(params, (err,data)=>{

              if (err) {

                console.error(err);

              } else {

                console.log('文件上传成功:', data);

                // 删除临时 PDF 文件

                fs.unlink(`output${uuid}.pdf`, (err) => {

                    if (err) {

                        console.error('删除 PDF 出错:', err);

                    } else {

                        console.log('PDF 文件删除成功');

                    }

                });

                    res.send({

                      filePath: `output${uuid}.pdf`,

                      code: 200

                    })

               

              }

            });

        });

大家可以借鉴一下,由于微信小程序不自带导出pdf功能,以此需自己定义导出pdf功能。

我的逻辑是:

1、小程序点击导出

2、后端根据小程序发送的数据找到需要导出的文件数据

3、后端生成pdf文件写入数据

4、将pdf文件上传到oss,返回下载路径给微信小程序

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!