// Type definitions for Pdfkit v0.10.0 // Project: http://pdfkit.org // Definitions by: Eric Hillah // Erik Berreßem // Jeroen Vervaeke // Thales Agapito // Evgeny Baram // BamButz // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped /// declare namespace PDFKit { interface PDFGradient { new (document: any): PDFGradient; stop(pos: number, color?: string | PDFKit.PDFGradient, opacity?: number): PDFGradient; embed(): void; apply(): void; } interface PDFLinearGradient extends PDFGradient { new (document: any, x1: number, y1: number, x2: number, y2: number): PDFLinearGradient; shader(fn: () => any): any; opacityGradient(): PDFLinearGradient; } interface PDFRadialGradient extends PDFGradient { new (document: any, x1: number, y1: number, x2: number, y2: number): PDFRadialGradient; shader(fn: () => any): any; opacityGradient(): PDFRadialGradient; } } declare namespace PDFKit.Mixins { interface AnnotationOption { Type?: string; Rect?: any; Border?: Array; SubType?: string; Contents?: string; Name?: string; color?: string; QuadPoints?: Array; A?: any; B?: any; C?: any; L?: any; DA?: string; } interface PDFAnnotation { annotate(x: number, y: number, w: number, h: number, option: AnnotationOption): this; note(x: number, y: number, w: number, h: number, content: string, option?: AnnotationOption): this; goTo(x: number, y: number, w: number, h: number, name: string, options?: AnnotationOption): this; link(x: number, y: number, w: number, h: number, url: string, option?: AnnotationOption): this; highlight(x: number, y: number, w: number, h: number, option?: AnnotationOption): this; underline(x: number, y: number, w: number, h: number, option?: AnnotationOption): this; strike(x: number, y: number, w: number, h: number, option?: AnnotationOption): this; lineAnnotation(x1: number, y1: number, x2: number, y2: number, option?: AnnotationOption): this; rectAnnotation(x: number, y: number, w: number, h: number, option?: AnnotationOption): this; ellipseAnnotation(x: number, y: number, w: number, h: number, option?: AnnotationOption): this; textAnnotation(x: number, y: number, w: number, h: number, text: string, option?: AnnotationOption): this; } // The color forms accepted by PDFKit: // example: "red" [R, G, B] [C, M, Y, K] type ColorValue = string | PDFGradient | [number, number, number] | [number, number, number, number]; // The winding / filling rule accepted by PDFKit: type RuleValue = 'even-odd' | 'evenodd' | 'non-zero' | 'nonzero'; // Text option opentype features as listed at https://docs.microsoft.com/en-us/typography/opentype/spec/featurelist type OpenTypeFeatures = | 'aalt' | 'abvf' | 'abvm' | 'abvs' | 'afrc' | 'akhn' | 'blwf' | 'blwm' | 'blws' | 'calt' | 'case' | 'cfar' | 'cjct' | 'clig' | 'cpct' | 'cpsp' | 'cswh' | 'curs' | 'cv01' | 'cv02' | 'cv03' | 'cv04' | 'cv05' | 'cv06' | 'cv07' | 'cv08' | 'cv09' | 'cv10' | 'cv11' | 'cv12' | 'cv13' | 'cv14' | 'cv15' | 'cv16' | 'cv17' | 'cv18' | 'cv19' | 'cv20' | 'cv21' | 'cv22' | 'cv23' | 'cv24' | 'cv25' | 'cv26' | 'cv27' | 'cv28' | 'cv29' | 'cv30' | 'cv31' | 'cv32' | 'cv33' | 'cv34' | 'cv35' | 'cv36' | 'cv37' | 'cv38' | 'cv39' | 'cv40' | 'cv41' | 'cv42' | 'cv43' | 'cv44' | 'cv45' | 'cv46' | 'cv47' | 'cv48' | 'cv49' | 'cv50' | 'cv51' | 'cv52' | 'cv53' | 'cv54' | 'cv55' | 'cv56' | 'cv57' | 'cv58' | 'cv59' | 'cv60' | 'cv61' | 'cv62' | 'cv63' | 'cv64' | 'cv65' | 'cv66' | 'cv67' | 'cv68' | 'cv69' | 'cv70' | 'cv71' | 'cv72' | 'cv73' | 'cv74' | 'cv75' | 'cv76' | 'cv77' | 'cv78' | 'cv79' | 'cv80' | 'cv81' | 'cv82' | 'cv83' | 'cv84' | 'cv85' | 'cv86' | 'cv87' | 'cv88' | 'cv89' | 'cv90' | 'cv91' | 'cv92' | 'cv93' | 'cv94' | 'cv95' | 'cv96' | 'cv97' | 'cv98' | 'cv99' | 'c2pc' | 'c2sc' | 'dist' | 'ccmp' | 'dlig' | 'dnom' | 'dtls' | 'expt' | 'falt' | 'fin2' | 'fin3' | 'fina' | 'flac' | 'frac' | 'fwid' | 'half' | 'haln' | 'halt' | 'hist' | 'hkna' | 'hlig' | 'hngl' | 'hojo' | 'hwid' | 'init' | 'isol' | 'ital' | 'jalt' | 'jp78' | 'jp83' | 'jp90' | 'jp04' | 'kern' | 'lfbd' | 'liga' | 'ljmo' | 'lnum' | 'locl' | 'ltra' | 'ltrm' | 'mark' | 'med2' | 'medi' | 'mgrk' | 'mkmk' | 'mset' | 'nalt' | 'nlck' | 'nukt' | 'numr' | 'onum' | 'opbd' | 'ordn' | 'ornm' | 'palt' | 'pcap' | 'pkna' | 'pnum' | 'pref' | 'pres' | 'pstf' | 'psts' | 'pwid' | 'qwid' | 'rand' | 'rclt' | 'rkrf' | 'rlig' | 'rphf' | 'rtbd' | 'rtla' | 'rtlm' | 'ruby' | 'rvrn' | 'salt' | 'sinf' | 'size' | 'smcp' | 'smpl' | 'ss01' | 'ss02' | 'ss03' | 'ss04' | 'ss05' | 'ss06' | 'ss07' | 'ss08' | 'ss09' | 'ss10' | 'ss11' | 'ss12' | 'ss13' | 'ss14' | 'ss15' | 'ss16' | 'ss17' | 'ss18' | 'ss19' | 'ss20' | 'ssty' | 'stch' | 'subs' | 'sups' | 'swsh' | 'titl' | 'tjmo' | 'tnam' | 'tnum' | 'trad' | 'twid' | 'unic' | 'valt' | 'vatu' | 'vert' | 'vhal' | 'vjmo' | 'vkna' | 'vkrn' | 'vpal' | 'vrt2' | 'vrtr' | 'zero'; interface PDFColor { fillColor(color: ColorValue, opacity?: number): this; strokeColor(color: ColorValue, opacity?: number): this; opacity(opacity: number): this; fillOpacity(opacity: number): this; strokeOpacity(opacity: number): this; linearGradient(x1: number, y1: number, x2: number, y2: number): PDFLinearGradient; radialGradient(x1: number, y1: number, r1: number, x2: number, y2: number, r2: number): PDFRadialGradient; } interface PDFFont { font(buffer: Buffer): this; font(src: string, family?: string, size?: number): this; fontSize(size: number): this; currentLineHeight(includeGap?: boolean): number; registerFont(name: string, src?: string, family?: string): this; } interface ImageOption { width?: number; height?: number; /** Scale percentage */ scale?: number; /** Two elements array specifying dimensions(w,h) */ fit?: [number, number]; cover?: [number, number]; align?: 'center' | 'right'; valign?: 'center' | 'bottom'; link?: AnnotationOption; goTo?: AnnotationOption; destination?: string; } interface PDFImage { /** * Draw an image in PDFKit document. */ image(src: any, x?: number, y?: number, options?: ImageOption): this; image(src: any, options?: ImageOption): this; } interface TextOptions { /** Set to false to disable line wrapping all together */ lineBreak?: boolean; /** The width that text should be wrapped to (by default, the page width minus the left and right margin) */ width?: number; /** The maximum height that text should be clipped to */ height?: number; /** The character to display at the end of the text when it is too long. Set to true to use the default character. */ ellipsis?: boolean | string; /** the number of columns to flow the text into */ columns?: number; /** the amount of space between each column (1/4 inch by default) */ columnGap?: number; /** The amount in PDF points (72 per inch) to indent each paragraph of text */ indent?: number; /** the amount of space between each paragraph of text */ paragraphGap?: number; /** the amount of space between each line of text */ lineGap?: number; /** the amount of space between each word in the text */ wordSpacing?: number; /** the amount of space between each character in the text */ characterSpacing?: number; /** whether to fill the text (true by default) */ fill?: boolean; /** whether to stroke the text */ stroke?: boolean; /** A URL to link this text to (shortcut to create an annotation) */ link?: string; /** whether to underline the text */ underline?: boolean; /** whether to strike out the text */ strike?: boolean; /** whether the text segment will be followed immediately by another segment. Useful for changing styling in the middle of a paragraph. */ continued?: boolean; /** whether to slant the text (angle in degrees or true) */ oblique?: boolean | number; /** the alignment of the text (center, justify, left, right) */ //TODO check this align?: 'center' | 'justify' | 'left' | 'right' | string; /** the vertical alignment of the text with respect to its insertion point */ baseline?: number | 'svg-middle' | 'middle' | 'svg-central' | 'bottom' | 'ideographic' | 'alphabetic' | 'mathematical' | 'hanging' | 'top'; /** an array of OpenType feature tags to apply. If not provided, a set of defaults is used. */ features?: OpenTypeFeatures[]; } interface PDFText { lineGap(lineGap: number): this; moveDown(line?: number): this; moveUp(line?: number): this; text(text: string, x?: number, y?: number, options?: TextOptions): this; text(text: string, options?: TextOptions): this; widthOfString(text: string, options?: TextOptions): number; heightOfString(text: string, options?: TextOptions): number; list(list: Array, x?: number, y?: number, options?: TextOptions): this; list(list: Array, options?: TextOptions): this; } interface PDFVector { save(): this; restore(): this; closePath(): this; lineWidth(w: number): this; lineCap(c: string): this; lineJoin(j: string): this; miterLimit(m: any): this; dash(length: number, option: any): this; undash(): this; moveTo(x: number, y: number): this; lineTo(x: number, y: number): this; bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this; quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): this; rect(x: number, y: number, w: number, h: number): this; roundedRect(x: number, y: number, w: number, h: number, r?: number): this; ellipse(x: number, y: number, r1: number, r2?: number): this; circle(x: number, y: number, raduis: number): this; polygon(...points: number[][]): this; path(path: string): this; fill(color?: ColorValue, rule?: RuleValue): this; fill(rule: RuleValue): this; stroke(color?: ColorValue): this; fillAndStroke(fillColor?: ColorValue, strokeColor?: ColorValue, rule?: RuleValue): this; fillAndStroke(fillColor: ColorValue, rule?: RuleValue): this; fillAndStroke(rule: RuleValue): this; clip(rule?: RuleValue): this; transform(m11: number, m12: number, m21: number, m22: number, dx: number, dy: number): this; translate(x: number, y: number): this; rotate(angle: number, options?: { origin?: number[] }): this; scale(xFactor: number, yFactor?: number, options?: { origin?: number[] }): this; } } declare namespace PDFKit { /** * PDFKit data */ interface PDFData { new (data: any[]): PDFData; readByte(): any; writeByte(byte: any): void; byteAt(index: number): any; readBool(): boolean; writeBool(val: boolean): boolean; readUInt32(): number; writeUInt32(val: number): void; readInt32(): number; writeInt32(val: number): void; readUInt16(): number; writeUInt16(val: number): void; readInt16(): number; writeInt16(val: number): void; readString(length: number): string; writeString(val: string): void; stringAt(pos: number, length: number): string; readShort(): number; writeShort(val: number): void; readLongLong(): number; writeLongLong(val: number): void; readInt(): number; writeInt(val: number): void; slice(start: number, end: number): any[]; read(length: number): any[]; write(bytes: any[]): void; } } declare module 'pdfkit/js/data' { var PDFKitData: PDFKit.PDFData; export = PDFKitData; } declare namespace PDFKit { interface DocumentInfo { Producer?: string; Creator?: string; CreationDate?: Date; Title?: string; Author?: string; Keywords?: string; ModDate?: Date; } interface DocumentPermissions { modifying?: boolean; copying?: boolean; annotating?: boolean; fillingForms?: boolean; contentAccessibility?: boolean; documentAssembly?: boolean; printing?: 'lowResolution' | 'highResolution'; } interface PDFDocumentOptions { compress?: boolean; info?: DocumentInfo; userPassword?: string; ownerPassword?: string; permissions?: DocumentPermissions; pdfVersion?: '1.3' | '1.4' | '1.5' | '1.6' | '1.7' | '1.7ext3'; autoFirstPage?: boolean; size?: number[] | string; margin?: number; margins?: { top: number; left: number; bottom: number; right: number }; layout?: 'portrait' | 'landscape'; bufferPages?: boolean; } interface PDFDocument extends NodeJS.ReadableStream, Mixins.PDFAnnotation, Mixins.PDFColor, Mixins.PDFImage, Mixins.PDFText, Mixins.PDFVector, Mixins.PDFFont { /** * PDF Version */ version: number; /** * Wheter streams should be compressed */ compress: boolean; /** * PDF document Metadata */ info: DocumentInfo; /** * Options for the document */ options: PDFDocumentOptions; /** * Represent the current page. */ page: PDFPage; x: number; y: number; new (options?: PDFDocumentOptions): PDFDocument; addPage(options?: PDFDocumentOptions): PDFDocument; bufferedPageRange(): { start: number; count: number }; switchToPage(n?: number): PDFPage; flushPages(): void; ref(data: {}): PDFKitReference; addContent(data: any): PDFDocument; /** * Deprecated */ write(fileName: string, fn: any): void; /** * Deprecated. Throws exception */ output(fn: any): void; end(): void; toString(): string; } } declare module 'pdfkit' { var doc: PDFKit.PDFDocument; export = doc; } declare module 'pdfkit/js/gradient' { var gradient: { PDFGradient: PDFKit.PDFGradient; PDFLinearGradient: PDFKit.PDFLinearGradient; PDFRadialGradiant: PDFKit.PDFRadialGradient; }; export = gradient; } declare namespace PDFKit { /** * Represent a single page in the PDF document */ interface PDFPage { size: string; layout: string; margins: { top: number; left: number; bottom: number; right: number }; width: number; height: number; document: PDFDocument; content: PDFKitReference; /** * The page dictionnary */ dictionary: PDFKitReference; fonts: any; xobjects: any; ext_gstates: any; patterns: any; annotations: any; maxY(): number; write(chunk: any): void; end(): void; } } declare module 'pdfkit/js/page' { var PDFKitPage: PDFKit.PDFPage; export = PDFKitPage; } declare namespace PDFKit { /** PDFReference - represents a reference to another object in the PDF object heirarchy */ class PDFKitReference { id: number; gen: number; deflate: any; compress: boolean; uncompressedLength: number; chunks: any[]; data: { Font?: any; XObject?: any; ExtGState?: any; Pattern: any; Annots: any }; document: PDFDocument; constructor(document: PDFDocument, id: number, data: {}); initDeflate(): void; write(chunk: any): void; end(chunk: any): void; finalize(): void; toString(): string; } } declare module 'pdfkit/js/reference' { var PDFKitReference: PDFKit.PDFKitReference; export = PDFKitReference; } declare module 'pdfkit/js/mixins/annotations' { var PDFKitAnnotation: PDFKit.Mixins.PDFAnnotation; export = PDFKitAnnotation; } declare module 'pdfkit/js/mixins/color' { var PDFKitColor: PDFKit.Mixins.PDFColor; export = PDFKitColor; } declare module 'pdfkit/js/mixins/fonts' { var PDFKitFont: PDFKit.Mixins.PDFFont; export = PDFKitFont; } declare module 'pdfkit/js/mixins/images' { var PDFKitImage: PDFKit.Mixins.PDFImage; export = PDFKitImage; } declare module 'pdfkit/js/mixins/text' { var PDFKitText: PDFKit.Mixins.PDFText; export = PDFKitText; } declare module 'pdfkit/js/mixins/vector' { var PDFKitVector: PDFKit.Mixins.PDFVector; export = PDFKitVector; }