-
Notifications
You must be signed in to change notification settings - Fork 10.4k
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.0
Link 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.