gpt4 book ai didi

reactjs - 从 React Components 生成 PDF 文件

转载 作者:行者123 更新时间:2023-12-03 12:59:25 24 4
gpt4 key购买 nike

我一直在构建一个投票应用程序。人们能够创建民意调查并获取有关他们提出的问题的数据。我想添加功能让用户以 PDF 形式下载结果。

例如,我有两个组件负责抓取问题和数据。

<QuestionBox />
<ViewCharts />

我正在尝试将两个组件输出到 PDF 文件中。然后用户可以下载该 PFD 文件。我发现了一些允许在组件内渲染 PDF 的软件包。然而我没能找到一个可以从由虚拟 DOM 组成的输入流生成 PDF 的工具。如果我想从头开始实现这一目标,我应该采取什么方法?

最佳答案

渲染为 pdf 通常很痛苦,但有一种使用 Canvas 来解决它的方法。

这个想法是转换:HTML -> Canvas -> PNG(或 JPEG) -> PDF

要实现上述目标,您需要:

  1. html2canvas &
  2. jsPDF

import React, {Component, PropTypes} from 'react';

// download html2canvas and jsPDF and save the files in app/ext, or somewhere else
// the built versions are directly consumable
// import {html2canvas, jsPDF} from 'app/ext';


export default class Export extends Component {
constructor(props) {
super(props);
}

printDocument() {
const input = document.getElementById('divToPrint');
html2canvas(input)
.then((canvas) => {
const imgData = canvas.toDataURL('image/png');
const pdf = new jsPDF();
pdf.addImage(imgData, 'JPEG', 0, 0);
// pdf.output('dataurlnewwindow');
pdf.save("download.pdf");
})
;
}

render() {
return (<div>
<div className="mb5">
<button onClick={this.printDocument}>Print</button>
</div>
<div id="divToPrint" className="mt4" {...css({
backgroundColor: '#f5f5f5',
width: '210mm',
minHeight: '297mm',
marginLeft: 'auto',
marginRight: 'auto'
})}>
<div>Note: Here the dimensions of div are same as A4</div>
<div>You Can add any component here</div>
</div>
</div>);
}
}

该代码段在这里不起作用,因为未导入所需的文件。

this answer 中正在使用替代方法,中间的步骤被删除,您可以简单地从 HTML 转换为 PDF。 jsPDF文档中也有一个选项可以做到这一点,但从个人观察来看,我觉得先将dom转换为png会获得更好的精度。

更新 0:2018 年 9 月 14 日

通过此方法创建的 pdf 上的文本将无法选择。如果这是一个要求,您可能会发现 this article有帮助。

关于reactjs - 从 React Components 生成 PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44989119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com