我尝试使用@react-pdf/renderer
的pdf
方法将PDF渲染到内存中,然后将结果字节馈送到pdf-lib
的PDFDocument
对象中。我这样做的原因是react-pdf
不允许嵌入(合并)其他PDF和我们正在使用的合并库(pdf-merger-js
)不支持返回合并PDF的页码,这意味着我们无法正确呈现目录。
实际情况是,在获取@react-pdf/renderer.pdf(...)
的输出后,将其编码为base64
并传递给pdf-lib.PDFDocument.load(...)
,在浏览器中预览生成的PDF是一个如下所示的字节串。在引入pdf-lib
之前,创建此PDF预览没有任何问题:
执行此操作的代码如下所示(toc
==目录,两个参数都是react-pdf
元素的集合):
const mergePdfsToObjectUrl = async (toc: ReactElement, pdfPages: any[]) => {
if (toc && pdfPages?.length > 0) {
const pdfString = await pdf(toc);
const string = await pdfString.toString();
const base64string = encode(string);
const tocPdf = await PDFDocument.load(base64string);
// Create a new document
const doc = await PDFDocument.create();
// Add individual content pages
const tocPdfPages = await doc.copyPages(tocPdf, tocPdf.getPageIndices());
for (const page of tocPdfPages) {
doc.addPage(page);
}
// Write the PDF to a file
const pdfBytes = await doc.save();
const url = URL.createObjectURL(new Blob([pdfBytes]));
return url;
}
我尝试了各种方法,从不同的编解码器到不同的管道,都是为了将react-pdf
数据转换成可用的字节串,但似乎都不起作用。
1条答案
按热度按时间4urapxun1#
我有一个类似的问题,但我已经设法让pdf显示。
然后在保存时转换为Unit 8Array,然后转换为Blob,并像您一样创建URL
现在你可以将url传递给iframe
<iframe src={url} title="myPdf"/>
,它应该可以正确显示,我遇到的唯一问题是react-pdf生成的pdf不显示任何图像,但是其他的都可以显示。