Oussama Mg
Oussama Mg

Reputation: 153

how to digitally sign a PDF document with a certificat using Javascript?

i was looking for a solution to digitally sign a pdf with a self-signed certificat and came across a video in youtube explaining the process using pdf-lib and node-signpdf libraries. However, after following the instructions it didnt work as intended and encountered a problem:

repo : https://github.com/RichardBray/pdf_sign

Demo ( 8 mins video ) : https://www.youtube.com/watch?v=OFZK5lc70OI&list=PLXUfmx2SIgyICZP-rA84Sle_ghq30W89N&index=4&t=1s

import SignPDF from "./SignPDF";
import fs from "node:fs";
import path from "node:path";

async function main() {
  const pdfBuffer = new SignPDF(
    path.resolve("test_assets/minions.pdf"),
    path.resolve("test_assets/certificate.p12")
  );

  const signedDocs = await pdfBuffer.signPDF();
  const randomNumber = Math.floor(Math.random() * 5000);
  const pdfName = `./exports/exported_file_${randomNumber}.pdf`;

  fs.writeFileSync(pdfName, signedDocs);
  console.log(`New Signed PDF created called: ${pdfName}`);
}

main();
> [email protected] start
> npm run build && node dist/index.js

> [email protected] build
> ./node_modules/.bin/babel ./src -d ./dist

'.' is not recognized as an internal command
or external, an executable program or a batch file.
Uncaught SyntaxError c:\\Users\\ACER\\Documents\\GitHub\\pdf_sign\\src\\index.js:1
import SignPDF from "./SignPDF";
^^^^^^

SyntaxError: Cannot use import statement outside a module
at compileFunction (undefined:352:18)
at wrapSafe (undefined:1031:15)
at Module.\_compile (undefined:1065:27)
at Module.\_extensions..js (undefined:1153:10)
at Module.load (undefined:981:32)
at Module.\_load (undefined:822:12)
at executeUserEntryPoint (undefined:81:12)
at \<anonymous\> (undefined:17:47)

Upvotes: 2

Views: 3623

Answers (2)

mpen
mpen

Reputation: 282775

SyntaxError: Cannot use import statement outside a module

Means Node doesn't recognize your script as a module.

You can either add "type": "module" to your package.json or change the file extension to .mjs and then Node should allow you to use the import keyword.

Upvotes: 0

Oussama Mg
Oussama Mg

Reputation: 153

it appears that the problem is OS related. In fact , the code works fine under linux OS but have some issues with Windows OS related to import command. For windows OS replacing "import" commands with "require" commands solves the problem.

BEFORE:

import SignPDF from "./SignPDF";
import fs from "node:fs";
import path from "node:path";

AFTER :

const SignPDF =  require("./SignPDF");
const fs =  require("node:fs");
const path =  require("node:path");

Edit: Whenever imports are found in the project they should be replaced with require commands . https://jobs.czconsultants.com/utils/convert-imports-to-require-online/0 this website helps converting multiple commands fast

Upvotes: 1

Related Questions