UNPKG

node-signpdf

Version:

DEPRECATED. Have a look at @signpdf/signpdf instead.

109 lines (89 loc) 3.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _pdfobject = _interopRequireDefault(require("../pdfkit/pdfobject")); var _pdfkitReferenceMock = _interopRequireDefault(require("../pdfkitReferenceMock")); var _removeTrailingNewLine = _interopRequireDefault(require("../removeTrailingNewLine")); var _const = require("../const"); var _pdfkitAddPlaceholder = _interopRequireDefault(require("../pdfkitAddPlaceholder")); var _getIndexFromRef = _interopRequireDefault(require("./getIndexFromRef")); var _readPdf = _interopRequireDefault(require("./readPdf")); var _getPageRef = _interopRequireDefault(require("./getPageRef")); var _createBufferRootWithAcroform = _interopRequireDefault(require("./createBufferRootWithAcroform")); var _createBufferPageWithAnnotation = _interopRequireDefault(require("./createBufferPageWithAnnotation")); var _createBufferTrailer = _interopRequireDefault(require("./createBufferTrailer")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const isContainBufferRootWithAcroform = pdf => { const bufferRootWithAcroformRefRegex = /\/AcroForm\s+(\d+\s\d+\sR)/g; const match = bufferRootWithAcroformRefRegex.exec(pdf.toString()); return match != null && match[1] != null && match[1] !== ''; }; /** * Adds a signature placeholder to a PDF Buffer. * * This contrasts with the default pdfkit-based implementation. * Parsing is done using simple string operations. * Adding is done with `Buffer.concat`. * This allows node-signpdf to be used on any PDF and * not only on a freshly created through PDFKit one. */ const plainAddPlaceholder = ({ pdfBuffer, reason, contactInfo = 'emailfromp1289@gmail.com', name = 'Name from p12', location = 'Location from p12', signatureLength = _const.DEFAULT_SIGNATURE_LENGTH, subFilter = _const.SUBFILTER_ADOBE_PKCS7_DETACHED }) => { let pdf = (0, _removeTrailingNewLine.default)(pdfBuffer); const info = (0, _readPdf.default)(pdf); const pageRef = (0, _getPageRef.default)(pdf, info); const pageIndex = (0, _getIndexFromRef.default)(info.xref, pageRef); const addedReferences = new Map(); const pdfKitMock = { ref: (input, additionalIndex) => { info.xref.maxIndex += 1; const index = additionalIndex != null ? additionalIndex : info.xref.maxIndex; addedReferences.set(index, pdf.length + 1); // + 1 new line pdf = Buffer.concat([pdf, Buffer.from('\n'), Buffer.from(`${index} 0 obj\n`), Buffer.from(_pdfobject.default.convert(input)), Buffer.from('\nendobj\n')]); return new _pdfkitReferenceMock.default(info.xref.maxIndex); }, page: { dictionary: new _pdfkitReferenceMock.default(pageIndex, { data: { Annots: [] } }) }, _root: { data: {} } }; const { form, widget } = (0, _pdfkitAddPlaceholder.default)({ pdf: pdfKitMock, pdfBuffer, reason, contactInfo, name, location, signatureLength, subFilter }); if (!isContainBufferRootWithAcroform(pdf)) { const rootIndex = (0, _getIndexFromRef.default)(info.xref, info.rootRef); addedReferences.set(rootIndex, pdf.length + 1); pdf = Buffer.concat([pdf, Buffer.from('\n'), (0, _createBufferRootWithAcroform.default)(pdf, info, form)]); } addedReferences.set(pageIndex, pdf.length + 1); pdf = Buffer.concat([pdf, Buffer.from('\n'), (0, _createBufferPageWithAnnotation.default)(pdf, info, pageRef, widget)]); pdf = Buffer.concat([pdf, Buffer.from('\n'), (0, _createBufferTrailer.default)(pdf, info, addedReferences)]); return pdf; }; var _default = plainAddPlaceholder; exports.default = _default;