Vue如何将网页转换成图片或PDF并上传

一.使用html2canvas获取页面元素并绘制成图片

htmlcanvas中文文档

npm install --save html2canvas

<template>
	<div>
		<button @click="uploadImg">上传</button>
		<div ref="yourDom">
			<!-- ...图片中页面内容 -->
			<img src="@/assets/logo/logo.png" alt="" />
		</div>
	</div>
</template>

import html2canvas from 'html2canvas';

	//base64转file
    base64ToFile(dataURL, filename) {
      let arr = dataURL?.split?.(',');
      let youType = arr[0].match(/:(.*?);/)[1];
      let bstr = atob(arr[1]),
        n = bstr.length,
        u8arr = new Uint8Array(n);
      while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
      }
      return new File([u8arr], filename + '.' + youType.split('/')[1], { type: youType });
    },
    
    //点击上传按钮
    uploadImg() {
      html2canvas(this.$refs.yourDom, {
        allowTaint: true, //是否允许不同源的图片污染画布
        useCORS: true, //是否尝试使用 CORS 从服务器加载图片
        scale: 2, //用于渲染的比例,默认为浏览器设备像素比率。
      }).then(canvas => {
        // canvas.toDataURL(type, encoderOptions) 是 JavaScript 中用于将 <canvas> 元素的内容转换为数据 URL 的方法
        // type:指定输出的图像类型,默认为 "image/png"。也可以是 "image/jpeg" 或 "image/webp" 等格式。
        // encoderOptions:用于指定图像编码质量或压缩级别的参数(取值范围为 0-1),仅适用于 "image/jpeg" 和 "image/webp" 格式。
        let imgBase64Url = canvas.toDataURL('image/jpeg', 1);
        let imgFile = this.base64ToFile(imgBase64Url, '图片名称');
        console.log('🚀 ~ canvasImg ~ imgFile:', imgFile);
        //你的上传接口方法
        //let formData = new FormData();
        //formData.append('avatarfile', imgFile);
        //uploadAvatar(formData).then(response => {
        //console.log(window.location.origin + process.env.VUE_APP_BASE_API + response.imgUrl);
        });
      });
    },

效果
在这里插入图片描述
在这里插入图片描述

二.使用jspdf生成pdf并将图片添加进去

jsPDF中文文档并找不到啥需要的东西
在这里插入图片描述

npm install jspdf --save
import jsPDF from 'jspdf';

将uploadImg方法中上传图片部分换为转换成pdf并上传

 //点击上传按钮
    uploadImg() {
      html2canvas(this.$refs.yourDom, {
        allowTaint: true, //是否允许不同源的图片污染画布
        useCORS: true, //是否尝试使用 CORS 从服务器加载图片
        scale: 2, //用于渲染的比例,默认为浏览器设备像素比率。
      }).then(canvas => {
        // canvas.toDataURL(type, encoderOptions) 是 JavaScript 中用于将 <canvas> 元素的内容转换为数据 URL 的方法
        // type:指定输出的图像类型,默认为 "image/png"。也可以是 "image/jpeg" 或 "image/webp" 等格式。
        // encoderOptions:用于指定图像编码质量或压缩级别的参数(取值范围为 0-1),仅适用于 "image/jpeg" 和 "image/webp" 格式。
        let imgBase64Url = canvas.toDataURL('image/jpeg', 1);
        this.imgToPdf(canvas, imgBase64Url);
      });
    },
//图片转pdf
	imgToPdf(canvas, imgBase64Url) {
      let pdf = new jsPDF('p', 'pt', 'a4');
      pdf.addImage(imgBase64Url, 'JPEG', 0, 0, canvas.width * 0.2, canvas.height * 0.2);
      let pdfBlob = pdf.output('blob');
      let pdfFile = new File([pdfBlob], '文件名字.pdf', { type: 'application/pdf' });
      console.log('pdfFile', pdfFile);

      //你的上传接口方法
      //let formData = new FormData();
      //formData.append('avatarfile', pdfFile);
      //uploadAvatar(formData).then(response => {
        //console.log(window.location.origin + process.env.VUE_APP_BASE_API + response.imgUrl);
      //});
      
      //下载文件
      // pdf.save("文件名字.pdf");
    },

效果
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要将HTML网页字符串转换为PDF文件,您可以使用一些现成的工具或库,如Puppeteer、wkhtmltopdfpdfkit等。 下面是一个使用Puppeteer将HTML网页字符串转换为PDF文件的示例代码: ```javascript const puppeteer = require('puppeteer'); const fs = require('fs'); (async () => { // Launch a new browser instance const browser = await puppeteer.launch(); // Create a new page const page = await browser.newPage(); // Set the HTML content of the page const htmlContent = "<html><body><h1>Hello, World!</h1></body></html>"; await page.setContent(htmlContent); // Generate the PDF file const pdfBuffer = await page.pdf({ format: 'A4' }); // Save the PDF file to disk fs.writeFile('example.pdf', pdfBuffer, (err) => { if (err) throw err; console.log('PDF file saved to disk!'); }); // Close the browser instance await browser.close(); })(); ``` 要将生成的PDF文件上传到服务器,您可以使用Node.js的文件上传模块,如multer或formidable等。 下面是一个使用multer将PDF文件上传到服务器的示例代码: ```javascript const express = require('express'); const multer = require('multer'); const app = express(); const upload = multer({ dest: 'uploads/' }); app.post('/upload', upload.single('file'), (req, res) => { console.log(req.file); // File information res.send('File uploaded successfully!'); }); app.listen(3000, () => { console.log('Server started on port 3000'); }); ``` 在上面的示例中,我们使用multer模块将上传的文件保存在服务器上的`uploads/`目录中,并在控制台输出了文件的信息。您可以根据自己的需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值