【问题标题】:Best library to convert React components to PNG/PDF?将 React 组件转换为 PNG/PDF 的最佳库?
【发布时间】:2020-09-28 11:33:41
【问题描述】:

我已经实现了一个使用 Chart.js 库创建图表的 React Web 应用程序。现在我想将此图表转换为 PNG/PDF 格式并保存。我遇到了很多图书馆,但遇到了一些或其他问题。你能建议哪个库最适合这种工作吗?

App.js

class CreateChart extends Component {
// call to get chartData object
    render() {
        return (
          <div className="App">
            <header className="App-header">
              REACT CHARTS
            </header>
                <CreateChart chartData={this.state.chartData} />
          </div>
        );
      }
}

Chart.js

class CreateChart extends Component {
    componentDidMount() {
            this.myChart = new Chart(
                this.chartRef.current,
                this.props.chartData
            );
    }
    
    render() {
           return <canvas ref={this.chartRef} />
    }
}

【问题讨论】:

  • 将任意 React 组件渲染为 PNG 或 PDF 与渲染 Chart.js 图表完全不同。你用谷歌搜索过“chart.js export png”吗?
  • 其 API 文档由 .toBase64Image() 函数组成。在这方面提供的信息不多
  • 不需要太多文档,因为您从该函数中获得了标准数据:URI。
  • @AKX 确切,如果你能得到base64字符串,你可以调用jsPDF库,并将图像添加到pdf文档中。

标签: javascript reactjs react-component react-chartjs react-pdf


【解决方案1】:

我建议你在你的 html 元素上添加一个id(比如说topdf):

render() { return <canvas id="topdf" ref={this.chartRef} /> }}.

然后您可以使用html2canvas 库来获取图表的图像dataURI。 之后就可以使用jsPDF库制作文档,使用.addImage(your_image_data_URI)函数了。

示例:

html2canvas(document.querySelector("#topdf"), { 
      scale: 3, // use the desired scale
      allowTaint: true,
      useCORS: true
    }).then(canvas => { 

      // Your IMAGE_DATA_URI
      var imgData = canvas.toDataURL('image/jpeg');

      // Make pdf
      var doc = new jsPDF({ options });

      // add image
      doc.addImage(imgData, 'JPEG');

      // Save document
      doc.save('charts.pdf'); 

      // ....

这仅适用于初始化运行时,或运行后。

【讨论】:

  • 我正在尝试建议您添加和 id (比如说 topdf 在您的画布上 render() { return &lt;canvas id="topdf" ref={this.chartRef} /&gt; }}。现在,如果您在 chrome 上检查您的应用程序,例如(F12),您可以选择canvas 元素并看到它获取 id。从这里,您可以创建一个函数 toPDF() 并像这样使用 html2canvas:html2canvas(document.querySelector("#topdf"), { ....
  • 但是如上所述,如果您的 API 有 .toBase64Image(),此函数会返回图表的编码 base64 字符串(其中包含 png/jpeg 编码)。有了这个 base64 字符串,就不需要使用 html2canvas。可以直接使用jsPDF,使用.addImage(the base 64 string)
  • 哇......这是一个非常好的解释,它让我继续前进。有用。您能否修改您的主要答案以便我接受?
  • html2canvas() 对我有用,但我也想使用 png 文件。我得到了编码的字符串,但由于某些原因,当我尝试在 chrome 上打开该 URI 时,它给了我一个完整的黑屏。
  • 另外,html2canvas() 给出了一个基于当前浏览器分辨率大小的图表。与网页相比,它没有生成清晰的 pdf。是否有任何高级选项可以使我的 pdf 更清晰?
猜你喜欢
  • 2010-10-13
  • 2015-12-30
  • 1970-01-01
  • 2013-06-23
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 2021-12-14
  • 2017-10-25
相关资源
最近更新 更多