From a6196434b3003a41e6d1f6fe132bbba0a42bcf7c Mon Sep 17 00:00:00 2001 From: bobzel Date: Wed, 9 Jul 2025 12:15:24 -0400 Subject: fixed landscape pdf loading. fixed crash when uploading a password protected pdf. --- src/client/views/pdf/PDFViewer.tsx | 14 +++----------- src/server/DashUploadUtils.ts | 10 +++++----- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/src/client/views/pdf/PDFViewer.tsx b/src/client/views/pdf/PDFViewer.tsx index bb4485712..c293750e1 100644 --- a/src/client/views/pdf/PDFViewer.tsx +++ b/src/client/views/pdf/PDFViewer.tsx @@ -151,25 +151,17 @@ export class PDFViewer extends ObservableReactComponent { }; @computed get _scrollHeight() { - return this._pageSizes.reduce((size, page) => size + page.height, 0); + return this._pageSizes.reduce((size, page) => size + page.height, 0) / window.devicePixelRatio; } initialLoad = () => { - const page0or180 = (page: { rotate: number }) => page.rotate === 0 || page.rotate === 180; if (this._pageSizes.length === 0) { const devicePixelRatio = window.devicePixelRatio; document.documentElement?.style.setProperty('--devicePixelRatio', window.devicePixelRatio.toString()); // set so that css can use this to adjust various PDFJs divs - Promise.all( - numberRange(this._props.pdf.numPages).map(i => - this._props.pdf.getPage(i + 1).then(page => ({ - width: (page.view[page0or180(page) ? 2 : 3] - page.view[page0or180(page) ? 0 : 1]) * devicePixelRatio, - height: (page.view[page0or180(page) ? 3 : 2] - page.view[page0or180(page) ? 1 : 0]) * devicePixelRatio, - })) - ) - ).then( + Promise.all(numberRange(this._props.pdf.numPages).map(i => this._props.pdf.getPage(i + 1).then(page => page.getViewport({ scale: devicePixelRatio })))).then( action(pages => { this._pageSizes = pages; - this._props.loaded(pages.lastElement(), this._props.pdf.numPages); + this._props.loaded(pages[0], this._props.pdf.numPages); this.createPdfViewer(); }) ); diff --git a/src/server/DashUploadUtils.ts b/src/server/DashUploadUtils.ts index f76371b0d..846a5fc82 100644 --- a/src/server/DashUploadUtils.ts +++ b/src/server/DashUploadUtils.ts @@ -16,14 +16,14 @@ import { basename } from 'path'; import * as parse from 'pdf-parse'; import * as request from 'request-promise'; import { Duplex, Stream } from 'stream'; +import { Worker, isMainThread, parentPort } from 'worker_threads'; import { Utils } from '../Utils'; +import requestImageSize from '../client/util/request-image-size'; import { createIfNotExists } from './ActionUtilities'; import { AzureManager } from './ApiManagers/AzureManager'; import { AcceptableMedia, Upload } from './SharedMediaTypes'; import { Directory, clientPathToFile, filesDirectory, pathToDirectory, publicDirectory, serverPathToFile } from './SocketData'; import { resolvedServerUrl } from './server_Initialization'; -import { Worker, isMainThread, parentPort } from 'worker_threads'; -import requestImageSize from '../client/util/request-image-size'; // Create an array to store worker threads enum workertasks { @@ -537,14 +537,14 @@ export namespace DashUploadUtils { } const dataBuffer = readFileSync(file.filepath); const result: parse.Result = await parse(dataBuffer).catch(e => e); - if (result) { + if (result?.text) { await new Promise((resolve, reject) => { const writeStream = createWriteStream(serverPathToFile(Directory.text, textFilename)); - writeStream.write(result?.text, error => (error ? reject(error) : resolve())); + writeStream.write(result?.text ?? '', error => (error ? reject(error) : resolve())); }); return MoveParsedFile(file, Directory.pdfs, undefined, result?.text, undefined, fileKey); } - return { source: file, result: { name: 'faile pdf pupload', message: `Could not upload (${file.originalFilename}).${result}` } }; + return { source: file, result: { name: 'failed pdf upload', message: `Could not upload (${file.originalFilename}) ${result}` } }; } async function UploadCsv(file: File) { -- cgit v1.2.3-70-g09d2