UNPKG

@pdfme/pdf-lib

Version:

Create and modify PDF files with JavaScript

81 lines 3.46 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const errors_1 = require("../errors"); const PDFName_1 = __importDefault(require("../objects/PDFName")); const PDFNumber_1 = __importDefault(require("../objects/PDFNumber")); const PDFRef_1 = __importDefault(require("../objects/PDFRef")); const ByteStream_1 = __importDefault(require("./ByteStream")); const PDFObjectParser_1 = __importDefault(require("./PDFObjectParser")); const utils_1 = require("../../utils"); class PDFObjectStreamParser extends PDFObjectParser_1.default { constructor(rawStream, shouldWaitForTick) { super(ByteStream_1.default.fromPDFRawStream(rawStream), rawStream.dict.context); Object.defineProperty(this, "alreadyParsed", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "shouldWaitForTick", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "firstOffset", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "objectCount", { enumerable: true, configurable: true, writable: true, value: void 0 }); const { dict } = rawStream; this.alreadyParsed = false; this.shouldWaitForTick = shouldWaitForTick || (() => false); this.firstOffset = dict.lookup(PDFName_1.default.of('First'), PDFNumber_1.default).asNumber(); this.objectCount = dict.lookup(PDFName_1.default.of('N'), PDFNumber_1.default).asNumber(); } async parseIntoContext() { if (this.alreadyParsed) { throw new errors_1.ReparseError('PDFObjectStreamParser', 'parseIntoContext'); } this.alreadyParsed = true; const offsetsAndObjectNumbers = this.parseOffsetsAndObjectNumbers(); for (let idx = 0, len = offsetsAndObjectNumbers.length; idx < len; idx++) { const { objectNumber, offset } = offsetsAndObjectNumbers[idx]; this.bytes.moveTo(this.firstOffset + offset); const ref = PDFRef_1.default.of(objectNumber, 0); const object = this.parseObject(ref); this.context.assign(ref, object); if (this.shouldWaitForTick()) await (0, utils_1.waitForTick)(); } } parseOffsetsAndObjectNumbers() { const offsetsAndObjectNumbers = []; for (let idx = 0, len = this.objectCount; idx < len; idx++) { this.skipWhitespaceAndComments(); const objectNumber = this.parseRawInt(); this.skipWhitespaceAndComments(); const offset = this.parseRawInt(); offsetsAndObjectNumbers.push({ objectNumber, offset }); } return offsetsAndObjectNumbers; } } Object.defineProperty(PDFObjectStreamParser, "forStream", { enumerable: true, configurable: true, writable: true, value: (rawStream, shouldWaitForTick) => new PDFObjectStreamParser(rawStream, shouldWaitForTick) }); exports.default = PDFObjectStreamParser; //# sourceMappingURL=PDFObjectStreamParser.js.map