-
Notifications
You must be signed in to change notification settings - Fork 10.6k
Closed
Labels
Description
Attach (recommended) or Link to PDF file
eee06a39-b040-4c57-8ec9-7afd718c6aa0.pdf
Web browser and its version
Operating system and its version
macOS 15.5 (24F74)
PDF.js version
5.4.54
Is the bug present in the latest PDF.js version?
Yes
Is a browser extension
No
Steps to reproduce the problem
import * as pdfjs from 'pdfjs-dist/legacy/build/pdf.mjs';
interface ExtractOptions {
pages?: number[];
maxSize?: number;
quality?: number;
fit?: 'inside' | 'outside';
}
async function extractImages(pdfBuffer: Buffer, options: ExtractOptions) {
const loadingTask = pdfjs.getDocument({
data: new Uint8Array(pdfBuffer),
cMapUrl: '/opt/nodejs/node_modules/pdfjs-dist/cmaps/',
cMapPacked: true,
standardFontDataUrl: '/opt/nodejs/node_modules/pdfjs-dist/standard_fonts/',
// enableHWA: true,
// verbosity: pdfjs.VerbosityLevel.INFOS,
});
const pdfDocument = await loadingTask.promise;
// if no pages are specified, use [0, ..., numPages - 1]
const pages = options?.pages || new Array(pdfDocument.numPages).fill(0).map((_, i) => i + 1);
const images: Buffer[] = [];
for (const index of pages) {
console.log('Rendering page', index, 'of', pages[pages.length - 1], '...');
const page = await pdfDocument.getPage(index);
// calculate viewport scale based on max dimension
const maxDimension = options?.maxSize || 4096;
const initialViewport = page.getViewport({ scale: 1.0 });
if (!initialViewport.width || !initialViewport.height) {
throw new Error('Invalid viewport dimensions');
}
const scale = (options?.fit === 'outside' ? Math.max : Math.min)(
maxDimension / initialViewport.width,
maxDimension / initialViewport.height,
);
const viewport = page.getViewport({ scale });
// render page
const canvasAndContext = (pdfDocument.canvasFactory as any).create(viewport.width, viewport.height);
const renderTask = page.render({
canvas: canvasAndContext.canvas,
canvasContext: canvasAndContext.context,
viewport: viewport,
intent: 'print',
});
await renderTask.promise;
page.cleanup();
// retrieve image
const image = canvasAndContext.canvas.toBuffer('image/jpeg', {
quality: (options?.quality || 80) / 100,
});
images.push(image);
}
void pdfDocument.cleanup();
return images;
}What is the expected behavior?
What went wrong?
Rendering page 1 of 1 ...
Info: page=1 - getOperatorList: time=62ms, len=749
file:///Users/robertmainzer/Workspace/ec2-express-backend/node_modules/pdfjs-dist/legacy/build/pdf.mjs:14431
ctx.setLineDash(dashArray);
^
Error: Failed to convert napi value Object into rust type `f64`
at CanvasGraphics.setDash (file:///Users/robertmainzer/Workspace/ec2-express-backend/node_modules/pdfjs-dist/legacy/build/pdf.mjs:14431:11)
at CanvasGraphics.executeOperatorList (file:///Users/robertmainzer/Workspace/ec2-express-backend/node_modules/pdfjs-dist/legacy/build/pdf.mjs:14243:20)
at InternalRenderTask._next (file:///Users/robertmainzer/Workspace/ec2-express-backend/node_modules/pdfjs-dist/legacy/build/pdf.mjs:19634:37) {
code: 'NumberExpected'
}
Node.js v22.12.0Link to a viewer
No response
Additional context
Code works for all pdf files, except this one.
In a web environment, the code works for the pdf file and no error is thrown. This appears only in Node.js, even though the file is exactly the same.
Reactions are currently unavailable