import { BINARY_ENCODING, IExecuteFunctions, } from 'n8n-core'; import { INodeExecutionData, INodeType, INodeTypeDescription, } from 'n8n-workflow'; const pdf = require('pdf-parse'); export class ReadPdf implements INodeType { description: INodeTypeDescription = { displayName: 'Read PDF', name: 'readPDF', icon: 'fa:file-pdf', group: ['input'], version: 1, description: 'Reads a PDF and extracts its content', defaults: { name: 'Read PDF', color: '#003355', }, inputs: ['main'], outputs: ['main'], properties: [ { displayName: 'Binary Property', name: 'binaryPropertyName', type: 'string', default: 'data', required: true, description: 'Name of the binary property from which to
read the PDF file.', }, ], }; async execute(this: IExecuteFunctions): Promise { const items = this.getInputData(); const returnData: INodeExecutionData[] = []; const length = items.length as unknown as number; let item: INodeExecutionData; for (let itemIndex = 0; itemIndex < length; itemIndex++) { item = items[itemIndex]; const binaryPropertyName = this.getNodeParameter('binaryPropertyName', itemIndex) as string; if (item.binary === undefined) { item.binary = {}; } const binaryData = Buffer.from(item.binary[binaryPropertyName].data, BINARY_ENCODING); returnData.push({ binary: item.binary, json: await pdf(binaryData), }); } return this.prepareOutputData(returnData); } }