25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 

33 satır
1.0 KiB

  1. import fs from 'fs';
  2. import { v4 } from 'uuid';
  3. import os from 'os';
  4. import { exec } from 'child_process';
  5. import path from 'path';
  6. import IPdfToTextProvider from '../IPdfToTextProvider';
  7. import IOptionsPdfParseDTO from '../dto/IOptionsPdfParseDTO';
  8. export default class LinuxPdfToText implements IPdfToTextProvider {
  9. public async extract(filePath: string, options: IOptionsPdfParseDTO = {}): Promise<string> {
  10. const tempTextFile = path.resolve(os.tmpdir(), v4());
  11. const { pageNumber } = options;
  12. const pageNumberOption = pageNumber !== undefined ? `-f ${pageNumber} -l ${pageNumber}` : '';
  13. const command = `pdftotext -layout ${pageNumberOption} ${filePath} ${tempTextFile}`;
  14. return new Promise((resolve, reject) => {
  15. exec(command, async err => {
  16. if (err) {
  17. return reject(err);
  18. }
  19. const contentFile = await fs.promises.readFile(tempTextFile);
  20. await fs.promises.unlink(tempTextFile);
  21. return resolve(contentFile.toString());
  22. });
  23. });
  24. }
  25. }