gpt4 book ai didi

javascript - 如何使用 jsPDF 合并两个 PDF 文件

转载 作者:行者123 更新时间:2023-12-04 14:16:00 28 4
gpt4 key购买 nike

我想知道如何使用 jsPDF 将两个(或多个)PDF 文件合并为一个文件,然后使用浏览器的用户 pdf 查看器显示它。

我的要求是使打印一组文档的过程更容易,而不是一一打印,只需将它们全部合并并打印一个文件 .

我在 Stack Overflow 中查看了另一个问题,但这对我没有太大帮助,因为在这种情况下,他们正在从 HTML 内容创建 pdf,在我的情况下,我必须将一组 pdf 文件合并在一起。
Merge two PDF's generated with jsPDF into one document

我可以从 url 获取我的 PDF 文件,也可以从它们获取原始内容(base64 代码),所以我想知道是否有办法使用这个库来做到这一点。如果是这样,我只需要知道要使用什么方法或者可能是文档的链接(我也看过文档,但没有找到)

非常感谢您的回答,任何帮助将不胜感激。问候!

最佳答案

以上solution使用包pdf-lib .目前这是在客户端合并 pdf 的最佳解决方案。
当使用 Array.map() 的 async await 时,您还需要确保 ArrayBuffer[] 输入中的文档保持正确的顺序。这是一种解决方案(TS):

import { PDFDocument, PDFPage } from "pdf-lib";

export async function mergePdfs(pdfsToMerge: ArrayBuffer[]): Promise<ArrayBufferLike> {
const mergedPdf: PDFDocument = await PDFDocument.create();

const createInnerPromise = async (arrayBuffer: ArrayBuffer): Promise<PDFPage[]> => {
const pdf: PDFDocument = await PDFDocument.load(arrayBuffer);
return await mergedPdf.copyPages(pdf, pdf.getPageIndices());
};

const outerPromise: Promise<PDFPage[]>[] = pdfsToMerge.map((arrayBuffer) => {
const innerPromise: Promise<PDFPage[]> = createInnerPromise(arrayBuffer);
return innerPromise;
});

const resultOuterPromise: PDFPage[][] = await Promise.all(outerPromise);

resultOuterPromise.forEach((pageArray: PDFPage[]) => {
pageArray.forEach((page: PDFPage) => {
mergedPdf.addPage(page);
});
});

return (await mergedPdf.save()).buffer;
}
要创建输入 ArayBuffer[],您可以将 jsPDF 中的 pdf 输出为 ArrayBuffer:
jsPdfDocument.output("arraybuffer")
如果它是一个文件,你可以使用:
await file.arrayBuffer()

关于javascript - 如何使用 jsPDF 合并两个 PDF 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60234692/

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