A very simple wrapper for qpdf which is performs content-preserving transformations on PDF files. It includes encrypting and decrypting PDF files with AES 256, AES 128, RC4 (128 & 40) encryption algorithms. This is a fork of nrhirani/node-qpdf, adding Promises and Types, and is kept mostly up to date with qpdf
.
- qpdf
- Version 11 is the minimum version for node-qpdf2 4.0+
- Install qpdf:
- Download qpdf
- Install node-qpdf:
npm install node-qpdf2
This package can be uses on serverless platforms by using your vendor's layers functionality. Use the zip release from qpdf
as the layer. For example, qpdf-11.1.0-bin-linux-x86_64.zip
can be directly uploaded as a layer, and has been tested using Amazon Lambda.
You can encrypt your PDF by following:
import { encrypt } from "node-qpdf2";
const pdf = {
input: "./test/example.pdf",
output: "/tmp/encrypted.pdf",
password: "1234",
}
await encrypt(pdf);
Please see src/encrypt.ts for the latest options, as well as QPDF's documentation for information on what each restriction does.
import { encrypt } from "node-qpdf2";
const options = {
input: "./test/example.pdf",
keyLength: 128,
output: "/tmp/encrypted.pdf",
password: 'YOUR_PASSWORD_TO_ENCRYPT',
restrictions: {
print: 'low',
useAes: 'y'
}
}
await encrypt(options);
You can decrypt your PDF by following:
import { decrypt } from "node-qpdf2";
const options = {
input: "/tmp/encrypted.pdf",
output: "/tmp/decrypted.pdf",
password: "YOUR_PASSWORD_TO_DECRYPT_PDF",
}
await decrypt(options);
You can retrieve encryption information using the info function. This function will return a Promise. See here for more information.
import { info } from "node-qpdf2";
const options = {
input: "/tmp/encrypted.pdf",
password: "FILE_PASSWORD",
}
console.log(await info(options));
If the file is not encrypted, the result will be "File is not encrypted".
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s |
---|---|---|---|---|---|
All files | 100 | 100 | 100 | 100 | |
decrypt.ts | 100 | 100 | 100 | 100 | |
encrypt.ts | 100 | 100 | 100 | 100 | |
index.ts | 100 | 100 | 100 | 100 | |
info.ts | 100 | 100 | 100 | 100 | |
spawn.ts | 100 | 100 | 100 | 100 | |
utils.ts | 100 | 100 | 100 | 100 |
Maintained by Kyle McNally.
Bug reports and pull requests are welcome on GitHub at https://github.com/Sparticuz/node-qpdf2.
Sponsorship is also welcome
The npm package is available as open source under the terms of the MIT License.