3

I'm trying to upgrade Lambda js code that uses pdfmake 0.1.64 to CDK Lambda NodejsFunction typescript code that uses pdfmake 0.2.5.

I'm getting the error: "ENOENT: no such file or directory, open '/var/task/data.trie'"

The error is generated when this line of code is included in the Lambda function:

import PdfPrinter = require('pdfmake');

Searching for this error implies that this is a pdfkit error. My understanding is pdfmake is based on pdfkit.

Docs: "Use pdfmake on server-side" https://pdfmake.github.io/docs/0.1/fonts/standard-14-fonts/

Additional Lambda typescript code (for reference):

import PdfPrinter = require('pdfmake');

const fonts = {
    Courier: {
        normal: 'Courier',
        bold: 'Courier-Bold',
        italics: 'Courier-Oblique',
        bolditalics: 'Courier-BoldOblique'
    },
    Helvetica: {
        normal: 'Helvetica',
        bold: 'Helvetica-Bold',
        italics: 'Helvetica-Oblique',
        bolditalics: 'Helvetica-BoldOblique'
    },
    Times: {
        normal: 'Times-Roman',
        bold: 'Times-Bold',
        italics: 'Times-Italic',
        bolditalics: 'Times-BoldItalic'
    },
    Symbol: {
        normal: 'Symbol'
    },
    ZapfDingbats: {
        normal: 'ZapfDingbats'
    }
};

const docDefinition = {
    content: [
        'First paragraph'
    ],
    defaultStyle: {
        font: 'Helvetica'
    }
};

const printer = new PdfPrinter(fonts);
const doc = printer.createPdfKitDocument(docDefinition);
doc.end();
Oleg Abrazhaev
  • 2,751
  • 2
  • 28
  • 41
Matthew
  • 2,871
  • 5
  • 34
  • 59

1 Answers1

1

The following CDK Lambda setting fixed this error.

new lambdaNJS.NodejsFunction(this, 'MyLambdaFunction', {
    ...
    bundling: {
        ...
        nodeModules: ['pdfmake'], //  List of modules that should NOT be bundled but instead included in the node_modules folder.
    }
});

In Lambda (force Typescript to ignore the type error). It's not clear how to get types working. The package.json includes @types/pdfmake package.

// @ts-ignore
const doc = printer.createPdfKitDocument(definition, options);
Matthew
  • 2,871
  • 5
  • 34
  • 59