Use legacy PDF worker for lower Safari versions
Some checks failed
Build and Publish Docker Image / build (push) Has been cancelled
Some checks failed
Build and Publish Docker Image / build (push) Has been cancelled
This commit is contained in:
parent
652a89790d
commit
50877d6543
5 changed files with 62211 additions and 296 deletions
548
package-lock.json
generated
548
package-lock.json
generated
File diff suppressed because it is too large
Load diff
12
package.json
12
package.json
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "openreader-webui",
|
"name": "openreader-webui",
|
||||||
"version": "0.2.4",
|
"version": "0.2.4-patch.1",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev --turbopack -p 3003",
|
"dev": "next dev --turbopack -p 3003",
|
||||||
|
|
@ -16,19 +16,19 @@
|
||||||
"compromise": "^14.14.4",
|
"compromise": "^14.14.4",
|
||||||
"howler": "^2.2.4",
|
"howler": "^2.2.4",
|
||||||
"lru-cache": "^11.0.2",
|
"lru-cache": "^11.0.2",
|
||||||
"next": "15.1.5",
|
"next": "15.2.1",
|
||||||
"openai": "^4.79.1",
|
"openai": "^4.86.1",
|
||||||
"pdfjs-dist": "4.8.69",
|
"pdfjs-dist": "4.8.69",
|
||||||
"react": "^19.0.0",
|
"react": "^19.0.0",
|
||||||
"react-dnd": "^16.0.1",
|
"react-dnd": "^16.0.1",
|
||||||
"react-dnd-html5-backend": "^16.0.1",
|
"react-dnd-html5-backend": "^16.0.1",
|
||||||
"react-dom": "^19.0.0",
|
"react-dom": "^19.0.0",
|
||||||
"react-dropzone": "^14.3.5",
|
"react-dropzone": "^14.3.8",
|
||||||
"react-hot-toast": "^2.5.1",
|
"react-hot-toast": "^2.5.2",
|
||||||
"react-pdf": "^9.2.1",
|
"react-pdf": "^9.2.1",
|
||||||
"react-reader": "^2.0.12",
|
"react-reader": "^2.0.12",
|
||||||
"string-similarity": "^4.0.4",
|
"string-similarity": "^4.0.4",
|
||||||
"uuid": "^11.0.5"
|
"uuid": "^11.1.0"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/eslintrc": "^3",
|
"@eslint/eslintrc": "^3",
|
||||||
|
|
|
||||||
61896
public/pdf.legacy.worker.mjs
Normal file
61896
public/pdf.legacy.worker.mjs
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -5,10 +5,13 @@ import { createRequire } from 'module';
|
||||||
const require = createRequire(import.meta.url);
|
const require = createRequire(import.meta.url);
|
||||||
const pdfjsDistPath = path.dirname(require.resolve('pdfjs-dist/package.json'));
|
const pdfjsDistPath = path.dirname(require.resolve('pdfjs-dist/package.json'));
|
||||||
const pdfWorkerPath = path.join(pdfjsDistPath, 'build', 'pdf.worker.mjs');
|
const pdfWorkerPath = path.join(pdfjsDistPath, 'build', 'pdf.worker.mjs');
|
||||||
|
const pdfLegacyWorkerPath = path.join(pdfjsDistPath, 'legacy', 'build', 'pdf.worker.mjs');
|
||||||
|
|
||||||
// Create public directory if it doesn't exist
|
// Create public directory if it doesn't exist
|
||||||
if (!fs.existsSync('./public')) {
|
if (!fs.existsSync('./public')) {
|
||||||
fs.mkdirSync('./public', { recursive: true });
|
fs.mkdirSync('./public', { recursive: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Copy both modern and legacy workers
|
||||||
fs.cpSync(pdfWorkerPath, './public/pdf.worker.mjs', { recursive: true });
|
fs.cpSync(pdfWorkerPath, './public/pdf.worker.mjs', { recursive: true });
|
||||||
|
fs.cpSync(pdfLegacyWorkerPath, './public/pdf.legacy.worker.mjs', { recursive: true });
|
||||||
|
|
|
||||||
|
|
@ -4,9 +4,46 @@ import stringSimilarity from 'string-similarity';
|
||||||
import type { TextItem } from 'pdfjs-dist/types/src/display/api';
|
import type { TextItem } from 'pdfjs-dist/types/src/display/api';
|
||||||
import type { PDFDocumentProxy } from 'pdfjs-dist';
|
import type { PDFDocumentProxy } from 'pdfjs-dist';
|
||||||
|
|
||||||
// Set worker from public directory and compatibility mode
|
// Function to detect if we need to use legacy build
|
||||||
pdfjs.GlobalWorkerOptions.workerSrc = '/pdf.worker.mjs';
|
function shouldUseLegacyBuild() {
|
||||||
pdfjs.GlobalWorkerOptions.workerPort = null;
|
try {
|
||||||
|
if (typeof window === 'undefined') return false;
|
||||||
|
|
||||||
|
const ua = window.navigator.userAgent;
|
||||||
|
const isSafari = /^((?!chrome|android).)*safari/i.test(ua);
|
||||||
|
|
||||||
|
console.log(isSafari ? 'Running on Safari' : 'Not running on Safari');
|
||||||
|
if (!isSafari) return false;
|
||||||
|
|
||||||
|
// Extract Safari version - matches "Version/18" format
|
||||||
|
const match = ua.match(/Version\/(\d+)/i);
|
||||||
|
console.log('Safari version:', match);
|
||||||
|
if (!match || !match[1]) return true; // If we can't determine version, use legacy to be safe
|
||||||
|
|
||||||
|
const version = parseInt(match[1]);
|
||||||
|
return version < 18; // Use legacy build for Safari versions equal or below 18
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Error detecting Safari version:', e);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize PDF.js worker
|
||||||
|
function initPDFWorker() {
|
||||||
|
try {
|
||||||
|
if (typeof window !== 'undefined') {
|
||||||
|
const useLegacy = shouldUseLegacyBuild();
|
||||||
|
const workerSrc = useLegacy ? '/pdf.legacy.worker.mjs' : '/pdf.worker.mjs';
|
||||||
|
console.log('Setting PDF worker to:', workerSrc);
|
||||||
|
pdfjs.GlobalWorkerOptions.workerSrc = workerSrc;
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Error setting PDF worker:', e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Initialize the worker
|
||||||
|
initPDFWorker();
|
||||||
|
|
||||||
interface TextMatch {
|
interface TextMatch {
|
||||||
elements: HTMLElement[];
|
elements: HTMLElement[];
|
||||||
|
|
@ -22,6 +59,9 @@ export async function extractTextFromPDF(
|
||||||
margins = { header: 0.07, footer: 0.07, left: 0.07, right: 0.07 }
|
margins = { header: 0.07, footer: 0.07, left: 0.07, right: 0.07 }
|
||||||
): Promise<string> {
|
): Promise<string> {
|
||||||
try {
|
try {
|
||||||
|
// Log pdf worker version
|
||||||
|
//console.log('PDF worker version:', pdfjs.GlobalWorkerOptions.workerSrc);
|
||||||
|
|
||||||
const page = await pdf.getPage(pageNumber);
|
const page = await pdf.getPage(pageNumber);
|
||||||
const textContent = await page.getTextContent();
|
const textContent = await page.getTextContent();
|
||||||
|
|
||||||
|
|
@ -61,7 +101,7 @@ export async function extractTextFromPDF(
|
||||||
return item.str.trim().length > 0;
|
return item.str.trim().length > 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
console.log('Filtered text items:', textItems);
|
//console.log('Filtered text items:', textItems);
|
||||||
|
|
||||||
const tolerance = 2;
|
const tolerance = 2;
|
||||||
const lines: TextItem[][] = [];
|
const lines: TextItem[][] = [];
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue