react中使用jspdf和html2canvas遇到的问题

俗话说一包卡一天,真的是没谁了,今天终于把这个问题解决了,废话不多说,直接上代码。
第一步先下载俩个包。

// npm install html2canvas
// npm install jspdf --save
import html2canvas from 'html2canvas';
import JsPDF from 'jspdf'

在下载jspdf的时候会报错

PS E:\empss\empss-visualization-ui> npm install jspdf                                                                                                                   npm WARN registry Unexpected warning for https://registry.npmjs.org/: Miscellaneous Warning ECONNRESET: request to https://registry.npmjs.org/jspdf failed, reason: Client network socket disconnected before secure TLS connection was established
npm WARN registry Using stale data from https://registry.npmjs.org/ due to a request error during revalidation.
npm ERR! code ENOENT
npm ERR! syscall spawn git
npm ERR! path git
npm ERR! errno ENOENT
npm ERR! enoent Error while executing:
npm ERR! enoent undefined ls-remote -h -t ssh://git@github.com/eligrey/FileSaver.js.git
npm ERR! enoent
npm ERR! enoent
npm ERR! enoent spawn git ENOENT
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\zhongruanxiaowu\AppData\Roaming\npm-cache\_logs\2020-07-23T07_29_00_408Z-debug.log

看见这么一大堆东西就烦,搞了一天,yang也用了,cnpm也用了,就是不行,问朋友说是网不好,最后我下载了一个git管理git下载地址,直接在里面运行npm install jspdf --save就可以使用了。代码部分已在底下显示。

// 生成PDF
onrendered = (canvasImage) => {
    console.log(canvasImage)
    canvasImage.id = "mycanvas";
    //生成base64图片数据
    // 在state里面定义的是个空字符串
    this.state.dataUrl = canvasImage.toDataURL();
    var newImage = document.createElement("img");
    // console.log(newImage)
    newImage.src =  this.state.dataUrl;
    // document.body.appendChild(newImage);
}
imageCode = () => {
// 这个是获取需要打印的pdf
   const canvasData = document.getElementById("div_print");
   html2canvas(canvasData).then((canvasImge) => {
   	   // 这个是转为base64的代码
       this.onrendered(canvasImge);
       let contentWidth = canvasImge.width
       let contentHeight = canvasImge.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 = canvasImge.toDataURL('image/jpeg', 1.0)
       //   document.body.appendChild(canvasImge);
       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.save(this.state.chartData.tilte + '.pdf')
   });
};

几乎不用怎么修改就可以使用了。主要就是下载包的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
Reacthtml2canvas 是两个不同的工具,可以一起使用来实现将 React 组件转换为图像的功能。 React 是一个用于构建用户界面的 JavaScript 库,它可以帮助开发者构建交互式的单页面应用。而 html2canvas 是一个 JavaScript 库,它可以将网页的 DOM 元素转换为图像。 要在 React 使用 html2canvas,首先需要安装 html2canvas 库。可以通过 npm 进行安装: ``` npm install html2canvas ``` 然后,在 React 组件引入 html2canvas使用它来转换 DOM 元素为图像。可以使用 `ref` 属性来获取要转换的元素的引用。以下是一个示例代码: ```jsx import React, { useRef } from 'react'; import html2canvas from 'html2canvas'; function MyComponent() { const componentRef = useRef(null); const handleCapture = () => { html2canvas(componentRef.current).then(canvas => { // 在这里可以处理生成的图像,例如保存或显示在页面上 document.body.appendChild(canvas); }); }; return ( <div> <div ref={componentRef}> {/* 这里是要转换为图像的内容 */} </div> <button onClick={handleCapture}>Capture</button> </div> ); } ``` 在上面的示例代码,我们创建了一个包含一个要转换为图像的 `<div>` 元素和一个按钮的 React 组件。通过 `ref` 属性将 `<div>` 元素与 `componentRef` 关联起来。当点击按钮时,调用 `handleCapture` 函数,该函数使用 html2canvas 将 `componentRef.current` 转换为图像,并将生成的 canvas 元素添加到页面。 这只是一个简单的示例,你可以根据自己的需求对图像进行进一步的处理。希望对你有帮助!如果你还有其他问题,请继续提问。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

好苦呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值