作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 ReactJS 开发类(class)平台。当用户完成类(class)时,他可以下载 PDF 文件。
我需要一个与图像(png 或 jpg)相同文件的版本,但我还没有找到任何方法来做到这一点。有人能帮我吗?
要生成我使用的库的 PDF 证书:React-PDF .
这是我生成pdf文件的代码:
<PDFDownloadLink
document={
<Certificate course={course} name={name} date={today()} />
}
fileName="somename.pdf"
>
{({ blob, url, loading, error }) => {
return loading ? 'Loading document...' : 'Download now!';
}}
</PDFDownloadLink>
最佳答案
请使用这个库
https://www.npmjs.com/package/react-pdf-to-image
这是非常直接的。它将返回图像列表(pdf 中的每一页作为一个图像)
import React from 'react';
import {PDFtoIMG} from 'react-pdf-to-image';
import file from './pdf-sample.pdf';
const App = () =>
<div>
<PDFtoIMG file={file}>
{({pages}) => {
if (!pages.length) return 'Loading...';
return pages.map((page, index)=>
<img key={index} src={page}/>
);
}}
</PDFtoIMG>
</div>
export default App;
如果您只想将每个 pdf 页面下载为图像而不是组件,请按照以下代码
import PDFJS from 'pdfjs-dist/webpack';
这是 react-pdf-to-image 的依赖库。然后阅读pdf文件(我给base64作为输入)
PDFJS.getDocument(blob).promise.then(pdf => {
const pages = [];
this.pdf = pdf;
for (let i = 0; i < this.pdf.numPages; i++) {
this.getPage(i + 1).then(result => {
// the result is the base 64 version of image
});
}
})
阅读完每一页后,从 getPage 方法读取每一页作为图像,如下所示
getPage = (num) => {
return new Promise((resolve, reject) => {
this.pdf.getPage(num).then(page => {
const scale = "1.5";
const viewport = page.getViewport({
scale: scale
});
const canvas = document.createElement('canvas');
const canvasContext = canvas.getContext('2d');
canvas.height = viewport.height || viewport.viewBox[3]; /* viewport.height is NaN */
canvas.width = viewport.width || viewport.viewBox[2]; /* viewport.width is also NaN */
page.render({
canvasContext, viewport
}).promise.then((res) => {
resolve(canvas.toDataURL());
})
})
})
}
关于reactjs - 如何在 ReactJS 中将 PDF 转换为图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61637191/
我是一名优秀的程序员,十分优秀!