UNPKG

n8n-nodes-doc-to-text

Version:

Custom n8n node to convert .doc files to text using mammoth

70 lines (60 loc) 2.49 kB
import { INodeType, INodeTypeDescription, IExecuteFunctions, INodeInputConfiguration, INodeOutputConfiguration, NodeConnectionType } from 'n8n-workflow'; import * as mammoth from 'mammoth'; // Расширим интерфейс для поддержки бинарных данных declare module 'n8n-workflow' { interface IExecuteItem { binary?: { [key: string]: { data: string; mimeType?: string; fileName?: string; }; }; } } export class DocToText implements INodeType { description: INodeTypeDescription = { displayName: 'DOC to Text', name: 'docToText', group: ['transform'], version: 1, description: 'Convert DOC files to text using mammoth', defaults: { name: 'DOC to Text', color: '#772244', }, inputs: [NodeConnectionType.Main], outputs: [NodeConnectionType.Main], properties: [ { displayName: 'Binary Field Name', name: 'binaryFieldName', type: 'string', default: 'file', placeholder: 'file', required: true, description: 'Name of the binary field containing the DOC file (e.g., "file").', }, ], }; async execute(this: IExecuteFunctions) { const items = this.getInputData(); const returnData = []; for (let i = 0; i < items.length; i++) { const binaryFieldName = this.getNodeParameter('binaryFieldName', i) as string; const item = items[i]; if (!item.binary || !item.binary[binaryFieldName]) { throw new Error(`No binary data found for field "${binaryFieldName}". Please ensure a file is passed to this node.`); } const binaryData = item.binary[binaryFieldName]; console.log('Binary data received:', binaryData); const buffer = Buffer.from(binaryData.data, 'base64'); const result = await mammoth.extractRawText({ buffer }); if (result.messages && result.messages.length > 0) { console.warn('Mammoth warnings:', result.messages); } returnData.push({ json: { text: result.value } }); } return this.prepareOutputData(returnData); } }