Surendar
Surendar

Reputation: 153

Feeding PDF generated from pdfkit as input to pdf-lib for merging

I am trying to send a pdfkit generated pdf file as input to pdflib for merging. I am using async function. My project is being developed using sails Js version:"^1.2.3", "node": "^12.16", my pdf-kit version is: "^0.11.0", "pdf-lib": "^1.9.0", This is the code:

const textbytes=fs.readFileSync(textfile);
var bytes1 = new Uint8Array(textbytes);
const textdoc = await PDFDocumentFactory.load(bytes1)

The error i am getting is:

UnhandledPromiseRejectionWarning: Error: Failed to parse PDF document (line:0 col:0 offset=0): No PDF header found

Please help me with this issue.

Upvotes: 3

Views: 3695

Answers (1)

KZander
KZander

Reputation: 280

You really don't need this line.

var bytes1 = new Uint8Array(textbytes);

By just reading the file and sending textbytes in the parameters is more than enough.

I use this function to merge an array of pdfBytes to make one big PDF file:

async function mergePdfs(pdfsToMerge) 
{
    const mergedPdf = await pdf.PDFDocument.create();
    for (const pdfCopyDoc of pdfsToMerge)
    {
        const pdfDoc = await pdf.PDFDocument.load(pdfCopyDoc);
        const copiedPages = await mergedPdf.copyPages(pdfDoc, pdfDoc.getPageIndices());
        copiedPages.forEach((page) => {
            mergedPdf.addPage(page);
        });
    }
    const mergedPdfFile = await mergedPdf.save();
    return mergedPdfFile;
};

So basically after you add the function mergePdfs(pdfsToMerge) You can just use it like this:

const textbytes = fs.readFileSync(textfile);
const textdoc = await PDFDocumentFactory.load(bytes1)
let finalPdf = await mergePdfs(textdoc);

Upvotes: 1

Related Questions