@aeolun/muhammara
Version:
Create, read and modify PDF files and streams. A drop in replacement for hummusjs PDF library
1,150 lines (1,016 loc) • 30.5 kB
TypeScript
declare module "muhammara" {
import EventEmitter = require("events");
export type PosX = number;
export type PosY = number;
export type Width = number;
export type Height = number;
export type FilePath = string;
export let PDFPageModifier: PDFPageModifier;
export let PDFWStreamForFile: PDFWStreamForFile;
export let PDFRStreamForFile: PDFRStreamForFile;
export let PDFRStreamForBuffer: PDFRStreamForBuffer;
export let PDFWStreamForBuffer: PDFWStreamForBuffer;
export let PDFStreamForResponse: PDFStreamForResponse;
export function createWriter(
input: FilePath | WriteStream,
options?: PDFWriterOptions
): PDFWriter;
export function createWriterToModify(
inFile: FilePath,
options?: PDFWriterToModifyOptions
): PDFWriter;
export function createWriterToModify(
inStream: ReadStream,
outStream: WriteStream,
options?: PDFWriterToModifyOptions
): PDFWriter;
export function createWriterToContinue(
restartFile: string,
restartStateFile: string,
options?: PDFWriterToContinueOptions
): PDFWriter;
export function createReader(
input: FilePath | ReadStream,
options?: PDFReaderOptions
): PDFReader;
export function recrypt(
originalPdfPath: FilePath,
newPdfPath: FilePath,
options?: PDFRecryptOptions
): void;
export function recrypt(
originalPdfStream: PDFRStreamForFile | PDFRStreamForBuffer,
newPdfStream: PDFWStreamForFile | PDFWStreamForBuffer,
options?: PDFRecryptOptions
): void;
export interface WriteStream {
write(inBytesArray: any[]): number;
getCurrentPosition(): number;
}
export interface ReadStream {
read(inAmount: number): number[];
notEnded(): boolean;
setPosition(inPosition: number): void;
setPositionFromEnd(inPosition: number): void;
skip(inAmount: number): void;
getCurrentPosition(): number;
}
export interface PDFPageInput {
getDictionary(): PDFDictionary;
getMediaBox(): PDFBox;
getCropBox(): PDFBox;
getTrimBox(): PDFBox;
getBleedBox(): PDFBox;
getArtBox(): PDFBox;
getRotate(): number;
}
export interface PDFPageModifier {
new (
writer: PDFWriter,
pageIndex?: number,
ensureContentEncapsulation?: boolean
): PDFPageModifier;
startContext(): this;
getContext(): XObjectContentContext;
endContext(): this;
attachURLLinktoCurrentPage(
inUrl: string,
left: number,
bottom: number,
right: number,
top: number
): this;
writePage(): this;
}
export type PDFImageType = "JPG" | "PDF" | "PNG" | "TIFF";
export interface PDFRStreamForFile extends ReadStream {
new (inPath: FilePath): PDFRStreamForFile;
close(inCallback?: () => void): void;
}
export interface PDFRStreamForBuffer extends ReadStream {
new (buffer: Buffer): PDFRStreamForBuffer;
}
export interface ColorOptions {
colorspace?: string;
color?: string | number;
}
export interface GraphicOptions extends ColorOptions {
type?: "stroke" | "fill" | "clip";
width?: number;
close?: boolean;
}
export type TransformationMatrix = [
a: number,
b: number,
c: number,
d: number,
e: number,
f: number
];
enum LineJoinStyle {
LINEJOIN_ROUND,
LINEJOIN_BEVEL,
LINEJOIN_MITER_VARIABLE,
LINEJOIN_MITER = 2,
LINEJOIN_MITER_FIXED = 3,
}
enum EEncoding {
EEncodingText = "text",
EEncodingCode = "code",
EEncodingHex = "hex",
}
enum LineCapStyle {
LINECAP_BUTT = 0,
LINECAP_ROUND,
LINECAP_SQUARE,
}
export interface TextRenderOptions {
encoding?: EEncoding;
}
export type Glyph = Array<[number, number]>;
export interface AbstractContentContext {
b(): this;
B(): this;
bStar(): this;
BStar(): this;
s(): this;
S(): this;
f(): this;
F(): this;
fStar(): this;
n(): this;
m(x: PosX, y: PosY): this;
l(x: PosX, y: PosY): this;
c(x1: PosX, y1: PosY, x2: PosX, y2: PosY, x3: PosX, y3: PosY): number;
v(x2: PosX, y2: PosY, x3: PosX, y3: PosY): this;
y(x1: PosX, y1: PosY, x3: PosX, y3: PosY): this;
h(): this;
re(left: number, bottom: number, width: Width, height: Height): this;
q(): this;
Q(): this;
/**
* a b 0
* c d 0
* e f 1
*/
cm(...args: TransformationMatrix): this;
w(lineWidth: Width): this;
J(lineCapStyle: LineCapStyle): this;
j(lineJoinStyle: LineJoinStyle): this;
M(miterLimit: number): this;
d(miterLimit: number[], dashPhase: number): this;
ri(renderingIntentName: string): this;
i(flatness: number): this;
gs(graphicStateName: string): this;
CS(colorSpaceName: string): this;
cs(colorSpaceName: string): this;
SC(...colorComponents: number[]): this;
SCN(...parameters: any[]): this; // This can't be materialized in TypeScript
////SCN(...colorComponents: number[], patternName?: string): this;
SCN(colorComponents: number[], patternName?: string): this;
sc(...colorComponents: number[]): this;
scn(...parameters: any[]): this; // This can't be materialized in TypeScript
////scn(...colorComponents: number[], patternName?: string): this;
scn(colorComponents: number[], patternName?: string): this;
G(gray: number): this;
g(gray: number): this;
RG(r: number, g: number, b: number): this;
rg(r: number, g: number, b: number): this;
K(c: number, m: number, y: number, k: number): this;
k(c: number, m: number, y: number, k: number): this;
W(): this;
WStar(): this;
doXObject(xObject: string | FormXObject | ImageXObject): this;
Tc(characterSpace: number): this;
Tw(wordSpace: number): this;
Tz(horizontalScaling: number): this;
TL(textLeading: number): this;
Tr(renderingMode: number): this;
Ts(fontRise: number): this;
BT(): this;
ET(): this;
Td(tX: number, tY: number): this;
TD(tX: number, tY: number): this;
Tm(a: number, b: number, c: number, d: number, e: number, f: number): this;
TStar(): this;
Tf(fontReferenced: UsedFont | string, fontSize: number): this;
Tj(text: string | Glyph): this;
Quote(text: string | Glyph): this;
DoubleQuote(
wordSpacing: number,
characterString: number,
text: string | Glyph
): this;
TJ(value: string | Glyph, options?: TextRenderOptions): this;
writeFreeCode(freeCode: string): this;
drawPath(...parameters: any[]): this; // This can't be materialized in TypeScript
////drawPath(...xyPairs: number[], options: GraphicOptions): this;
drawPath(xyPairs: Array<[number, number]>, options: GraphicOptions): this;
drawCircle(x: PosX, y: PosY, r: number, options: GraphicOptions): this;
drawSquare(x: PosX, y: PosY, l: number, options: GraphicOptions): this;
drawRectangle(
x: PosX,
y: PosY,
w: number,
h: number,
options: GraphicOptions
): this;
writeText(text: string, x: PosX, y: PosY, options?: WriteTextOptions): this;
drawImage(
x: PosX,
y: PosY,
imagePath: string,
options?: ImageOptions
): this;
}
export interface TransformationObject {
width: number;
height: number;
proportional?: boolean;
fit?: "always" | "overflow";
}
export interface ImageOptions {
index?: number;
transformation?: number[] | TransformationObject;
password?: string;
}
export interface FontOptions {
size?: number;
font?: UsedFont;
}
export interface WriteTextOptions extends FontOptions, ColorOptions {
underline?: boolean;
strikeOut?: boolean;
lineWidth?: number;
}
export interface XObjectContentContext extends AbstractContentContext {}
export interface PDFWStreamForFile extends WriteStream {
new (inPath: string): PDFWStreamForFile;
close(inCallback?: () => void): void;
}
export interface PDFStreamForResponse extends WriteStream {
new (res: NodeJS.WritableStream): PDFStreamForResponse;
}
export interface PDFWStreamForBuffer extends WriteStream {
new (): PDFWStreamForBuffer;
buffer: Buffer;
}
export interface PDFReaderOptions {
password: string;
}
export interface PDFWriterToModifyOptions extends PDFWriterOptions {
modifiedFilePath?: string;
}
export interface PDFWriterToContinueOptions {
modifiedFilePath?: string;
modifiedStream?: PDFRStreamForFile; // TODO
log?: string;
}
export interface PDFRecryptOptions extends PDFWriterOptions {
password?: string;
}
export const ePDFVersion10 = 10;
export const ePDFVersion11 = 11;
export const ePDFVersion12 = 12;
export const ePDFVersion13 = 13;
export const ePDFVersion14 = 14;
export const ePDFVersion15 = 15;
export const ePDFVersion16 = 16;
export const ePDFVersion17 = 17;
export type EPDFVersion = 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17;
export const ePDFObjectBoolean = 0;
export const ePDFObjectLiteralString = 1;
export const ePDFObjectHexString = 2;
export const ePDFObjectNull = 3;
export const ePDFObjectName = 4;
export const ePDFObjectInteger = 5;
export const ePDFObjectReal = 6;
export const ePDFObjectArray = 7;
export const ePDFObjectDictionary = 8;
export const ePDFObjectIndirectObjectReference = 9;
export const ePDFObjectStream = 10;
export const ePDFObjectSymbol = 11;
export type PDFObjectType = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11;
export const ePDFPageBoxMediaBox = 0;
export const ePDFPageBoxCropBox = 1;
export const ePDFPageBoxBleedBox = 2;
export const ePDFPageBoxTrimBox = 3;
export const ePDFPageBoxArtBox = 4;
export type PDFPageBoxType = 0 | 1 | 2 | 3 | 4;
export const eRangeTypeAll = 0;
export const eRangeTypeSpecific = 1;
export type eRangeType = 0 | 1;
export interface PDFWriterOptions {
version?: EPDFVersion;
log?: string;
compress?: boolean;
userPassword?: string;
ownerPassword?: string;
userProtectionFlag?: number;
}
type FormXObjectId = number;
export interface FormXObject {
id: FormXObjectId;
}
export interface ResourcesDictionary {
addFormXObjectMapping(formXObject: FormXObject): string;
addImageXObjectMapping(imageXObject: ImageXObject | number): string;
addProcsetResource(procSetName: string): void;
addExtGStateMapping(stateObjectId: number): string;
addFontMapping(fontObjectId: number): string;
addColorSpaceMapping(colorSpaceId: number): string;
addPatternMapping(colorSpaceId: number): string;
addPatternMapping(patternObjectId: number): string;
addPropertyMapping(propertyObjectId: number): string;
addXObjectMapping(xObjectId: number): string;
addShadingMapping(xObjectId: number): string;
}
export type PDFBox = [PosX, PosY, Width, Height];
export interface PDFPage {
mediaBox?: PDFBox;
cropBox?: PDFBox;
bleedBox?: PDFBox;
trimBox?: PDFBox;
artBox?: PDFBox;
rotate?: number;
getResourcesDictionary(): ResourcesDictionary;
}
export interface TextDimension {
xMin: number;
yMin: number;
xMax: number;
yMax: number;
width: number;
height: number;
}
export interface RectangleDimension {
width: Width;
height: Height;
}
export interface UsedFont {
calculateTextDimensions(
text: string | any,
fontSize: number
): TextDimension;
}
export interface ByteWriter {
write(buffer: number[]): number;
}
export interface ByteReader {
read(length: number): Array<number>;
notEnded(): boolean;
}
export interface ByteReaderWithPosition {
read(length: number): Array<number>;
notEnded(): boolean;
getCurrentPosition(): number;
skip(length: number): this;
setPosition(position: number): this;
setPositionFromEnd(position: number): this;
}
export interface PDFReader {
getPDFLevel(): number;
getPagesCount(): number;
getTrailer(): PDFDictionary;
queryDictionaryObject(dictionary: PDFDictionary, name: string): PDFObject;
queryArrayObject(
objectList: PDFArray,
index: number
): undefined | PDFObject;
parseNewObject(objectId: number): PDFObject;
getPageObjectID(objectId: number): number;
parsePageDictionary(objectId: number): PDFDictionary;
parsePage(page: number): PDFPageInput;
getObjectsCount(): number;
isEncrypted(): boolean;
getXrefSize(): number;
getXrefEntry(objectId: number): {
objectPosition: number;
revision: number;
type: number;
};
getXrefSize(): number;
getXrefPosition(objectId: number): number;
startReadingFromStream(inputStream: PDFStreamInput): ByteReader;
getParserStream(): ByteReaderWithPosition;
}
export interface PDFStream {
getWriteStream(): ByteWriter;
}
export interface PDFNull extends PDFObject {
value: void;
}
export interface PDFName extends PDFObject {
value: string;
}
export interface PDFLiteralString extends PDFObject {
toText(): string;
value: string;
}
export interface PDFInteger extends PDFObject {
value: number;
}
export interface PDFIndirectObjectReference extends PDFObject {
getObjectID(): number;
getVersion(): number;
}
export interface PDFHexString extends PDFObject {
value: string;
}
export interface PDFDictionary extends PDFObject {
toJSObject(): object;
exists(inName: string): boolean;
queryObject(inName: string): PDFObject;
}
export interface PDFDate {
toString(): string;
setToCurrentTime(): this;
}
export interface PDFBoolean extends PDFObject {
value: boolean;
}
export interface PDFArray extends PDFObject {
toJSArray(): Array<any>;
queryObject(index: number): any;
getLength(): number;
}
export interface OutputFile {
openFile(filePath: FilePath, append?: boolean): void;
closeFile(): void;
getFilePath(): string | undefined;
getOutputStream(): ByteWriterWithPosition | undefined;
}
export interface InputFile {
openFile(filePath: FilePath): void;
closeFile(): void;
getFilePath(): string | undefined;
getFileSize(): number | undefined;
getInputStream(): ByteReaderWithPosition | undefined;
}
export enum EInfoTrapped {
EInfoTrappedTrue,
EInfoTrappedFalse,
EInfoTrappedUnknown,
}
export interface InfoDictionary {
addAdditionalInfoEntry(key: string, value: string): void;
removeAdditionalInfoEntry(key: string): void;
clearAdditionalInfoEntries(): void;
getAdditionalInfoEntry(key: string): string;
getAdditionalInfoEntries(key: string): { [key: string]: string };
setCreationDate(date: string | Date): void;
setModDate(date: string | Date): void;
title: string;
author: string;
subject: string;
keywords: string;
creator: string;
producer: string;
trapped: EInfoTrapped;
}
export interface ImageXObject {
id: number;
}
export interface FormObject {
id: number;
getContentContext(): XObjectContentContext;
getResourcesDictinary(): ResourcesDictionary;
getContentStream(): PDFStream;
}
export interface DocumentCopyingContext {
createFormXObjectFromPDFPage(
sourcePageIndex: number,
ePDFPageBox: PDFPageBoxType | PDFBox,
transformation?: TransformationMatrix
): number;
mergePDFPageToPage(target: PDFPage, sourcePageIndex: number): void;
appendPDFPageFromPDF(sourcePageNumber: number): number; // stream start bytes?
mergePDFPageToFormXObject(
sourcePage: PDFPage,
targetPageNumber: number
): void;
getSourceDocumentParser(
input: FilePath | ReadStream,
options?: PDFReaderOptions
): PDFReader;
copyDirectObjectAsIs(objectToCopy: PDFObject): void;
copyObject(objectId: number): number;
copyDirectObjectWithDeepCopy(objectToCopy: PDFObject): Array<number>;
copyNewObjectsForDirectObject(objectIds: Array<number>): void;
getCopiedObjectID(objectId: number): number;
getCopiedObjects(): { [key: string]: number };
replaceSourceObjects(replaceMap: { [key: string]: number }): void;
getSourceDocumentStream(): ByteReaderWithPosition;
}
export interface DocumentContext {
getInfoDictionary(): InfoDictionary;
}
export interface DictionaryContext {
writeKey(): DictionaryContext;
writeNameValue(nameValue: string): this;
writeRectangleValue(values: Array<number>): this;
writeRectangleValue(a: number, b: number, c: number, d: number): this;
writeLiteralStringValue(literal: Array<number> | string): this;
writeBooleanValue(boolValue: boolean): this;
writeObjectReferenceValue(objectId: number): this;
}
export interface ByteWriterWithPosition {
write(bytes: Array<number>): number;
getCurrentPosition(): number;
}
export type eTokenSeparatorSpace = 0;
export type eTokenSeparatorEndLine = 1;
export type eTokenSeparatorNone = 2;
enum ETokenSeparator {
eTokenSeparatorSpace,
eTokenSeparatorEndLine,
eTokenSeparatorNone,
}
export interface ObjectsContext {
allocateNewObjectID(): FormXObjectId;
startDictionary(): DictionaryContext;
startArray(): this;
writeNumber(value: number): this;
endArray(endType?: ETokenSeparator): this;
endLine(): this;
endDictionary(dictionary: DictionaryContext): this;
endIndirectObject(): this;
writeIndirectObjectReference(
objectId: FormXObjectId,
generationNumber?: number
): this;
startNewIndirectObject(objectId: FormXObjectId): this;
startNewIndirectObject(): FormXObjectId;
startModifiedIndirectObject(objectId: FormXObjectId): this;
deleteObject(objectId: FormXObjectId): this;
writeName(name: string): this;
writeLiteralString(literal: string | number[]): this;
writeHexString(hex: string | number[]): this;
writeBoolean(bool: boolean): this;
writeKeyword(keyword: string): this;
writeComment(comment: string): this;
setCompressStreams(compress: true): this;
startPDFStream(dictionaryContext: DictionaryContext): PDFStream;
startUnfilteredPDFStream(stream: DictionaryContext): PDFStream;
endPDFStream(stream: PDFStream): this;
startFreeContext(): ByteWriterWithPosition;
endFreeContext(): this;
}
export interface PDFObject {
getType(): PDFObjectType;
toPDFIndirectObjectReference(): PDFIndirectObjectReference;
toPDFArray(): PDFArray;
toPDFDictionary(): PDFDictionary;
toPDFStream(): PDFStream;
toPDFBoolean(): PDFBoolean;
toPDFLiteralString(): PDFLiteralString;
toPDFHexString(): PDFHexString;
toPDFNull(): PDFNull;
toPDFName(): PDFName;
toPDFInteger(): PDFInteger;
toPDFReal(): PDFReal;
toPDFSymbol(): PDFSymbol;
toNumber(): number;
toString(): string;
}
export interface PDFReal extends PDFObject {
value: number;
}
export interface PDFSymbol extends PDFObject {
value: string;
}
export interface PDFStreamInput extends PDFObject {
getDictionary(): PDFDictionary;
getStreamContentStart(): number;
}
export interface PDFTextString {
toBytesArray(): Array<number>;
toString(): string;
fromString(value: string): void;
}
export interface PageContentContext extends AbstractContentContext {
getCurrentPageContentStream(): PDFStream;
getAssociatedPage(): PDFPage;
}
export interface JPEGInformation {
samplesWidth: number;
samplesHeight: number;
colorComponentsCount: number;
JFIFInformationExists: boolean;
JFIFUnit?: number;
JFIFXDensity?: number;
JFIFYDensity?: number;
ExifInformationExists: boolean;
ExifUnit?: number;
ExifXDensity?: number;
ExifYDensity?: number;
PhotoshopInformationExists: boolean;
PhotoshopXDensity?: number;
PhotoshopYDensity?: number;
}
export type PDFRectangle = [
lowerLeftX: number,
lowerLeftY: number,
upperRightX: number,
upperRightY: number
];
export interface MergeOptions {
password?: string;
type?: eRangeType;
specificRanges?: [[number, number]];
}
export interface AppendOptions extends MergeOptions {}
export type inInterPagesCallback = () => {};
export interface PDFWriter {
end(): PDFWriter;
createPage(x: PosX, y: PosY, width: Width, height: Height): PDFPage;
createPage(): PDFPage;
writePage(page: PDFPage): this;
writePageAndReturnID(page: PDFPage): number;
startPageContentContext(page: PDFPage): PageContentContext;
pausePageContentContext(pageContextContext: PageContentContext): this;
createFormXObject(
x: PosX,
y: PosY,
width: Width,
height: Height,
objectId?: FormXObjectId
): FormXObject;
endFormXObject(formXObject: FormXObject): this;
createFormXObjectFromJPG(
file: FilePath | PDFRStreamForFile,
objectId?: FormXObjectId
): FormXObject;
getFontForFile(inFontFilePath: FilePath, index?: number): UsedFont;
getFontForFile(
inFontFilePath: FilePath,
inOptionalMetricsFile?: string,
index?: number
): UsedFont;
attachURLLinktoCurrentPage(
url: string,
x: PosX,
y: PosY,
width: Width,
height: Height
): this;
shutdown(outputFilePath: FilePath): this;
createFormXObjectFromTIFF(
filePath: FilePath | PDFRStreamForFile,
objectId?: FormXObjectId
): FormXObject;
createImageXObjectFromJPG(
filePath: FilePath | PDFRStreamForFile,
objectId?: FormXObjectId
): ImageXObject;
createFormXObjectFromPNG(
filePath: FilePath | PDFRStreamForFile,
objectId?: FormXObjectId
): FormXObject;
retrieveJPGImageInformation(filePath: FilePath): JPEGInformation;
getObjectsContext(): ObjectsContext;
getDocumentContext(): DocumentContext;
appendPDFPagesFromPDF(
source: FilePath | ReadStream,
options?: AppendOptions
): number[];
mergePDFPagesToPage(
page: PDFPage,
file: FilePath | PDFRStreamForFile,
options?: MergeOptions,
callback?: inInterPagesCallback
): this;
mergePDFPagesToPage(
page: PDFPage,
file: FilePath | PDFRStreamForFile,
callback?: inInterPagesCallback
): this;
createPDFCopyingContext(
source: FilePath | ReadStream
): DocumentCopyingContext;
createFormXObjectsFromPDF(
file: FilePath,
box?: PDFBox | PDFPageBoxType,
options?: MergeOptions,
transformation?: TransformationMatrix,
objectIds?: FormXObjectId[]
): FormXObjectId[];
createPDFCopyingContextForModifiedFile(): DocumentCopyingContext;
createPDFTextString(): PDFTextString;
createPDFDate(): PDFDate;
getImageDimensions(
inFontFilePath: FilePath | ReadStream
): RectangleDimension;
getImagePagesCount(
imagePath: FilePath,
options?: { password?: string }
): number;
getImageType(imagePath: FilePath): PDFImageType | undefined;
getModifiedFileParser(): PDFReader;
getModifiedInputFile(): InputFile;
getOutputFile(): OutputFile;
registerAnnotationReferenceForNextPageWrite(annotationId: number): this;
requireCatalogUpdate(): void;
/* Js Extensions (in muhammara.js) */
getEvents(): EventEmitter;
triggerDocumentExtensionEvent(
eventName: string | symbol,
eventParams: any
): void;
}
namespace Recipe {
type CommentOptionsFlag =
| "invisible"
| "hidden"
| "print"
| "nozoom"
| "norotate"
| "noview"
| "readonly"
| "locked"
| "togglenoview";
type AnnotSubtype =
| "Text"
| "Link"
| "FreeText"
| "Line"
| "Square"
| "Circle"
| "Polygon"
| "PolyLine"
| "Highlight"
| "Underline"
| "Squiggly"
| "StrikeOut"
| "Caret"
| "Stamp"
| "Ink"
| "Popup"
| "FileAttachment"
| "Sound"
| "Movie"
| "Screen"
| "Widget"
| "PrinterMark"
| "TrapNet"
| "Watermark"
| "3D"
| "Redact"
| "Projection"
| "RichMedia";
type AnnotOptionsFlag =
| "invisible"
| "hidden"
| "print"
| "nozoom"
| "norotate"
| "noview"
| "readonly"
| "locked"
| "togglenoview"
| "lockedcontents";
type AnnotOptionsIcon =
| "Comment"
| "Key"
| "Note"
| "Help"
| "NewParagraph"
| "Paragraph"
| "Insert";
interface RecipeOptions {
version?: number;
author?: string;
title?: string;
subject?: string;
keywords?: string[];
}
interface CommentOptions {
title?: string;
date?: string;
open?: boolean;
richText?: boolean;
flag?: CommentOptionsFlag;
}
interface AnnotOptions {
title?: string;
open?: boolean;
richText?: boolean;
flag?: AnnotOptionsFlag;
icon?: AnnotOptionsIcon;
width?: number;
height?: number;
date?: string;
subject?: string;
replies?: Array<AnnotReply>;
}
interface AnnotReply {
subtype?: AnnotSubtype;
text: string;
title?: string;
richText?: boolean;
flag?: AnnotOptionsFlag;
date?: string;
subject?: string;
}
interface EncryptOptions {
password?: string;
ownerPassword?: string;
userPassword?: string;
userProtectionFlag?: number;
}
interface ImageOptions {
width?: number;
height?: number;
scale?: number;
keepAspectRatio?: boolean;
opacity?: number;
align?: string;
}
interface InfoOptions {
version?: string;
author?: string;
title?: string;
subject?: string;
keywords?: string[];
}
interface OverlayOptions {
page?: number;
scale?: number;
keepAspectRatio?: boolean;
fitWidth?: boolean;
fitHeight?: boolean;
}
interface TextBoxStyle {
lineWidth?: number;
stroke?: string | number[];
dash?: number[];
fill?: string | number[];
opacity?: number;
}
interface TextBox {
width?: number;
height?: number;
minHeight?: number;
padding?: number | number[];
lineHeight?: number;
textAlign?: string;
style?: TextBoxStyle;
}
interface TextOptions {
charSpace?: number;
color?: string | number[];
flow?: boolean;
overflow?: () => void;
layout?: number | string;
opacity?: number;
rotation?: number;
rotationOrigin?: [number, number];
font?: string;
size?: number;
align?: string;
highlight?: boolean;
underline?: boolean;
strikeOut?: boolean;
hilite?:
| boolean
| {
color?: string | number[];
opacity?: number;
};
textBox?: TextBox;
title?: string;
open?: boolean;
richText?: boolean;
flag?: AnnotOptionsFlag;
icon?: AnnotOptionsIcon;
date?: string;
subject?: string;
}
interface LineToOptions {
color?: string | number[];
stroke?: string | number[];
fill?: string | number[];
lineWidth?: number;
opacity?: number;
dash?: number[];
}
interface LineOptions {
color?: string | number[];
stroke?: string | number[];
lineWidth?: number;
dash?: number[];
}
interface PolygonOptions {
color?: string | number[];
stroke?: string | number[];
fill?: string | number[];
lineWidth?: number;
opacity?: number;
dash?: number[];
}
interface CircleOptions {
color?: string | number[];
stroke?: string | number[];
fill?: string | number[];
lineWidth?: number;
opacity?: number;
dash?: number[];
}
interface RectangleOptions {
color?: string | number[];
stroke?: string | number[];
fill?: string | number[];
lineWidth?: number;
opacity?: number;
dash?: number[];
rotation?: number;
rotationOrigin?: number[];
}
type EndPDFCallback1 = () => any;
type EndPDFCallback2 = (buffer: Buffer) => any;
type EndPDFCallback = EndPDFCallback1 | EndPDFCallback2;
}
export class Recipe {
constructor(
src: string,
output?: string | null,
options?: Recipe.RecipeOptions
);
constructor(
buffer: Buffer,
output?: string | null,
options?: Recipe.RecipeOptions
);
comment(
text: string,
x: number,
y: number,
options?: Recipe.CommentOptions
): Recipe;
annot(
x: number,
y: number,
subtype: Recipe.AnnotSubtype,
options?: Recipe.AnnotOptions
): Recipe;
appendPage(
pdfSrc: string,
pages?: number | (number | [number, number])[]
): Recipe;
encrypt(options: Recipe.EncryptOptions): Recipe;
registerFont(fontName: string, fontSrcPath: string): Recipe;
image(
imgSrc: string,
x: number,
y: number,
options?: Recipe.ImageOptions
): Recipe;
info(options?: Recipe.InfoOptions): Recipe;
custom(key?: string, value?: string): Recipe;
insertPage(
afterPageNumber: number,
pdfSrc: string,
srcPageNumber: number
): Recipe;
overlay(
pdfSrc: string,
x: number,
y: number,
options?: Recipe.OverlayOptions
): Recipe;
createPage(pageWidth: number, pageHeight: number): Recipe;
endPage(): Recipe;
editPage(pageNumber: number): Recipe;
pageInfo(pageNumber: number): {
width: number;
height: number;
rotate: number;
pageNumber: number;
};
split(outputDir: string, prefix: string): Recipe;
text(
text: string,
x: number,
y: number,
options?: Recipe.TextOptions
): Recipe;
moveTo(x: number, y: number): Recipe;
lineTo(x: number, y: number, options?: Recipe.LineToOptions): Recipe;
line(coordinates: number[][], options?: Recipe.LineOptions): Recipe;
polygon(coordinates: number[][], options?: Recipe.PolygonOptions): Recipe;
circle(
x: number,
y: number,
radius: number,
options?: Recipe.CircleOptions
): Recipe;
rectangle(
x: number,
y: number,
width: number,
height: number,
options?: Recipe.RectangleOptions
): Recipe;
endPDF(callback?: Recipe.EndPDFCallback): Recipe;
}
}