使用html2canvas和jsPDF导出pdf文件、把pdf文件传给后端

需求:前端获取dom节点生成pdf文件,然后将文件传递给后端。

1、引入插件

javascript 复制代码
import html2canvas from "html2canvas";
import jsPDF from 'jspdf'

2、前端导出pdf

javascript 复制代码
// 获取HTML元素
const element = document.getElementById("aswerDom");
const options = {
  dpi: 192,  //dpi属性的值为192,表示图像的分辨率
  scale: 2, //scale属性的值为2,表示图像的缩放比例。
  backgroundColor: "#ffffff",  //backgroundColor属性的值为"#ffffff",表示图像的背景颜色。
  useCORS: true,// 【重要】开启跨域配置
  allowTaint: true,// 允许跨域图片
};
// 将元素转换为canvas对象
html2canvas(element, options).then((canvas) => {
  let contentWidth = canvas.width;   //获取Canvas(上面元素id 'aswerDom')对象的宽度
  let contentHeight = canvas.height; //获取Canvas(上面元素id 'aswerDom')对象的高度
  // 创建jsPDF对象
  const pdf = new jsPDF('1', 'pt', [contentWidth, contentHeight]); //创建一个新的PDF对象,参数包括页面格式('1'表示A4纸张)、单位('pt')和页面尺寸([contentWidth, contentHeight])
  let pageData = canvas.toDataURL('image/jpeg', 1.0);  //将Canvas对象转换为JPEG格式的数据,并将其存储在pageData变量中。1.0表示图片质量
  console.log(pageData)
  pdf.addImage(pageData, 'JPEG', 0, 0, contentWidth, contentHeight);  //将JPEG格式的图片添加到PDF文件中,图片的左上角坐标为(0, 0),宽度为contentWidth,高度为contentHeight
  pdf.save('问卷统计分析报告' + new Date().getTime() +'.pdf');
});

效果如图:

但是需求是不在本地导出,而是把导出的内容传递给后端,所以需要删掉 pdf.save('问卷统计分析报告' + new Date().getTime() +'.pdf');

javascript 复制代码
......
pdf.addImage(pageData, 'JPEG', 0, 0, contentWidth, contentHeight);  //将JPEG格式的图片添加到PDF文件中,图片的左上角坐标为(0, 0),宽度为contentWidth,高度为contentHeight
//pdf.save('问卷统计分析报告' + new Date().getTime() +'.pdf');

const pdfBlob = pdf.output('blob');
const formData = new FormData();
formData.append('file', pdfBlob, '问卷统计分析报告' + new Date().getTime() +'.pdf');
formData.append('projectid', props.projectId);
formData.append('projectRlid',selectedQuestionnaires.value[0])
formData.append('projectRlFileType','questionnaire')

// 上传文件
ProjectOperationEvaluationApi.uploadProjectFile(formData).then(res => {
    btnLoading.value = false
    if (res.code == '00000') {
      message.success('问卷关联成功')
      emit('confirm', selectedQuestionnaires.value)
    } else {
        message.error('文件上传失败')
    }
}).catch((error) => {
    btnLoading.value = false
    console.error('文件上传失败:', error)
    message.error('文件上传失败')
})
});

在流程结束时,后端统一导出所有文件:

至此,需求完成!

相关推荐
SamChan905 小时前
PDF 翻译后 1,250 变成 1.250,是错了吗?用 Python 核对数字格式
python·pdf·ocr·数据校验·文档翻译
开开心心就好8 小时前
打印机卡住打不了?一键清理卡死打印队列
服务器·开发语言·算法·pdf·ocr·idea·visual studio code
打工仔折腾 AI1 天前
在线PDF工具隐私焦虑?把BentoPDF部署到极空间NAS本地处理
人工智能·后端·python·pdf·ai agent 实战
霸道流氓气质1 天前
AI 简历制作平台:结构化输出解析、多模板渲染与 PDF 导出的 Vue3 + Spring AI 全栈实战
人工智能·spring·pdf
开开心心_Every1 天前
黄金价格软件国内外价格实时监控超方便
运维·服务器·游戏·智能手机·pdf·lua·perl
JasonSJX1 天前
DRM-X 5.0 PDF 保护更新:Windows 与 Mac 打印保留用户水印,ZJGet iOS 版支持 PDF 阅读
macos·pdf
shmily麻瓜小菜鸡2 天前
前端实现图片与PDF文字识别敏感信息打码方案
前端·pdf·状态模式
ComPDFKit2 天前
PDF 涂黑后还能复制?用 ComPDF 检查敏感文字是否真正删除
pdf
飞塔老梅子2 天前
21. 按页数或章节分割大PDF文件 ❀ 老梅子学AI
pdf·分割·basic·pdfsam·裁切
开开心心就好2 天前
文件关联被破坏怎么修?免费工具一键修复
java·服务器·开发语言·pdf·ocr·启发式算法·宽度优先