js 生成pdf 并上传文件

js 生成pdf 并上传文件

使用 JsPDF + html2Canvas 代码直接使用 注意注释

复制代码
import JsPDF from 'jspdf'
import html2Canvas from 'html2canvas'
// 上传文件的方法
import { handleUploadImage } from '@/utils/uploadQuillEdit'

downPDF() {
	//	 要打印元素的id
      const cloneDom = document.getElementById('rentArea').cloneNode(true)
      document.getElementsByTagName('body')[0].appendChild(cloneDom)
      html2Canvas(
        cloneDom,
        { allowTaint: true }
      ).then((canvas) => {
        let contentWidth = canvas.width
        let contentHeight = canvas.height
        let pageHeight = contentWidth / 592.28 * 841.89
        let leftHeight = contentHeight
        let position = 0
        let imgWidth = 595.28
        let imgHeight = 592.28 / contentWidth * contentHeight
        let pageData = canvas.toDataURL('image/jpeg', 1.0)
        let PDF = new JsPDF('', 'pt', 'a4')
        if (leftHeight < pageHeight) {
          PDF.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight)
        } else {
          while (leftHeight > 0) {
            PDF.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
            leftHeight -= pageHeight
            position -= 841.89
            if (leftHeight > 0) {
              PDF.addPage()
            }
          }
        }

        // 将 PDF 转换为 Blob 对象
        const pdfBlob = PDF.output('blob')
        // file对象
        const pdfFile = new File([pdfBlob], `面积、期限及租金${new Date().getTime()}.pdf`, {
          type: 'application/pdf',
          lastModified: new Date().getTime()
        })
		
		//上传文件
        handleUploadImage(pdfFile).then(data => {
          console.log(data)
        })
		
		//这里是直接保存pdf
        // PDF.save(`${this.dataForm.customerNameShow}项目智能分仓方案书(${timeToTime(new Date(), false)}).pdf`)
        document.getElementsByTagName('body')[0].removeChild(cloneDom)
      })
    }
相关推荐
GDAL2 小时前
Mapbox GL JS 核心表达式:`==` 相等判断完全教程
javascript·mapbox
二两锅巴2 小时前
📺 无需Electron!前端实现多显示器浏览器窗口精准控制与通信
前端
炸土豆2 小时前
防抖节流里的this传递
前端·javascript
用户4099322502122 小时前
Vue3中动态样式数组的后项覆盖规则如何与计算属性结合实现复杂状态样式管理?
前端·ai编程·trae
山璞2 小时前
Flutter3.32 中使用 webview4.13 与 vue3 项目的 h5 页面通信,以及如何调试
前端·flutter
努力早日退休2 小时前
Antd Image标签父元素会比图片本身高几个像素的原因
前端
林希_Rachel_傻希希2 小时前
手写Promise--教学版本
前端·javascript·面试
ETA83 小时前
`console.log([1,2,3].map(parseInt))` 深入理解 JavaScript 中的高阶函数与类型机制
前端·javascript
呼叫69453 小时前
图片列表滚动掉帧的原因分析与解决方案
前端
狗哥哥3 小时前
AI 驱动前端自动化测试:一套能落地、能协作、能持续的工程化方案
前端·测试