UNPKG

n8n-nodes-pdf-page-extract

Version:
153 lines 6.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PdfPageExtract = void 0; const n8n_workflow_1 = require("n8n-workflow"); const pdfParse = require('pdf-parse'); class PdfPageExtract { constructor() { this.description = { displayName: 'PDF Page Extract', name: 'pdfPageExtract', icon: 'file:pdf.svg', group: ['transform'], version: 1, subtitle: '={{$parameter["operation"]}}', description: 'Extraheert tekst per pagina uit een PDF bestand', defaults: { name: 'PDF Page Extract', }, inputs: ["main"], outputs: ["main"], properties: [ { displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true, options: [ { name: 'Extract Pages', value: 'extractPages', description: 'Extract text from PDF as an array of pages', action: 'Extract text from PDF as an array of pages', }, ], default: 'extractPages', }, { displayName: 'Binary Property', name: 'binaryPropertyName', type: 'string', default: 'data', required: true, displayOptions: { show: { operation: ['extractPages'], }, }, description: 'Name of the binary property which contains the PDF data', }, { displayName: 'Include Raw Text', name: 'includeRawText', type: 'boolean', default: false, displayOptions: { show: { operation: ['extractPages'], }, }, description: 'Whether to include the complete raw text in addition to the pages array', }, { displayName: 'Include Metadata', name: 'includeMetadata', type: 'boolean', default: true, displayOptions: { show: { operation: ['extractPages'], }, }, description: 'Whether to include PDF metadata in the output', }, ], }; } async execute() { const items = this.getInputData(); const returnData = []; const operation = this.getNodeParameter('operation', 0); if (operation === 'extractPages') { for (let i = 0; i < items.length; i++) { try { const binaryPropertyName = this.getNodeParameter('binaryPropertyName', i); const includeRawText = this.getNodeParameter('includeRawText', i); const includeMetadata = this.getNodeParameter('includeMetadata', i); if (!items[i].binary) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'No binary data exists on item!'); } const binaryData = items[i].binary; if (!binaryData[binaryPropertyName]) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Binary data property "${binaryPropertyName}" does not exist on item!`); } const buffer = await this.helpers.getBinaryDataBuffer(i, binaryPropertyName); if (buffer.length === 0) { throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'PDF binary data is empty after decoding!'); } const pages = []; const options = { pagerender: function (pageData) { const renderOptions = { normalizeWhitespace: false, disableCombineTextItems: false }; return pageData.getTextContent(renderOptions) .then(function (textContent) { let text = ''; for (const item of textContent.items) { text += item.str + ' '; } pages.push(text.trim()); return text; }); } }; const data = await pdfParse(buffer, options); const json = { filename: binaryData[binaryPropertyName].fileName || 'document.pdf', totalPages: data.numpages, pages: pages, }; if (includeRawText) { json.text = data.text; } if (includeMetadata) { json.metadata = data.metadata; json.info = data.info; } const newItem = { json, binary: items[i].binary, }; returnData.push(newItem); } catch (error) { if (this.continueOnFail()) { returnData.push({ json: { error: error.message, }, binary: items[i].binary, }); continue; } throw error; } } } return [returnData]; } } exports.PdfPageExtract = PdfPageExtract; //# sourceMappingURL=PdfPageExtract.node.js.map