diff --git a/package.json b/package.json index 5b619cc..53f8df8 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "jszip": "^3.10.1", "mammoth": "^1.12.0", "moment": "^2.30.1", - "pdf-parse": "^2.4.5" + "pdfjs-dist": "^3.11.174" }, "devDependencies": { "@babel/core": "^7.26.0", @@ -44,4 +44,4 @@ "webpack": "^5.96.1", "webpack-cli": "^5.1.4" } -} \ No newline at end of file +} diff --git a/src/index.ts b/src/index.ts index 2196b23..be96e28 100644 --- a/src/index.ts +++ b/src/index.ts @@ -12,6 +12,11 @@ import Strings, { setContext } from "./strings"; // Styling import "./styles.scss"; +// PDF - Set Worker Source +import * as pdfjsLib from "pdfjs-dist"; +import * as pdfWorker from "pdfjs-dist/build/pdf.worker.min.js"; +pdfjsLib.GlobalWorkerOptions.workerSrc = pdfWorker; + // Create the global variable for this solution const GlobalVariable = { Configuration, diff --git a/src/reports/searchDocs.ts b/src/reports/searchDocs.ts index 6f3705c..6fe03ba 100644 --- a/src/reports/searchDocs.ts +++ b/src/reports/searchDocs.ts @@ -4,7 +4,7 @@ import { Workbook } from "exceljs"; import { loadAsync } from "jszip"; import { extractRawText } from "mammoth"; import * as moment from "moment"; -import { PDFParse } from "pdf-parse"; +import * as pdfjsLib from "pdfjs-dist"; import { DataSource } from "../ds"; import { M365Groups } from "../m365Groups"; import { IRegexPattern } from "../regexPatternsDialog"; @@ -74,8 +74,27 @@ export class SearchDocs { break; case "pdf": // Get the content - let pdf = new PDFParse({ data: buffer }); - pdf.getText().then(content => { resolve(content.text); }).catch(reject); + pdfjsLib.getDocument({ data: buffer }).promise.then(pdf => { + let fullText = ''; + + // Parse the pages + let pages = []; + for (let i = 0; i < pdf.numPages; i++) { pages.push(i); } + Helper.Executor(pages, pageNum => { + // Return a promise + return new Promise(resolve => { + // Get the page + pdf.getPage(pageNum + 1).then(page => { + // Get the text + page.getTextContent().then(content => { + // Append the text + fullText += content.items.map((item: any) => item.str || "").join(" "); + resolve(null); + }); + }); + }); + }).then(() => { resolve(fullText); }); + }).catch(reject); break; case "pptx": // Load the file