import fs from 'fs'; import { v4 } from 'uuid'; import os from 'os'; import { exec } from 'child_process'; import path from 'path'; import IPdfToTextProvider from '../IPdfToTextProvider'; import IOptionsPdfParseDTO from '../dto/IOptionsPdfParseDTO'; export default class LinuxPdfToText implements IPdfToTextProvider { public async extract(filePath: string, options: IOptionsPdfParseDTO = {}): Promise { const tempTextFile = path.resolve(os.tmpdir(), v4()); const { pageNumber } = options; const pageNumberOption = pageNumber !== undefined ? `-f ${pageNumber} -l ${pageNumber}` : ''; const command = `pdftotext -layout ${pageNumberOption} ${filePath} ${tempTextFile}`; return new Promise((resolve, reject) => { exec(command, async err => { if (err) { return reject(err); } const contentFile = await fs.promises.readFile(tempTextFile); await fs.promises.unlink(tempTextFile); return resolve(contentFile.toString()); }); }); } }