Skip to content
Snippets Groups Projects
pdfParser.ts 2.01 KiB
Newer Older
  • Learn to ignore specific revisions
  • Zdravko Iliev's avatar
    Zdravko Iliev committed
    import verifyPDF from "@ninja-labs/verify-pdf";
    import { PdfData } from "pdfdataextract";
    import { config } from "./config";
    import { IgetMetaResponse } from "./types";
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
    const { PDFDocument } = require("pdf-lib");
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
    
    class PDFparser {
      readonly document;
      readonly config;
    
      constructor(document: Buffer) {
        this.document = document;
        this.config = config;
      }
    
      getPDFMeta = async (): Promise<IgetMetaResponse> => {
        try {
          const pdfMeta = await PdfData.extract(this.document, config);
          const signaturesMeta = await verifyPDF(this.document);
    
          return {
            verified: signaturesMeta.verified,
            authenticity: signaturesMeta.authenticity,
            integrity: signaturesMeta.integrity,
            expired: signaturesMeta.expired,
            meta: {
              certs: signaturesMeta.certs,
            },
            pages: pdfMeta.pages,
            fingerpring: pdfMeta.fingerprint,
            creation_data: pdfMeta.info.CreationDate,
            creator: pdfMeta.info.Creator,
            author: pdfMeta.info.Author,
            title: pdfMeta.info.Title,
            description: pdfMeta.info.Keywords,
            mod_date: pdfMeta.info.ModDate,
          };
        } catch (error) {
          console.error(error);
          throw new Error("Could not get pdf metadata");
        }
      };
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
    
      insertQrCode = async (imgBytes: ArrayBuffer): Promise<ArrayBuffer> => {
        const pdfDoc = await PDFDocument.load(this.document);
        const img = await pdfDoc.embedPng(imgBytes);
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
        // const imagePage = pdfDoc.insertPage(0);
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
    
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
        const pages = pdfDoc.getPages();
        const firstPage = pages[0];
    
        const { width, height } = firstPage.getSize();
    
        firstPage.drawImage(img, {
          x: firstPage.getWidth() / 2 - img.width / 2,
          y: firstPage.getHeight() / 2 - img.height / 2,
          width: img.width,
          height: img.height,
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
        });
    
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
        // firstPage.drawImage(img, {
        //   x: 0,
        //   y: 0,
        //   width: firstPage.getWidth(),
        //   height: firstPage.getHeight(),
        // });
    
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
        const pdfBytes = await pdfDoc.save();
    
        return pdfBytes;
      };
    
    Zdravko Iliev's avatar
    Zdravko Iliev committed
    }
    
    export default PDFparser;