Node js merges two pdf and adds a number page for all the pages with the muhammara js library

115 Views Asked by At

I'm trying to merge pdf files and add a number page using the muhammara js(fork of hummusjs) library.

I got an error "Segmentation fault: 11"

Sometimes, I get "context not created, page index is either wrong, or page is null"

node version v16.15.0 muhammara version 3.5.0

const muhammara = require('muhammara');
const streamBuffers = require('stream-buffers');

/**
 * Merges an array of PDF buffers into one single PDF buffer with page numbers.
 *
 * @param {Object[]} documents - an array of objects with { pdf, displayName }
 *
 * @returns {Buffer} merged PDF buffer with page numbers
 */
const mergeAndAddPageNumbers = async (documents) => {
  // Create a writable stream buffer for the output PDF.
  const outStreamBuffer = new streamBuffers.WritableStreamBuffer({
    initialSize: 100 * 1024,
    incrementAmount: 10 * 1024,
  });

  const pdfWriter = new muhammara.PDFWriter(new muhammara.PDFStreamForResponse(outStreamBuffer));

  // Track the current page number.
  let currentPageNumber = 1;

  for (const document of documents) {
    const { pdf, displayName } = document;

    // Create a PDF reader for the current document.
    const pdfReader = muhammara.createReader(new muhammara.PDFRStreamForBuffer(pdf));

    for (let pageIndex = 0; pageIndex < pdfReader.getPagesCount(); pageIndex++) {
      const pageModifier = new muhammara.PDFPageModifier(pdfWriter, pageIndex);
      pageModifier.startContext().getContext().writeText(`Page ${currentPageNumber}`, 460, 38, {
        font: 'Helvatica',
        size: 14,
        colorspace: 'gray',
        color: [1, 0, 0], // Red color
      });
      pageModifier.endContext().writePage().end();
      currentPageNumber++;
    }
  }

  pdfWriter.end();
  return outStreamBuffer.getContents();
};

module.exports = { mergeAndAddPageNumbers };

I get the error after this command.

pageModifier.startContext().getContext().writeText(`Page ${currentPageNumber}`, 460, 38, {
        font: 'Helvatica',
        size: 14,
        colorspace: 'gray',
        color: [1, 0, 0], // Red color
      });
0

There are 0 best solutions below