first commit
This commit is contained in:
15
node_modules/pdf-lib/es/core/parser/BaseParser.d.ts
generated
vendored
Normal file
15
node_modules/pdf-lib/es/core/parser/BaseParser.d.ts
generated
vendored
Normal file
@@ -0,0 +1,15 @@
|
||||
import ByteStream from "./ByteStream";
|
||||
declare class BaseParser {
|
||||
protected readonly bytes: ByteStream;
|
||||
protected readonly capNumbers: boolean;
|
||||
constructor(bytes: ByteStream, capNumbers?: boolean);
|
||||
protected parseRawInt(): number;
|
||||
protected parseRawNumber(): number;
|
||||
protected skipWhitespace(): void;
|
||||
protected skipLine(): void;
|
||||
protected skipComment(): boolean;
|
||||
protected skipWhitespaceAndComments(): void;
|
||||
protected matchKeyword(keyword: number[]): boolean;
|
||||
}
|
||||
export default BaseParser;
|
||||
//# sourceMappingURL=BaseParser.d.ts.map
|
||||
1
node_modules/pdf-lib/es/core/parser/BaseParser.d.ts.map
generated
vendored
Normal file
1
node_modules/pdf-lib/es/core/parser/BaseParser.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"BaseParser.d.ts","sourceRoot":"","sources":["../../../src/core/parser/BaseParser.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,qBAAmC;AASpD,cAAM,UAAU;IACd,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IACrC,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;gBAE3B,KAAK,EAAE,UAAU,EAAE,UAAU,UAAQ;IAKjD,SAAS,CAAC,WAAW,IAAI,MAAM;IAoB/B,SAAS,CAAC,cAAc,IAAI,MAAM;IAsClC,SAAS,CAAC,cAAc,IAAI,IAAI;IAMhC,SAAS,CAAC,QAAQ,IAAI,IAAI;IAQ1B,SAAS,CAAC,WAAW,IAAI,OAAO;IAUhC,SAAS,CAAC,yBAAyB,IAAI,IAAI;IAK3C,SAAS,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO;CAUnD;AAED,eAAe,UAAU,CAAC"}
|
||||
107
node_modules/pdf-lib/es/core/parser/BaseParser.js
generated
vendored
Normal file
107
node_modules/pdf-lib/es/core/parser/BaseParser.js
generated
vendored
Normal file
@@ -0,0 +1,107 @@
|
||||
import { NumberParsingError } from "../errors";
|
||||
import CharCodes from "../syntax/CharCodes";
|
||||
import { IsDigit, IsNumeric } from "../syntax/Numeric";
|
||||
import { IsWhitespace } from "../syntax/Whitespace";
|
||||
import { charFromCode } from "../../utils";
|
||||
var Newline = CharCodes.Newline, CarriageReturn = CharCodes.CarriageReturn;
|
||||
// TODO: Throw error if eof is reached before finishing object parse...
|
||||
var BaseParser = /** @class */ (function () {
|
||||
function BaseParser(bytes, capNumbers) {
|
||||
if (capNumbers === void 0) { capNumbers = false; }
|
||||
this.bytes = bytes;
|
||||
this.capNumbers = capNumbers;
|
||||
}
|
||||
BaseParser.prototype.parseRawInt = function () {
|
||||
var value = '';
|
||||
while (!this.bytes.done()) {
|
||||
var byte = this.bytes.peek();
|
||||
if (!IsDigit[byte])
|
||||
break;
|
||||
value += charFromCode(this.bytes.next());
|
||||
}
|
||||
var numberValue = Number(value);
|
||||
if (!value || !isFinite(numberValue)) {
|
||||
throw new NumberParsingError(this.bytes.position(), value);
|
||||
}
|
||||
return numberValue;
|
||||
};
|
||||
// TODO: Maybe handle exponential format?
|
||||
// TODO: Compare performance of string concatenation to charFromCode(...bytes)
|
||||
BaseParser.prototype.parseRawNumber = function () {
|
||||
var value = '';
|
||||
// Parse integer-part, the leading (+ | - | . | 0-9)
|
||||
while (!this.bytes.done()) {
|
||||
var byte = this.bytes.peek();
|
||||
if (!IsNumeric[byte])
|
||||
break;
|
||||
value += charFromCode(this.bytes.next());
|
||||
if (byte === CharCodes.Period)
|
||||
break;
|
||||
}
|
||||
// Parse decimal-part, the trailing (0-9)
|
||||
while (!this.bytes.done()) {
|
||||
var byte = this.bytes.peek();
|
||||
if (!IsDigit[byte])
|
||||
break;
|
||||
value += charFromCode(this.bytes.next());
|
||||
}
|
||||
var numberValue = Number(value);
|
||||
if (!value || !isFinite(numberValue)) {
|
||||
throw new NumberParsingError(this.bytes.position(), value);
|
||||
}
|
||||
if (numberValue > Number.MAX_SAFE_INTEGER) {
|
||||
if (this.capNumbers) {
|
||||
var msg = "Parsed number that is too large for some PDF readers: " + value + ", using Number.MAX_SAFE_INTEGER instead.";
|
||||
console.warn(msg);
|
||||
return Number.MAX_SAFE_INTEGER;
|
||||
}
|
||||
else {
|
||||
var msg = "Parsed number that is too large for some PDF readers: " + value + ", not capping.";
|
||||
console.warn(msg);
|
||||
}
|
||||
}
|
||||
return numberValue;
|
||||
};
|
||||
BaseParser.prototype.skipWhitespace = function () {
|
||||
while (!this.bytes.done() && IsWhitespace[this.bytes.peek()]) {
|
||||
this.bytes.next();
|
||||
}
|
||||
};
|
||||
BaseParser.prototype.skipLine = function () {
|
||||
while (!this.bytes.done()) {
|
||||
var byte = this.bytes.peek();
|
||||
if (byte === Newline || byte === CarriageReturn)
|
||||
return;
|
||||
this.bytes.next();
|
||||
}
|
||||
};
|
||||
BaseParser.prototype.skipComment = function () {
|
||||
if (this.bytes.peek() !== CharCodes.Percent)
|
||||
return false;
|
||||
while (!this.bytes.done()) {
|
||||
var byte = this.bytes.peek();
|
||||
if (byte === Newline || byte === CarriageReturn)
|
||||
return true;
|
||||
this.bytes.next();
|
||||
}
|
||||
return true;
|
||||
};
|
||||
BaseParser.prototype.skipWhitespaceAndComments = function () {
|
||||
this.skipWhitespace();
|
||||
while (this.skipComment())
|
||||
this.skipWhitespace();
|
||||
};
|
||||
BaseParser.prototype.matchKeyword = function (keyword) {
|
||||
var initialOffset = this.bytes.offset();
|
||||
for (var idx = 0, len = keyword.length; idx < len; idx++) {
|
||||
if (this.bytes.done() || this.bytes.next() !== keyword[idx]) {
|
||||
this.bytes.moveTo(initialOffset);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
};
|
||||
return BaseParser;
|
||||
}());
|
||||
export default BaseParser;
|
||||
//# sourceMappingURL=BaseParser.js.map
|
||||
1
node_modules/pdf-lib/es/core/parser/BaseParser.js.map
generated
vendored
Normal file
1
node_modules/pdf-lib/es/core/parser/BaseParser.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"BaseParser.js","sourceRoot":"","sources":["../../../src/core/parser/BaseParser.ts"],"names":[],"mappings":"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"}
|
||||
27
node_modules/pdf-lib/es/core/parser/ByteStream.d.ts
generated
vendored
Normal file
27
node_modules/pdf-lib/es/core/parser/ByteStream.d.ts
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
||||
import PDFRawStream from "../objects/PDFRawStream";
|
||||
declare class ByteStream {
|
||||
static of: (bytes: Uint8Array) => ByteStream;
|
||||
static fromPDFRawStream: (rawStream: PDFRawStream) => ByteStream;
|
||||
private readonly bytes;
|
||||
private readonly length;
|
||||
private idx;
|
||||
private line;
|
||||
private column;
|
||||
constructor(bytes: Uint8Array);
|
||||
moveTo(offset: number): void;
|
||||
next(): number;
|
||||
assertNext(expected: number): number;
|
||||
peek(): number;
|
||||
peekAhead(steps: number): number;
|
||||
peekAt(offset: number): number;
|
||||
done(): boolean;
|
||||
offset(): number;
|
||||
slice(start: number, end: number): Uint8Array;
|
||||
position(): {
|
||||
line: number;
|
||||
column: number;
|
||||
offset: number;
|
||||
};
|
||||
}
|
||||
export default ByteStream;
|
||||
//# sourceMappingURL=ByteStream.d.ts.map
|
||||
1
node_modules/pdf-lib/es/core/parser/ByteStream.d.ts.map
generated
vendored
Normal file
1
node_modules/pdf-lib/es/core/parser/ByteStream.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"ByteStream.d.ts","sourceRoot":"","sources":["../../../src/core/parser/ByteStream.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,gCAAsC;AAKzD,cAAM,UAAU;IACd,MAAM,CAAC,EAAE,UAAW,UAAU,gBAA2B;IAEzD,MAAM,CAAC,gBAAgB,cAAe,YAAY,gBACM;IAExD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,OAAO,CAAC,GAAG,CAAK;IAChB,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,MAAM,CAAK;gBAEP,KAAK,EAAE,UAAU;IAK7B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5B,IAAI,IAAI,MAAM;IAWd,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAOpC,IAAI,IAAI,MAAM;IAId,SAAS,CAAC,KAAK,EAAE,MAAM;IAIvB,MAAM,CAAC,MAAM,EAAE,MAAM;IAIrB,IAAI,IAAI,OAAO;IAIf,MAAM,IAAI,MAAM;IAIhB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU;IAI7C,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;CAG7D;AAED,eAAe,UAAU,CAAC"}
|
||||
61
node_modules/pdf-lib/es/core/parser/ByteStream.js
generated
vendored
Normal file
61
node_modules/pdf-lib/es/core/parser/ByteStream.js
generated
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
import { NextByteAssertionError } from "../errors";
|
||||
import { decodePDFRawStream } from "../streams/decode";
|
||||
import CharCodes from "../syntax/CharCodes";
|
||||
// TODO: See how line/col tracking affects performance
|
||||
var ByteStream = /** @class */ (function () {
|
||||
function ByteStream(bytes) {
|
||||
this.idx = 0;
|
||||
this.line = 0;
|
||||
this.column = 0;
|
||||
this.bytes = bytes;
|
||||
this.length = this.bytes.length;
|
||||
}
|
||||
ByteStream.prototype.moveTo = function (offset) {
|
||||
this.idx = offset;
|
||||
};
|
||||
ByteStream.prototype.next = function () {
|
||||
var byte = this.bytes[this.idx++];
|
||||
if (byte === CharCodes.Newline) {
|
||||
this.line += 1;
|
||||
this.column = 0;
|
||||
}
|
||||
else {
|
||||
this.column += 1;
|
||||
}
|
||||
return byte;
|
||||
};
|
||||
ByteStream.prototype.assertNext = function (expected) {
|
||||
if (this.peek() !== expected) {
|
||||
throw new NextByteAssertionError(this.position(), expected, this.peek());
|
||||
}
|
||||
return this.next();
|
||||
};
|
||||
ByteStream.prototype.peek = function () {
|
||||
return this.bytes[this.idx];
|
||||
};
|
||||
ByteStream.prototype.peekAhead = function (steps) {
|
||||
return this.bytes[this.idx + steps];
|
||||
};
|
||||
ByteStream.prototype.peekAt = function (offset) {
|
||||
return this.bytes[offset];
|
||||
};
|
||||
ByteStream.prototype.done = function () {
|
||||
return this.idx >= this.length;
|
||||
};
|
||||
ByteStream.prototype.offset = function () {
|
||||
return this.idx;
|
||||
};
|
||||
ByteStream.prototype.slice = function (start, end) {
|
||||
return this.bytes.slice(start, end);
|
||||
};
|
||||
ByteStream.prototype.position = function () {
|
||||
return { line: this.line, column: this.column, offset: this.idx };
|
||||
};
|
||||
ByteStream.of = function (bytes) { return new ByteStream(bytes); };
|
||||
ByteStream.fromPDFRawStream = function (rawStream) {
|
||||
return ByteStream.of(decodePDFRawStream(rawStream).decode());
|
||||
};
|
||||
return ByteStream;
|
||||
}());
|
||||
export default ByteStream;
|
||||
//# sourceMappingURL=ByteStream.js.map
|
||||
1
node_modules/pdf-lib/es/core/parser/ByteStream.js.map
generated
vendored
Normal file
1
node_modules/pdf-lib/es/core/parser/ByteStream.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"ByteStream.js","sourceRoot":"","sources":["../../../src/core/parser/ByteStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,kBAAwB;AAEzD,OAAO,EAAE,kBAAkB,EAAE,0BAAgC;AAC7D,OAAO,SAAS,4BAAkC;AAElD,sDAAsD;AACtD;IAaE,oBAAY,KAAiB;QAJrB,QAAG,GAAG,CAAC,CAAC;QACR,SAAI,GAAG,CAAC,CAAC;QACT,WAAM,GAAG,CAAC,CAAC;QAGjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,2BAAM,GAAN,UAAO,MAAc;QACnB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC;IACpB,CAAC;IAED,yBAAI,GAAJ;QACE,IAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACpC,IAAI,IAAI,KAAK,SAAS,CAAC,OAAO,EAAE;YAC9B,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACjB;aAAM;YACL,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;SAClB;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+BAAU,GAAV,UAAW,QAAgB;QACzB,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,QAAQ,EAAE;YAC5B,MAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;SAC1E;QACD,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACrB,CAAC;IAED,yBAAI,GAAJ;QACE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,8BAAS,GAAT,UAAU,KAAa;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,2BAAM,GAAN,UAAO,MAAc;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,yBAAI,GAAJ;QACE,OAAO,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC;IACjC,CAAC;IAED,2BAAM,GAAN;QACE,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;IAED,0BAAK,GAAL,UAAM,KAAa,EAAE,GAAW;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,6BAAQ,GAAR;QACE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;IACpE,CAAC;IAjEM,aAAE,GAAG,UAAC,KAAiB,IAAK,OAAA,IAAI,UAAU,CAAC,KAAK,CAAC,EAArB,CAAqB,CAAC;IAElD,2BAAgB,GAAG,UAAC,SAAuB;QAChD,OAAA,UAAU,CAAC,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC;IAArD,CAAqD,CAAC;IA+D1D,iBAAC;CAAA,AAnED,IAmEC;AAED,eAAe,UAAU,CAAC"}
|
||||
30
node_modules/pdf-lib/es/core/parser/PDFObjectParser.d.ts
generated
vendored
Normal file
30
node_modules/pdf-lib/es/core/parser/PDFObjectParser.d.ts
generated
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
import { Position } from "../errors";
|
||||
import PDFArray from "../objects/PDFArray";
|
||||
import PDFDict from "../objects/PDFDict";
|
||||
import PDFHexString from "../objects/PDFHexString";
|
||||
import PDFName from "../objects/PDFName";
|
||||
import PDFNumber from "../objects/PDFNumber";
|
||||
import PDFObject from "../objects/PDFObject";
|
||||
import PDFRef from "../objects/PDFRef";
|
||||
import PDFStream from "../objects/PDFStream";
|
||||
import PDFString from "../objects/PDFString";
|
||||
import BaseParser from "./BaseParser";
|
||||
import ByteStream from "./ByteStream";
|
||||
import PDFContext from "../PDFContext";
|
||||
declare class PDFObjectParser extends BaseParser {
|
||||
static forBytes: (bytes: Uint8Array, context: PDFContext, capNumbers?: boolean | undefined) => PDFObjectParser;
|
||||
static forByteStream: (byteStream: ByteStream, context: PDFContext, capNumbers?: boolean) => PDFObjectParser;
|
||||
protected readonly context: PDFContext;
|
||||
constructor(byteStream: ByteStream, context: PDFContext, capNumbers?: boolean);
|
||||
parseObject(): PDFObject;
|
||||
protected parseNumberOrRef(): PDFNumber | PDFRef;
|
||||
protected parseHexString(): PDFHexString;
|
||||
protected parseString(): PDFString;
|
||||
protected parseName(): PDFName;
|
||||
protected parseArray(): PDFArray;
|
||||
protected parseDict(): PDFDict;
|
||||
protected parseDictOrStream(): PDFDict | PDFStream;
|
||||
protected findEndOfStreamFallback(startPos: Position): number;
|
||||
}
|
||||
export default PDFObjectParser;
|
||||
//# sourceMappingURL=PDFObjectParser.d.ts.map
|
||||
1
node_modules/pdf-lib/es/core/parser/PDFObjectParser.d.ts.map
generated
vendored
Normal file
1
node_modules/pdf-lib/es/core/parser/PDFObjectParser.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"PDFObjectParser.d.ts","sourceRoot":"","sources":["../../../src/core/parser/PDFObjectParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,QAAQ,EAET,kBAAwB;AACzB,OAAO,QAAQ,4BAAkC;AAEjD,OAAO,OAAoB,2BAAiC;AAC5D,OAAO,YAAY,gCAAsC;AACzD,OAAO,OAAO,2BAAiC;AAE/C,OAAO,SAAS,6BAAmC;AACnD,OAAO,SAAS,6BAAmC;AAEnD,OAAO,MAAM,0BAAgC;AAC7C,OAAO,SAAS,6BAAmC;AACnD,OAAO,SAAS,6BAAmC;AACnD,OAAO,UAAU,qBAAmC;AACpD,OAAO,UAAU,qBAAmC;AACpD,OAAO,UAAU,sBAA4B;AAY7C,cAAM,eAAgB,SAAQ,UAAU;IACtC,MAAM,CAAC,QAAQ,UACN,UAAU,WACR,UAAU,uDAE+C;IAEpE,MAAM,CAAC,aAAa,eACN,UAAU,WACb,UAAU,2CAEqC;IAE1D,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;gBAE3B,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,UAAQ;IAM3E,WAAW,IAAI,SAAS;IAwBxB,SAAS,CAAC,gBAAgB,IAAI,SAAS,GAAG,MAAM;IAmBhD,SAAS,CAAC,cAAc,IAAI,YAAY;IAYxC,SAAS,CAAC,WAAW,IAAI,SAAS;IAkClC,SAAS,CAAC,SAAS,IAAI,OAAO;IAc9B,SAAS,CAAC,UAAU,IAAI,QAAQ;IAchC,SAAS,CAAC,SAAS,IAAI,OAAO;IAmC9B,SAAS,CAAC,iBAAiB,IAAI,OAAO,GAAG,SAAS;IAsClD,SAAS,CAAC,uBAAuB,CAAC,QAAQ,EAAE,QAAQ;CA4BrD;AAED,eAAe,eAAe,CAAC"}
|
||||
231
node_modules/pdf-lib/es/core/parser/PDFObjectParser.js
generated
vendored
Normal file
231
node_modules/pdf-lib/es/core/parser/PDFObjectParser.js
generated
vendored
Normal file
@@ -0,0 +1,231 @@
|
||||
import { __extends } from "tslib";
|
||||
import { PDFObjectParsingError, PDFStreamParsingError, UnbalancedParenthesisError, } from "../errors";
|
||||
import PDFArray from "../objects/PDFArray";
|
||||
import PDFBool from "../objects/PDFBool";
|
||||
import PDFDict from "../objects/PDFDict";
|
||||
import PDFHexString from "../objects/PDFHexString";
|
||||
import PDFName from "../objects/PDFName";
|
||||
import PDFNull from "../objects/PDFNull";
|
||||
import PDFNumber from "../objects/PDFNumber";
|
||||
import PDFRawStream from "../objects/PDFRawStream";
|
||||
import PDFRef from "../objects/PDFRef";
|
||||
import PDFString from "../objects/PDFString";
|
||||
import BaseParser from "./BaseParser";
|
||||
import ByteStream from "./ByteStream";
|
||||
import PDFCatalog from "../structures/PDFCatalog";
|
||||
import PDFPageLeaf from "../structures/PDFPageLeaf";
|
||||
import PDFPageTree from "../structures/PDFPageTree";
|
||||
import CharCodes from "../syntax/CharCodes";
|
||||
import { IsDelimiter } from "../syntax/Delimiters";
|
||||
import { Keywords } from "../syntax/Keywords";
|
||||
import { IsDigit, IsNumeric } from "../syntax/Numeric";
|
||||
import { IsWhitespace } from "../syntax/Whitespace";
|
||||
import { charFromCode } from "../../utils";
|
||||
// TODO: Throw error if eof is reached before finishing object parse...
|
||||
var PDFObjectParser = /** @class */ (function (_super) {
|
||||
__extends(PDFObjectParser, _super);
|
||||
function PDFObjectParser(byteStream, context, capNumbers) {
|
||||
if (capNumbers === void 0) { capNumbers = false; }
|
||||
var _this = _super.call(this, byteStream, capNumbers) || this;
|
||||
_this.context = context;
|
||||
return _this;
|
||||
}
|
||||
// TODO: Is it possible to reduce duplicate parsing for ref lookaheads?
|
||||
PDFObjectParser.prototype.parseObject = function () {
|
||||
this.skipWhitespaceAndComments();
|
||||
if (this.matchKeyword(Keywords.true))
|
||||
return PDFBool.True;
|
||||
if (this.matchKeyword(Keywords.false))
|
||||
return PDFBool.False;
|
||||
if (this.matchKeyword(Keywords.null))
|
||||
return PDFNull;
|
||||
var byte = this.bytes.peek();
|
||||
if (byte === CharCodes.LessThan &&
|
||||
this.bytes.peekAhead(1) === CharCodes.LessThan) {
|
||||
return this.parseDictOrStream();
|
||||
}
|
||||
if (byte === CharCodes.LessThan)
|
||||
return this.parseHexString();
|
||||
if (byte === CharCodes.LeftParen)
|
||||
return this.parseString();
|
||||
if (byte === CharCodes.ForwardSlash)
|
||||
return this.parseName();
|
||||
if (byte === CharCodes.LeftSquareBracket)
|
||||
return this.parseArray();
|
||||
if (IsNumeric[byte])
|
||||
return this.parseNumberOrRef();
|
||||
throw new PDFObjectParsingError(this.bytes.position(), byte);
|
||||
};
|
||||
PDFObjectParser.prototype.parseNumberOrRef = function () {
|
||||
var firstNum = this.parseRawNumber();
|
||||
this.skipWhitespaceAndComments();
|
||||
var lookaheadStart = this.bytes.offset();
|
||||
if (IsDigit[this.bytes.peek()]) {
|
||||
var secondNum = this.parseRawNumber();
|
||||
this.skipWhitespaceAndComments();
|
||||
if (this.bytes.peek() === CharCodes.R) {
|
||||
this.bytes.assertNext(CharCodes.R);
|
||||
return PDFRef.of(firstNum, secondNum);
|
||||
}
|
||||
}
|
||||
this.bytes.moveTo(lookaheadStart);
|
||||
return PDFNumber.of(firstNum);
|
||||
};
|
||||
// TODO: Maybe update PDFHexString.of() logic to remove whitespace and validate input?
|
||||
PDFObjectParser.prototype.parseHexString = function () {
|
||||
var value = '';
|
||||
this.bytes.assertNext(CharCodes.LessThan);
|
||||
while (!this.bytes.done() && this.bytes.peek() !== CharCodes.GreaterThan) {
|
||||
value += charFromCode(this.bytes.next());
|
||||
}
|
||||
this.bytes.assertNext(CharCodes.GreaterThan);
|
||||
return PDFHexString.of(value);
|
||||
};
|
||||
PDFObjectParser.prototype.parseString = function () {
|
||||
var nestingLvl = 0;
|
||||
var isEscaped = false;
|
||||
var value = '';
|
||||
while (!this.bytes.done()) {
|
||||
var byte = this.bytes.next();
|
||||
value += charFromCode(byte);
|
||||
// Check for unescaped parenthesis
|
||||
if (!isEscaped) {
|
||||
if (byte === CharCodes.LeftParen)
|
||||
nestingLvl += 1;
|
||||
if (byte === CharCodes.RightParen)
|
||||
nestingLvl -= 1;
|
||||
}
|
||||
// Track whether current character is being escaped or not
|
||||
if (byte === CharCodes.BackSlash) {
|
||||
isEscaped = !isEscaped;
|
||||
}
|
||||
else if (isEscaped) {
|
||||
isEscaped = false;
|
||||
}
|
||||
// Once (if) the unescaped parenthesis balance out, return their contents
|
||||
if (nestingLvl === 0) {
|
||||
// Remove the outer parens so they aren't part of the contents
|
||||
return PDFString.of(value.substring(1, value.length - 1));
|
||||
}
|
||||
}
|
||||
throw new UnbalancedParenthesisError(this.bytes.position());
|
||||
};
|
||||
// TODO: Compare performance of string concatenation to charFromCode(...bytes)
|
||||
// TODO: Maybe preallocate small Uint8Array if can use charFromCode?
|
||||
PDFObjectParser.prototype.parseName = function () {
|
||||
this.bytes.assertNext(CharCodes.ForwardSlash);
|
||||
var name = '';
|
||||
while (!this.bytes.done()) {
|
||||
var byte = this.bytes.peek();
|
||||
if (IsWhitespace[byte] || IsDelimiter[byte])
|
||||
break;
|
||||
name += charFromCode(byte);
|
||||
this.bytes.next();
|
||||
}
|
||||
return PDFName.of(name);
|
||||
};
|
||||
PDFObjectParser.prototype.parseArray = function () {
|
||||
this.bytes.assertNext(CharCodes.LeftSquareBracket);
|
||||
this.skipWhitespaceAndComments();
|
||||
var pdfArray = PDFArray.withContext(this.context);
|
||||
while (this.bytes.peek() !== CharCodes.RightSquareBracket) {
|
||||
var element = this.parseObject();
|
||||
pdfArray.push(element);
|
||||
this.skipWhitespaceAndComments();
|
||||
}
|
||||
this.bytes.assertNext(CharCodes.RightSquareBracket);
|
||||
return pdfArray;
|
||||
};
|
||||
PDFObjectParser.prototype.parseDict = function () {
|
||||
this.bytes.assertNext(CharCodes.LessThan);
|
||||
this.bytes.assertNext(CharCodes.LessThan);
|
||||
this.skipWhitespaceAndComments();
|
||||
var dict = new Map();
|
||||
while (!this.bytes.done() &&
|
||||
this.bytes.peek() !== CharCodes.GreaterThan &&
|
||||
this.bytes.peekAhead(1) !== CharCodes.GreaterThan) {
|
||||
var key = this.parseName();
|
||||
var value = this.parseObject();
|
||||
dict.set(key, value);
|
||||
this.skipWhitespaceAndComments();
|
||||
}
|
||||
this.skipWhitespaceAndComments();
|
||||
this.bytes.assertNext(CharCodes.GreaterThan);
|
||||
this.bytes.assertNext(CharCodes.GreaterThan);
|
||||
var Type = dict.get(PDFName.of('Type'));
|
||||
if (Type === PDFName.of('Catalog')) {
|
||||
return PDFCatalog.fromMapWithContext(dict, this.context);
|
||||
}
|
||||
else if (Type === PDFName.of('Pages')) {
|
||||
return PDFPageTree.fromMapWithContext(dict, this.context);
|
||||
}
|
||||
else if (Type === PDFName.of('Page')) {
|
||||
return PDFPageLeaf.fromMapWithContext(dict, this.context);
|
||||
}
|
||||
else {
|
||||
return PDFDict.fromMapWithContext(dict, this.context);
|
||||
}
|
||||
};
|
||||
PDFObjectParser.prototype.parseDictOrStream = function () {
|
||||
var startPos = this.bytes.position();
|
||||
var dict = this.parseDict();
|
||||
this.skipWhitespaceAndComments();
|
||||
if (!this.matchKeyword(Keywords.streamEOF1) &&
|
||||
!this.matchKeyword(Keywords.streamEOF2) &&
|
||||
!this.matchKeyword(Keywords.streamEOF3) &&
|
||||
!this.matchKeyword(Keywords.streamEOF4) &&
|
||||
!this.matchKeyword(Keywords.stream)) {
|
||||
return dict;
|
||||
}
|
||||
var start = this.bytes.offset();
|
||||
var end;
|
||||
var Length = dict.get(PDFName.of('Length'));
|
||||
if (Length instanceof PDFNumber) {
|
||||
end = start + Length.asNumber();
|
||||
this.bytes.moveTo(end);
|
||||
this.skipWhitespaceAndComments();
|
||||
if (!this.matchKeyword(Keywords.endstream)) {
|
||||
this.bytes.moveTo(start);
|
||||
end = this.findEndOfStreamFallback(startPos);
|
||||
}
|
||||
}
|
||||
else {
|
||||
end = this.findEndOfStreamFallback(startPos);
|
||||
}
|
||||
var contents = this.bytes.slice(start, end);
|
||||
return PDFRawStream.of(dict, contents);
|
||||
};
|
||||
PDFObjectParser.prototype.findEndOfStreamFallback = function (startPos) {
|
||||
// Move to end of stream, while handling nested streams
|
||||
var nestingLvl = 1;
|
||||
var end = this.bytes.offset();
|
||||
while (!this.bytes.done()) {
|
||||
end = this.bytes.offset();
|
||||
if (this.matchKeyword(Keywords.stream)) {
|
||||
nestingLvl += 1;
|
||||
}
|
||||
else if (this.matchKeyword(Keywords.EOF1endstream) ||
|
||||
this.matchKeyword(Keywords.EOF2endstream) ||
|
||||
this.matchKeyword(Keywords.EOF3endstream) ||
|
||||
this.matchKeyword(Keywords.endstream)) {
|
||||
nestingLvl -= 1;
|
||||
}
|
||||
else {
|
||||
this.bytes.next();
|
||||
}
|
||||
if (nestingLvl === 0)
|
||||
break;
|
||||
}
|
||||
if (nestingLvl !== 0)
|
||||
throw new PDFStreamParsingError(startPos);
|
||||
return end;
|
||||
};
|
||||
PDFObjectParser.forBytes = function (bytes, context, capNumbers) { return new PDFObjectParser(ByteStream.of(bytes), context, capNumbers); };
|
||||
PDFObjectParser.forByteStream = function (byteStream, context, capNumbers) {
|
||||
if (capNumbers === void 0) { capNumbers = false; }
|
||||
return new PDFObjectParser(byteStream, context, capNumbers);
|
||||
};
|
||||
return PDFObjectParser;
|
||||
}(BaseParser));
|
||||
export default PDFObjectParser;
|
||||
//# sourceMappingURL=PDFObjectParser.js.map
|
||||
1
node_modules/pdf-lib/es/core/parser/PDFObjectParser.js.map
generated
vendored
Normal file
1
node_modules/pdf-lib/es/core/parser/PDFObjectParser.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
14
node_modules/pdf-lib/es/core/parser/PDFObjectStreamParser.d.ts
generated
vendored
Normal file
14
node_modules/pdf-lib/es/core/parser/PDFObjectStreamParser.d.ts
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
import PDFRawStream from "../objects/PDFRawStream";
|
||||
import PDFObjectParser from "./PDFObjectParser";
|
||||
declare class PDFObjectStreamParser extends PDFObjectParser {
|
||||
static forStream: (rawStream: PDFRawStream, shouldWaitForTick?: (() => boolean) | undefined) => PDFObjectStreamParser;
|
||||
private alreadyParsed;
|
||||
private readonly shouldWaitForTick;
|
||||
private readonly firstOffset;
|
||||
private readonly objectCount;
|
||||
constructor(rawStream: PDFRawStream, shouldWaitForTick?: () => boolean);
|
||||
parseIntoContext(): Promise<void>;
|
||||
private parseOffsetsAndObjectNumbers;
|
||||
}
|
||||
export default PDFObjectStreamParser;
|
||||
//# sourceMappingURL=PDFObjectStreamParser.d.ts.map
|
||||
1
node_modules/pdf-lib/es/core/parser/PDFObjectStreamParser.d.ts.map
generated
vendored
Normal file
1
node_modules/pdf-lib/es/core/parser/PDFObjectStreamParser.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"PDFObjectStreamParser.d.ts","sourceRoot":"","sources":["../../../src/core/parser/PDFObjectStreamParser.ts"],"names":[],"mappings":"AAGA,OAAO,YAAY,gCAAsC;AAGzD,OAAO,eAAe,0BAAwC;AAG9D,cAAM,qBAAsB,SAAQ,eAAe;IACjD,MAAM,CAAC,SAAS,cACH,YAAY,6BACG,OAAO,wCAC0B;IAE7D,OAAO,CAAC,aAAa,CAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAgB;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,SAAS,EAAE,YAAY,EAAE,iBAAiB,CAAC,EAAE,MAAM,OAAO;IAWhE,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBvC,OAAO,CAAC,4BAA4B;CAgBrC;AAED,eAAe,qBAAqB,CAAC"}
|
||||
68
node_modules/pdf-lib/es/core/parser/PDFObjectStreamParser.js
generated
vendored
Normal file
68
node_modules/pdf-lib/es/core/parser/PDFObjectStreamParser.js
generated
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
import { __awaiter, __extends, __generator } from "tslib";
|
||||
import { ReparseError } from "../errors";
|
||||
import PDFName from "../objects/PDFName";
|
||||
import PDFNumber from "../objects/PDFNumber";
|
||||
import PDFRef from "../objects/PDFRef";
|
||||
import ByteStream from "./ByteStream";
|
||||
import PDFObjectParser from "./PDFObjectParser";
|
||||
import { waitForTick } from "../../utils";
|
||||
var PDFObjectStreamParser = /** @class */ (function (_super) {
|
||||
__extends(PDFObjectStreamParser, _super);
|
||||
function PDFObjectStreamParser(rawStream, shouldWaitForTick) {
|
||||
var _this = _super.call(this, ByteStream.fromPDFRawStream(rawStream), rawStream.dict.context) || this;
|
||||
var dict = rawStream.dict;
|
||||
_this.alreadyParsed = false;
|
||||
_this.shouldWaitForTick = shouldWaitForTick || (function () { return false; });
|
||||
_this.firstOffset = dict.lookup(PDFName.of('First'), PDFNumber).asNumber();
|
||||
_this.objectCount = dict.lookup(PDFName.of('N'), PDFNumber).asNumber();
|
||||
return _this;
|
||||
}
|
||||
PDFObjectStreamParser.prototype.parseIntoContext = function () {
|
||||
return __awaiter(this, void 0, void 0, function () {
|
||||
var offsetsAndObjectNumbers, idx, len, _a, objectNumber, offset, object, ref;
|
||||
return __generator(this, function (_b) {
|
||||
switch (_b.label) {
|
||||
case 0:
|
||||
if (this.alreadyParsed) {
|
||||
throw new ReparseError('PDFObjectStreamParser', 'parseIntoContext');
|
||||
}
|
||||
this.alreadyParsed = true;
|
||||
offsetsAndObjectNumbers = this.parseOffsetsAndObjectNumbers();
|
||||
idx = 0, len = offsetsAndObjectNumbers.length;
|
||||
_b.label = 1;
|
||||
case 1:
|
||||
if (!(idx < len)) return [3 /*break*/, 4];
|
||||
_a = offsetsAndObjectNumbers[idx], objectNumber = _a.objectNumber, offset = _a.offset;
|
||||
this.bytes.moveTo(this.firstOffset + offset);
|
||||
object = this.parseObject();
|
||||
ref = PDFRef.of(objectNumber, 0);
|
||||
this.context.assign(ref, object);
|
||||
if (!this.shouldWaitForTick()) return [3 /*break*/, 3];
|
||||
return [4 /*yield*/, waitForTick()];
|
||||
case 2:
|
||||
_b.sent();
|
||||
_b.label = 3;
|
||||
case 3:
|
||||
idx++;
|
||||
return [3 /*break*/, 1];
|
||||
case 4: return [2 /*return*/];
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
PDFObjectStreamParser.prototype.parseOffsetsAndObjectNumbers = function () {
|
||||
var offsetsAndObjectNumbers = [];
|
||||
for (var idx = 0, len = this.objectCount; idx < len; idx++) {
|
||||
this.skipWhitespaceAndComments();
|
||||
var objectNumber = this.parseRawInt();
|
||||
this.skipWhitespaceAndComments();
|
||||
var offset = this.parseRawInt();
|
||||
offsetsAndObjectNumbers.push({ objectNumber: objectNumber, offset: offset });
|
||||
}
|
||||
return offsetsAndObjectNumbers;
|
||||
};
|
||||
PDFObjectStreamParser.forStream = function (rawStream, shouldWaitForTick) { return new PDFObjectStreamParser(rawStream, shouldWaitForTick); };
|
||||
return PDFObjectStreamParser;
|
||||
}(PDFObjectParser));
|
||||
export default PDFObjectStreamParser;
|
||||
//# sourceMappingURL=PDFObjectStreamParser.js.map
|
||||
1
node_modules/pdf-lib/es/core/parser/PDFObjectStreamParser.js.map
generated
vendored
Normal file
1
node_modules/pdf-lib/es/core/parser/PDFObjectStreamParser.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"PDFObjectStreamParser.js","sourceRoot":"","sources":["../../../src/core/parser/PDFObjectStreamParser.ts"],"names":[],"mappings":"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"}
|
||||
46
node_modules/pdf-lib/es/core/parser/PDFParser.d.ts
generated
vendored
Normal file
46
node_modules/pdf-lib/es/core/parser/PDFParser.d.ts
generated
vendored
Normal file
@@ -0,0 +1,46 @@
|
||||
import PDFObjectParser from "./PDFObjectParser";
|
||||
import PDFContext from "../PDFContext";
|
||||
declare class PDFParser extends PDFObjectParser {
|
||||
static forBytesWithOptions: (pdfBytes: Uint8Array, objectsPerTick?: number | undefined, throwOnInvalidObject?: boolean | undefined, capNumbers?: boolean | undefined) => PDFParser;
|
||||
private readonly objectsPerTick;
|
||||
private readonly throwOnInvalidObject;
|
||||
private alreadyParsed;
|
||||
private parsedObjects;
|
||||
constructor(pdfBytes: Uint8Array, objectsPerTick?: number, throwOnInvalidObject?: boolean, capNumbers?: boolean);
|
||||
parseDocument(): Promise<PDFContext>;
|
||||
private maybeRecoverRoot;
|
||||
private parseHeader;
|
||||
private parseIndirectObjectHeader;
|
||||
private matchIndirectObjectHeader;
|
||||
private shouldWaitForTick;
|
||||
private parseIndirectObject;
|
||||
private tryToParseInvalidIndirectObject;
|
||||
private parseIndirectObjects;
|
||||
private maybeParseCrossRefSection;
|
||||
private maybeParseTrailerDict;
|
||||
private maybeParseTrailer;
|
||||
private parseDocumentSection;
|
||||
/**
|
||||
* This operation is not necessary for valid PDF files. But some invalid PDFs
|
||||
* contain jibberish in between indirect objects. This method is designed to
|
||||
* skip past that jibberish, should it exist, until it reaches the next
|
||||
* indirect object header, an xref table section, or the file trailer.
|
||||
*/
|
||||
private skipJibberish;
|
||||
/**
|
||||
* Skips the binary comment following a PDF header. The specification
|
||||
* defines this binary comment (section 7.5.2 File Header) as a sequence of 4
|
||||
* or more bytes that are 128 or greater, and which are preceded by a "%".
|
||||
*
|
||||
* This would imply that to strip out this binary comment, we could check for
|
||||
* a sequence of bytes starting with "%", and remove all subsequent bytes that
|
||||
* are 128 or greater. This works for many documents that properly comply with
|
||||
* the spec. But in the wild, there are PDFs that omit the leading "%", and
|
||||
* include bytes that are less than 128 (e.g. 0 or 1). So in order to parse
|
||||
* these headers correctly, we just throw out all bytes leading up to the
|
||||
* first indirect object header.
|
||||
*/
|
||||
private skipBinaryHeaderComment;
|
||||
}
|
||||
export default PDFParser;
|
||||
//# sourceMappingURL=PDFParser.d.ts.map
|
||||
1
node_modules/pdf-lib/es/core/parser/PDFParser.d.ts.map
generated
vendored
Normal file
1
node_modules/pdf-lib/es/core/parser/PDFParser.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"PDFParser.d.ts","sourceRoot":"","sources":["../../../src/core/parser/PDFParser.ts"],"names":[],"mappings":"AAiBA,OAAO,eAAe,0BAAwC;AAG9D,OAAO,UAAU,sBAA4B;AAM7C,cAAM,SAAU,SAAQ,eAAe;IACrC,MAAM,CAAC,mBAAmB,aACd,UAAU,kIAKsD;IAE5E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAU;IAC/C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAK;gBAGxB,QAAQ,EAAE,UAAU,EACpB,cAAc,SAAW,EACzB,oBAAoB,UAAQ,EAC5B,UAAU,UAAQ;IAOd,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IA4B1C,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,yBAAyB;IAejC,OAAO,CAAC,yBAAyB;IAWjC,OAAO,CAAC,iBAAiB,CAGvB;YAEY,mBAAmB;IAmCjC,OAAO,CAAC,+BAA+B;YAiCzB,oBAAoB;IAsBlC,OAAO,CAAC,yBAAyB;IAkCjC,OAAO,CAAC,qBAAqB;IAgB7B,OAAO,CAAC,iBAAiB;YAgBX,oBAAoB;IAUlC;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAqBrB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,uBAAuB;CAWhC;AAED,eAAe,SAAS,CAAC"}
|
||||
354
node_modules/pdf-lib/es/core/parser/PDFParser.js
generated
vendored
Normal file
354
node_modules/pdf-lib/es/core/parser/PDFParser.js
generated
vendored
Normal file
@@ -0,0 +1,354 @@
|
||||
import { __awaiter, __extends, __generator } from "tslib";
|
||||
import PDFCrossRefSection from "../document/PDFCrossRefSection";
|
||||
import PDFHeader from "../document/PDFHeader";
|
||||
import PDFTrailer from "../document/PDFTrailer";
|
||||
import { MissingKeywordError, MissingPDFHeaderError, PDFInvalidObjectParsingError, ReparseError, StalledParserError, } from "../errors";
|
||||
import PDFDict from "../objects/PDFDict";
|
||||
import PDFInvalidObject from "../objects/PDFInvalidObject";
|
||||
import PDFName from "../objects/PDFName";
|
||||
import PDFRawStream from "../objects/PDFRawStream";
|
||||
import PDFRef from "../objects/PDFRef";
|
||||
import ByteStream from "./ByteStream";
|
||||
import PDFObjectParser from "./PDFObjectParser";
|
||||
import PDFObjectStreamParser from "./PDFObjectStreamParser";
|
||||
import PDFXRefStreamParser from "./PDFXRefStreamParser";
|
||||
import PDFContext from "../PDFContext";
|
||||
import CharCodes from "../syntax/CharCodes";
|
||||
import { Keywords } from "../syntax/Keywords";
|
||||
import { IsDigit } from "../syntax/Numeric";
|
||||
import { waitForTick } from "../../utils";
|
||||
var PDFParser = /** @class */ (function (_super) {
|
||||
__extends(PDFParser, _super);
|
||||
function PDFParser(pdfBytes, objectsPerTick, throwOnInvalidObject, capNumbers) {
|
||||
if (objectsPerTick === void 0) { objectsPerTick = Infinity; }
|
||||
if (throwOnInvalidObject === void 0) { throwOnInvalidObject = false; }
|
||||
if (capNumbers === void 0) { capNumbers = false; }
|
||||
var _this = _super.call(this, ByteStream.of(pdfBytes), PDFContext.create(), capNumbers) || this;
|
||||
_this.alreadyParsed = false;
|
||||
_this.parsedObjects = 0;
|
||||
_this.shouldWaitForTick = function () {
|
||||
_this.parsedObjects += 1;
|
||||
return _this.parsedObjects % _this.objectsPerTick === 0;
|
||||
};
|
||||
_this.objectsPerTick = objectsPerTick;
|
||||
_this.throwOnInvalidObject = throwOnInvalidObject;
|
||||
return _this;
|
||||
}
|
||||
PDFParser.prototype.parseDocument = function () {
|
||||
return __awaiter(this, void 0, void 0, function () {
|
||||
var prevOffset, offset;
|
||||
return __generator(this, function (_a) {
|
||||
switch (_a.label) {
|
||||
case 0:
|
||||
if (this.alreadyParsed) {
|
||||
throw new ReparseError('PDFParser', 'parseDocument');
|
||||
}
|
||||
this.alreadyParsed = true;
|
||||
this.context.header = this.parseHeader();
|
||||
_a.label = 1;
|
||||
case 1:
|
||||
if (!!this.bytes.done()) return [3 /*break*/, 3];
|
||||
return [4 /*yield*/, this.parseDocumentSection()];
|
||||
case 2:
|
||||
_a.sent();
|
||||
offset = this.bytes.offset();
|
||||
if (offset === prevOffset) {
|
||||
throw new StalledParserError(this.bytes.position());
|
||||
}
|
||||
prevOffset = offset;
|
||||
return [3 /*break*/, 1];
|
||||
case 3:
|
||||
this.maybeRecoverRoot();
|
||||
if (this.context.lookup(PDFRef.of(0))) {
|
||||
console.warn('Removing parsed object: 0 0 R');
|
||||
this.context.delete(PDFRef.of(0));
|
||||
}
|
||||
return [2 /*return*/, this.context];
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
PDFParser.prototype.maybeRecoverRoot = function () {
|
||||
var isValidCatalog = function (obj) {
|
||||
return obj instanceof PDFDict &&
|
||||
obj.lookup(PDFName.of('Type')) === PDFName.of('Catalog');
|
||||
};
|
||||
var catalog = this.context.lookup(this.context.trailerInfo.Root);
|
||||
if (!isValidCatalog(catalog)) {
|
||||
var indirectObjects = this.context.enumerateIndirectObjects();
|
||||
for (var idx = 0, len = indirectObjects.length; idx < len; idx++) {
|
||||
var _a = indirectObjects[idx], ref = _a[0], object = _a[1];
|
||||
if (isValidCatalog(object)) {
|
||||
this.context.trailerInfo.Root = ref;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
PDFParser.prototype.parseHeader = function () {
|
||||
while (!this.bytes.done()) {
|
||||
if (this.matchKeyword(Keywords.header)) {
|
||||
var major = this.parseRawInt();
|
||||
this.bytes.assertNext(CharCodes.Period);
|
||||
var minor = this.parseRawInt();
|
||||
var header = PDFHeader.forVersion(major, minor);
|
||||
this.skipBinaryHeaderComment();
|
||||
return header;
|
||||
}
|
||||
this.bytes.next();
|
||||
}
|
||||
throw new MissingPDFHeaderError(this.bytes.position());
|
||||
};
|
||||
PDFParser.prototype.parseIndirectObjectHeader = function () {
|
||||
this.skipWhitespaceAndComments();
|
||||
var objectNumber = this.parseRawInt();
|
||||
this.skipWhitespaceAndComments();
|
||||
var generationNumber = this.parseRawInt();
|
||||
this.skipWhitespaceAndComments();
|
||||
if (!this.matchKeyword(Keywords.obj)) {
|
||||
throw new MissingKeywordError(this.bytes.position(), Keywords.obj);
|
||||
}
|
||||
return PDFRef.of(objectNumber, generationNumber);
|
||||
};
|
||||
PDFParser.prototype.matchIndirectObjectHeader = function () {
|
||||
var initialOffset = this.bytes.offset();
|
||||
try {
|
||||
this.parseIndirectObjectHeader();
|
||||
return true;
|
||||
}
|
||||
catch (e) {
|
||||
this.bytes.moveTo(initialOffset);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
PDFParser.prototype.parseIndirectObject = function () {
|
||||
return __awaiter(this, void 0, void 0, function () {
|
||||
var ref, object;
|
||||
return __generator(this, function (_a) {
|
||||
switch (_a.label) {
|
||||
case 0:
|
||||
ref = this.parseIndirectObjectHeader();
|
||||
this.skipWhitespaceAndComments();
|
||||
object = this.parseObject();
|
||||
this.skipWhitespaceAndComments();
|
||||
// if (!this.matchKeyword(Keywords.endobj)) {
|
||||
// throw new MissingKeywordError(this.bytes.position(), Keywords.endobj);
|
||||
// }
|
||||
// TODO: Log a warning if this fails...
|
||||
this.matchKeyword(Keywords.endobj);
|
||||
if (!(object instanceof PDFRawStream &&
|
||||
object.dict.lookup(PDFName.of('Type')) === PDFName.of('ObjStm'))) return [3 /*break*/, 2];
|
||||
return [4 /*yield*/, PDFObjectStreamParser.forStream(object, this.shouldWaitForTick).parseIntoContext()];
|
||||
case 1:
|
||||
_a.sent();
|
||||
return [3 /*break*/, 3];
|
||||
case 2:
|
||||
if (object instanceof PDFRawStream &&
|
||||
object.dict.lookup(PDFName.of('Type')) === PDFName.of('XRef')) {
|
||||
PDFXRefStreamParser.forStream(object).parseIntoContext();
|
||||
}
|
||||
else {
|
||||
this.context.assign(ref, object);
|
||||
}
|
||||
_a.label = 3;
|
||||
case 3: return [2 /*return*/, ref];
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
// TODO: Improve and clean this up
|
||||
PDFParser.prototype.tryToParseInvalidIndirectObject = function () {
|
||||
var startPos = this.bytes.position();
|
||||
var msg = "Trying to parse invalid object: " + JSON.stringify(startPos) + ")";
|
||||
if (this.throwOnInvalidObject)
|
||||
throw new Error(msg);
|
||||
console.warn(msg);
|
||||
var ref = this.parseIndirectObjectHeader();
|
||||
console.warn("Invalid object ref: " + ref);
|
||||
this.skipWhitespaceAndComments();
|
||||
var start = this.bytes.offset();
|
||||
var failed = true;
|
||||
while (!this.bytes.done()) {
|
||||
if (this.matchKeyword(Keywords.endobj)) {
|
||||
failed = false;
|
||||
}
|
||||
if (!failed)
|
||||
break;
|
||||
this.bytes.next();
|
||||
}
|
||||
if (failed)
|
||||
throw new PDFInvalidObjectParsingError(startPos);
|
||||
var end = this.bytes.offset() - Keywords.endobj.length;
|
||||
var object = PDFInvalidObject.of(this.bytes.slice(start, end));
|
||||
this.context.assign(ref, object);
|
||||
return ref;
|
||||
};
|
||||
PDFParser.prototype.parseIndirectObjects = function () {
|
||||
return __awaiter(this, void 0, void 0, function () {
|
||||
var initialOffset, e_1;
|
||||
return __generator(this, function (_a) {
|
||||
switch (_a.label) {
|
||||
case 0:
|
||||
this.skipWhitespaceAndComments();
|
||||
_a.label = 1;
|
||||
case 1:
|
||||
if (!(!this.bytes.done() && IsDigit[this.bytes.peek()])) return [3 /*break*/, 8];
|
||||
initialOffset = this.bytes.offset();
|
||||
_a.label = 2;
|
||||
case 2:
|
||||
_a.trys.push([2, 4, , 5]);
|
||||
return [4 /*yield*/, this.parseIndirectObject()];
|
||||
case 3:
|
||||
_a.sent();
|
||||
return [3 /*break*/, 5];
|
||||
case 4:
|
||||
e_1 = _a.sent();
|
||||
// TODO: Add tracing/logging mechanism to track when this happens!
|
||||
this.bytes.moveTo(initialOffset);
|
||||
this.tryToParseInvalidIndirectObject();
|
||||
return [3 /*break*/, 5];
|
||||
case 5:
|
||||
this.skipWhitespaceAndComments();
|
||||
// TODO: Can this be done only when needed, to avoid harming performance?
|
||||
this.skipJibberish();
|
||||
if (!this.shouldWaitForTick()) return [3 /*break*/, 7];
|
||||
return [4 /*yield*/, waitForTick()];
|
||||
case 6:
|
||||
_a.sent();
|
||||
_a.label = 7;
|
||||
case 7: return [3 /*break*/, 1];
|
||||
case 8: return [2 /*return*/];
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
PDFParser.prototype.maybeParseCrossRefSection = function () {
|
||||
this.skipWhitespaceAndComments();
|
||||
if (!this.matchKeyword(Keywords.xref))
|
||||
return;
|
||||
this.skipWhitespaceAndComments();
|
||||
var objectNumber = -1;
|
||||
var xref = PDFCrossRefSection.createEmpty();
|
||||
while (!this.bytes.done() && IsDigit[this.bytes.peek()]) {
|
||||
var firstInt = this.parseRawInt();
|
||||
this.skipWhitespaceAndComments();
|
||||
var secondInt = this.parseRawInt();
|
||||
this.skipWhitespaceAndComments();
|
||||
var byte = this.bytes.peek();
|
||||
if (byte === CharCodes.n || byte === CharCodes.f) {
|
||||
var ref = PDFRef.of(objectNumber, secondInt);
|
||||
if (this.bytes.next() === CharCodes.n) {
|
||||
xref.addEntry(ref, firstInt);
|
||||
}
|
||||
else {
|
||||
// this.context.delete(ref);
|
||||
xref.addDeletedEntry(ref, firstInt);
|
||||
}
|
||||
objectNumber += 1;
|
||||
}
|
||||
else {
|
||||
objectNumber = firstInt;
|
||||
}
|
||||
this.skipWhitespaceAndComments();
|
||||
}
|
||||
return xref;
|
||||
};
|
||||
PDFParser.prototype.maybeParseTrailerDict = function () {
|
||||
this.skipWhitespaceAndComments();
|
||||
if (!this.matchKeyword(Keywords.trailer))
|
||||
return;
|
||||
this.skipWhitespaceAndComments();
|
||||
var dict = this.parseDict();
|
||||
var context = this.context;
|
||||
context.trailerInfo = {
|
||||
Root: dict.get(PDFName.of('Root')) || context.trailerInfo.Root,
|
||||
Encrypt: dict.get(PDFName.of('Encrypt')) || context.trailerInfo.Encrypt,
|
||||
Info: dict.get(PDFName.of('Info')) || context.trailerInfo.Info,
|
||||
ID: dict.get(PDFName.of('ID')) || context.trailerInfo.ID,
|
||||
};
|
||||
};
|
||||
PDFParser.prototype.maybeParseTrailer = function () {
|
||||
this.skipWhitespaceAndComments();
|
||||
if (!this.matchKeyword(Keywords.startxref))
|
||||
return;
|
||||
this.skipWhitespaceAndComments();
|
||||
var offset = this.parseRawInt();
|
||||
this.skipWhitespace();
|
||||
this.matchKeyword(Keywords.eof);
|
||||
this.skipWhitespaceAndComments();
|
||||
this.matchKeyword(Keywords.eof);
|
||||
this.skipWhitespaceAndComments();
|
||||
return PDFTrailer.forLastCrossRefSectionOffset(offset);
|
||||
};
|
||||
PDFParser.prototype.parseDocumentSection = function () {
|
||||
return __awaiter(this, void 0, void 0, function () {
|
||||
return __generator(this, function (_a) {
|
||||
switch (_a.label) {
|
||||
case 0: return [4 /*yield*/, this.parseIndirectObjects()];
|
||||
case 1:
|
||||
_a.sent();
|
||||
this.maybeParseCrossRefSection();
|
||||
this.maybeParseTrailerDict();
|
||||
this.maybeParseTrailer();
|
||||
// TODO: Can this be done only when needed, to avoid harming performance?
|
||||
this.skipJibberish();
|
||||
return [2 /*return*/];
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
/**
|
||||
* This operation is not necessary for valid PDF files. But some invalid PDFs
|
||||
* contain jibberish in between indirect objects. This method is designed to
|
||||
* skip past that jibberish, should it exist, until it reaches the next
|
||||
* indirect object header, an xref table section, or the file trailer.
|
||||
*/
|
||||
PDFParser.prototype.skipJibberish = function () {
|
||||
this.skipWhitespaceAndComments();
|
||||
while (!this.bytes.done()) {
|
||||
var initialOffset = this.bytes.offset();
|
||||
var byte = this.bytes.peek();
|
||||
var isAlphaNumeric = byte >= CharCodes.Space && byte <= CharCodes.Tilde;
|
||||
if (isAlphaNumeric) {
|
||||
if (this.matchKeyword(Keywords.xref) ||
|
||||
this.matchKeyword(Keywords.trailer) ||
|
||||
this.matchKeyword(Keywords.startxref) ||
|
||||
this.matchIndirectObjectHeader()) {
|
||||
this.bytes.moveTo(initialOffset);
|
||||
break;
|
||||
}
|
||||
}
|
||||
this.bytes.next();
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Skips the binary comment following a PDF header. The specification
|
||||
* defines this binary comment (section 7.5.2 File Header) as a sequence of 4
|
||||
* or more bytes that are 128 or greater, and which are preceded by a "%".
|
||||
*
|
||||
* This would imply that to strip out this binary comment, we could check for
|
||||
* a sequence of bytes starting with "%", and remove all subsequent bytes that
|
||||
* are 128 or greater. This works for many documents that properly comply with
|
||||
* the spec. But in the wild, there are PDFs that omit the leading "%", and
|
||||
* include bytes that are less than 128 (e.g. 0 or 1). So in order to parse
|
||||
* these headers correctly, we just throw out all bytes leading up to the
|
||||
* first indirect object header.
|
||||
*/
|
||||
PDFParser.prototype.skipBinaryHeaderComment = function () {
|
||||
this.skipWhitespaceAndComments();
|
||||
try {
|
||||
var initialOffset = this.bytes.offset();
|
||||
this.parseIndirectObjectHeader();
|
||||
this.bytes.moveTo(initialOffset);
|
||||
}
|
||||
catch (e) {
|
||||
this.bytes.next();
|
||||
this.skipWhitespaceAndComments();
|
||||
}
|
||||
};
|
||||
PDFParser.forBytesWithOptions = function (pdfBytes, objectsPerTick, throwOnInvalidObject, capNumbers) {
|
||||
return new PDFParser(pdfBytes, objectsPerTick, throwOnInvalidObject, capNumbers);
|
||||
};
|
||||
return PDFParser;
|
||||
}(PDFObjectParser));
|
||||
export default PDFParser;
|
||||
//# sourceMappingURL=PDFParser.js.map
|
||||
1
node_modules/pdf-lib/es/core/parser/PDFParser.js.map
generated
vendored
Normal file
1
node_modules/pdf-lib/es/core/parser/PDFParser.js.map
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
22
node_modules/pdf-lib/es/core/parser/PDFXRefStreamParser.d.ts
generated
vendored
Normal file
22
node_modules/pdf-lib/es/core/parser/PDFXRefStreamParser.d.ts
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
import PDFRawStream from "../objects/PDFRawStream";
|
||||
import PDFRef from "../objects/PDFRef";
|
||||
export interface Entry {
|
||||
ref: PDFRef;
|
||||
offset: number;
|
||||
deleted: boolean;
|
||||
inObjectStream: boolean;
|
||||
}
|
||||
declare class PDFXRefStreamParser {
|
||||
static forStream: (rawStream: PDFRawStream) => PDFXRefStreamParser;
|
||||
private alreadyParsed;
|
||||
private readonly dict;
|
||||
private readonly context;
|
||||
private readonly bytes;
|
||||
private readonly subsections;
|
||||
private readonly byteWidths;
|
||||
constructor(rawStream: PDFRawStream);
|
||||
parseIntoContext(): Entry[];
|
||||
private parseEntries;
|
||||
}
|
||||
export default PDFXRefStreamParser;
|
||||
//# sourceMappingURL=PDFXRefStreamParser.d.ts.map
|
||||
1
node_modules/pdf-lib/es/core/parser/PDFXRefStreamParser.d.ts.map
generated
vendored
Normal file
1
node_modules/pdf-lib/es/core/parser/PDFXRefStreamParser.d.ts.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"PDFXRefStreamParser.d.ts","sourceRoot":"","sources":["../../../src/core/parser/PDFXRefStreamParser.ts"],"names":[],"mappings":"AAKA,OAAO,YAAY,gCAAsC;AACzD,OAAO,MAAM,0BAAgC;AAI7C,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,cAAM,mBAAmB;IACvB,MAAM,CAAC,SAAS,cAAe,YAAY,yBACN;IAErC,OAAO,CAAC,aAAa,CAAU;IAE/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAU;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAGxB;IACJ,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA2B;gBAE1C,SAAS,EAAE,YAAY;IA4BnC,gBAAgB,IAAI,KAAK,EAAE;IAuB3B,OAAO,CAAC,YAAY;CA4CrB;AAED,eAAe,mBAAmB,CAAC"}
|
||||
89
node_modules/pdf-lib/es/core/parser/PDFXRefStreamParser.js
generated
vendored
Normal file
89
node_modules/pdf-lib/es/core/parser/PDFXRefStreamParser.js
generated
vendored
Normal file
@@ -0,0 +1,89 @@
|
||||
import { ReparseError } from "../errors";
|
||||
import PDFArray from "../objects/PDFArray";
|
||||
import PDFName from "../objects/PDFName";
|
||||
import PDFNumber from "../objects/PDFNumber";
|
||||
import PDFRef from "../objects/PDFRef";
|
||||
import ByteStream from "./ByteStream";
|
||||
var PDFXRefStreamParser = /** @class */ (function () {
|
||||
function PDFXRefStreamParser(rawStream) {
|
||||
this.alreadyParsed = false;
|
||||
this.dict = rawStream.dict;
|
||||
this.bytes = ByteStream.fromPDFRawStream(rawStream);
|
||||
this.context = this.dict.context;
|
||||
var Size = this.dict.lookup(PDFName.of('Size'), PDFNumber);
|
||||
var Index = this.dict.lookup(PDFName.of('Index'));
|
||||
if (Index instanceof PDFArray) {
|
||||
this.subsections = [];
|
||||
for (var idx = 0, len = Index.size(); idx < len; idx += 2) {
|
||||
var firstObjectNumber = Index.lookup(idx + 0, PDFNumber).asNumber();
|
||||
var length_1 = Index.lookup(idx + 1, PDFNumber).asNumber();
|
||||
this.subsections.push({ firstObjectNumber: firstObjectNumber, length: length_1 });
|
||||
}
|
||||
}
|
||||
else {
|
||||
this.subsections = [{ firstObjectNumber: 0, length: Size.asNumber() }];
|
||||
}
|
||||
var W = this.dict.lookup(PDFName.of('W'), PDFArray);
|
||||
this.byteWidths = [-1, -1, -1];
|
||||
for (var idx = 0, len = W.size(); idx < len; idx++) {
|
||||
this.byteWidths[idx] = W.lookup(idx, PDFNumber).asNumber();
|
||||
}
|
||||
}
|
||||
PDFXRefStreamParser.prototype.parseIntoContext = function () {
|
||||
if (this.alreadyParsed) {
|
||||
throw new ReparseError('PDFXRefStreamParser', 'parseIntoContext');
|
||||
}
|
||||
this.alreadyParsed = true;
|
||||
this.context.trailerInfo = {
|
||||
Root: this.dict.get(PDFName.of('Root')),
|
||||
Encrypt: this.dict.get(PDFName.of('Encrypt')),
|
||||
Info: this.dict.get(PDFName.of('Info')),
|
||||
ID: this.dict.get(PDFName.of('ID')),
|
||||
};
|
||||
var entries = this.parseEntries();
|
||||
// for (let idx = 0, len = entries.length; idx < len; idx++) {
|
||||
// const entry = entries[idx];
|
||||
// if (entry.deleted) this.context.delete(entry.ref);
|
||||
// }
|
||||
return entries;
|
||||
};
|
||||
PDFXRefStreamParser.prototype.parseEntries = function () {
|
||||
var entries = [];
|
||||
var _a = this.byteWidths, typeFieldWidth = _a[0], offsetFieldWidth = _a[1], genFieldWidth = _a[2];
|
||||
for (var subsectionIdx = 0, subsectionLen = this.subsections.length; subsectionIdx < subsectionLen; subsectionIdx++) {
|
||||
var _b = this.subsections[subsectionIdx], firstObjectNumber = _b.firstObjectNumber, length_2 = _b.length;
|
||||
for (var objIdx = 0; objIdx < length_2; objIdx++) {
|
||||
var type = 0;
|
||||
for (var idx = 0, len = typeFieldWidth; idx < len; idx++) {
|
||||
type = (type << 8) | this.bytes.next();
|
||||
}
|
||||
var offset = 0;
|
||||
for (var idx = 0, len = offsetFieldWidth; idx < len; idx++) {
|
||||
offset = (offset << 8) | this.bytes.next();
|
||||
}
|
||||
var generationNumber = 0;
|
||||
for (var idx = 0, len = genFieldWidth; idx < len; idx++) {
|
||||
generationNumber = (generationNumber << 8) | this.bytes.next();
|
||||
}
|
||||
// When the `type` field is absent, it defaults to 1
|
||||
if (typeFieldWidth === 0)
|
||||
type = 1;
|
||||
var objectNumber = firstObjectNumber + objIdx;
|
||||
var entry = {
|
||||
ref: PDFRef.of(objectNumber, generationNumber),
|
||||
offset: offset,
|
||||
deleted: type === 0,
|
||||
inObjectStream: type === 2,
|
||||
};
|
||||
entries.push(entry);
|
||||
}
|
||||
}
|
||||
return entries;
|
||||
};
|
||||
PDFXRefStreamParser.forStream = function (rawStream) {
|
||||
return new PDFXRefStreamParser(rawStream);
|
||||
};
|
||||
return PDFXRefStreamParser;
|
||||
}());
|
||||
export default PDFXRefStreamParser;
|
||||
//# sourceMappingURL=PDFXRefStreamParser.js.map
|
||||
1
node_modules/pdf-lib/es/core/parser/PDFXRefStreamParser.js.map
generated
vendored
Normal file
1
node_modules/pdf-lib/es/core/parser/PDFXRefStreamParser.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"PDFXRefStreamParser.js","sourceRoot":"","sources":["../../../src/core/parser/PDFXRefStreamParser.ts"],"names":[],"mappings":"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"}
|
||||
Reference in New Issue
Block a user