@pdfme/pdf-lib
Version:
Create and modify PDF files with JavaScript
81 lines • 3.46 kB
JavaScript
"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