pdf-lib
Version:
Create and modify PDF files with JavaScript
59 lines (49 loc) • 1.85 kB
text/typescript
import PDFDict from 'src/core/objects/PDFDict';
import PDFOperator from 'src/core/operators/PDFOperator';
import PDFContext from 'src/core/PDFContext';
import PDFFlateStream from 'src/core/structures/PDFFlateStream';
import CharCodes from 'src/core/syntax/CharCodes';
class PDFContentStream extends PDFFlateStream {
static of = (dict: PDFDict, operators: PDFOperator[], encode = true) =>
new PDFContentStream(dict, operators, encode);
private readonly operators: PDFOperator[];
private constructor(dict: PDFDict, operators: PDFOperator[], encode = true) {
super(dict, encode);
this.operators = operators;
}
push(...operators: PDFOperator[]): void {
this.operators.push(...operators);
}
clone(context?: PDFContext): PDFContentStream {
const operators = new Array(this.operators.length);
for (let idx = 0, len = this.operators.length; idx < len; idx++) {
operators[idx] = this.operators[idx].clone(context);
}
const { dict, encode } = this;
return PDFContentStream.of(dict.clone(context), operators, encode);
}
getContentsString(): string {
let value = '';
for (let idx = 0, len = this.operators.length; idx < len; idx++) {
value += `${this.operators[idx]}\n`;
}
return value;
}
getUnencodedContents(): Uint8Array {
const buffer = new Uint8Array(this.getUnencodedContentsSize());
let offset = 0;
for (let idx = 0, len = this.operators.length; idx < len; idx++) {
offset += this.operators[idx].copyBytesInto(buffer, offset);
buffer[offset++] = CharCodes.Newline;
}
return buffer;
}
getUnencodedContentsSize(): number {
let size = 0;
for (let idx = 0, len = this.operators.length; idx < len; idx++) {
size += this.operators[idx].sizeInBytes() + 1;
}
return size;
}
}
export default PDFContentStream;