Skip to content

Commit

Permalink
[api-minor] Replace the canvas package with @napi-rs/canvas
Browse files Browse the repository at this point in the history
The `@napi-rs/canvas` package has fewer dependencies, which should *hopefully* make installing and using it easier for `pdfjs-dist` end-users. (Over the years we've seen, repeatedly, that `canvas` can be difficult to install successfully.)
Furthermore, this package includes more functionality (such as `Path2D`) which reduces the overall number of dependencies in the PDF.js project.

One point to note is that `@napi-rs/canvas` is a fair bit newer than `canvas`, and has a lot fewer users, however looking at the commit history it does seem to be actively maintained.

Note that I've successfully tested the [Node.js examples](https://github.com/mozilla/pdf.js/tree/master/examples/node), in particular the `pdf2png` one, with this patch applied and things appear to work fine.

Please see:
 - https://www.npmjs.com/package/@napi-rs/canvas
 - https://github.com/Brooooooklyn/canvas
  • Loading branch information
Snuffleupagus committed Nov 8, 2024
1 parent bff6738 commit aaea218
Show file tree
Hide file tree
Showing 6 changed files with 186 additions and 100 deletions.
3 changes: 0 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,6 @@ all dependencies for PDF.js:

$ npm install

> [!NOTE]
> On MacOS M1/M2 you may see some `node-gyp`-related errors when running `npm install`. This is because one of our dependencies, `"canvas"`, does not provide pre-built binaries for this platform and instead `npm` will try to build it from source. Please make sure to first install the necessary native dependencies using `brew`: https://github.com/Automattic/node-canvas#compiling.
Finally, you need to start a local web server as some browsers do not allow opening
PDF files using a `file://` URL. Run:

Expand Down
2 changes: 1 addition & 1 deletion examples/node/pdf2png/pdf2png.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ try {
const renderTask = page.render(renderContext);
await renderTask.promise;
// Convert the canvas to an image buffer.
const image = canvasAndContext.canvas.toBuffer();
const image = canvasAndContext.canvas.toBuffer("image/png");
fs.writeFile("output.png", image, function (error) {
if (error) {
console.error("Error: " + error);
Expand Down
3 changes: 1 addition & 2 deletions gulpfile.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -2256,8 +2256,7 @@ function packageJson() {
bugs: DIST_BUGS_URL,
license: DIST_LICENSE,
optionalDependencies: {
canvas: "^3.0.0-rc2",
path2d: "^0.2.1",
"@napi-rs/canvas": "^0.1.60",
},
browser: {
canvas: false,
Expand Down
238 changes: 175 additions & 63 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@
"@jazzer.js/core": "^2.1.0",
"@metalsmith/layouts": "^2.7.0",
"@metalsmith/markdown": "^1.10.0",
"@napi-rs/canvas": "^0.1.60",
"@types/node": "^22.8.7",
"autoprefixer": "^10.4.20",
"babel-loader": "^9.2.1",
"caniuse-lite": "^1.0.30001677",
"canvas": "^3.0.0-rc2",
"core-js": "^3.39.0",
"eslint": "^8.57.1",
"eslint-plugin-import": "^2.31.0",
Expand All @@ -37,7 +37,6 @@
"metalsmith": "^2.6.3",
"metalsmith-html-relative": "^2.0.5",
"ordered-read-streams": "^2.0.0",
"path2d": "^0.2.1",
"pngjs": "^7.0.0",
"postcss": "^8.4.47",
"postcss-dark-theme-class": "^1.3.0",
Expand Down
Loading

0 comments on commit aaea218

Please sign in to comment.