Merge pull request #4800 from erichillah/master

Add definitions for pdf kit libray
This commit is contained in:
Masahiro Wakame
2015-07-03 22:20:18 +09:00
2 changed files with 526 additions and 0 deletions
+136
View File
@@ -0,0 +1,136 @@
/// <reference path="pdfkit.d.ts" />
import PDFGradient = require("pdfkit/js/gradient");
var PDFRadialGradiant = PDFGradient.PDFRadialGradiant;
var PDFLinearGradient = PDFGradient.PDFLinearGradient;
import mtext = require("pdfkit/js/mixins/text");
import PDFDocument = require("pdfkit");
import font = require("pdfkit/js/mixins/fonts");
import pdfData = require("pdfkit/js/data");
import text = require("pdfkit/js/mixins/text");
font.registerFont("Arial");
text.widthOfString("Kila",{ellipsis:true});
var doc = new PDFDocument({compress:false, sizes:[526,525],autoFirstPage:true});
doc.addPage({
margin: 50
});
doc.addPage({
margins: {
top: 50,
bottom: 50,
left: 72,
right: 72
}
});
doc.info.Title = "Sample";
doc.info.Author = "kila Mogrosso";
// Create basic shapes
doc.moveTo(0,20)
.lineTo(100,160)
.quadraticCurveTo(130,200,150,120)
.lineTo(400,90)
.stroke();
//SVG Paths
doc.path("M 0,20 L 100,160 Q 130,200 150,120 C 190,-40 200,200 300,150 L 400,90")
.stroke();
//Rectangle shape helper sample
doc.rect(100,200,100,100);
//polygon
doc.polygon([100,0],[50,100],[50,100]);
doc.lineWidth(25);
doc.lineCap('butt').moveTo(50, 20).lineTo(100, 20).stroke();
doc.lineCap('round').moveTo(150, 20).lineTo(200, 20).stroke();
doc.lineCap('square').moveTo(250, 20).circle(275, 30, 15).stroke();
doc.lineJoin('miter').rect(50, 100, 50, 50).stroke();
doc.lineJoin('round').rect(150, 100, 50, 50).stroke();
doc.lineJoin('bevel').rect(250, 100, 50, 50).stroke();
doc.circle(100, 50, 50)
.lineWidth(3)
.fillOpacity(0.8)
.fillAndStroke("red", "#900");
var grad = doc.linearGradient(50, 0, 150, 100)
.stop(0, 'green')
.stop(1, 'red');
doc.rect(50, 0, 100, 100)
.fill(grad);
doc.circle(100, 50, 50).dash(5, {
space: 10
}).stroke();
var rgrad = doc.radialGradient(300, 50, 0, 300, 50, 50);
rgrad.stop(0, 'orange', 0).stop(1, 'orange', 1);
doc.circle(300, 50, 50)
.fill(rgrad);
doc.fillColor('red')
.translate(-100, -50)
.scale(0.8);
doc.path('M 250,75 L 323,301 131,161 369,161 177,301 z')
.fill('non-zero');
doc.translate(280, 0)
.path('M 250,75 L 323,301 131,161 369,161 177,301 z')
.fill('even-odd');
doc.circle(100,100,100)
.clip();
doc.fontSize(25)
.fillColor('blue')
.text('This is a link!', 20, 0);
var width = doc.widthOfString('This is a link!');
var height = doc.currentLineHeight();
doc.underline(20, 0, width, height, {
color: 'blue'
}).link(20, 0, width, height, 'http://google.com/');
doc.moveDown()
.fillColor('black')
.highlight(20, doc.y, doc.widthOfString('This text is highlighted!'), height)
.text('This text is highlighted!');
doc.moveDown()
.strike(20, doc.y, doc.widthOfString('STRIKE!'), height)
.text('STRIKE!');
doc.image('images/test.jpeg', 0, 15, {
width: 300
}).text('Proprotional to width', 0, 0);
doc.image('images/test.jpeg', 320, 15, {
fit: [100, 100]
}).rect(320, 15, 100, 100).stroke().text('Fit', 320, 0);
doc.image('images/test.jpeg', 320, 145, {
width: 200,
height: 100
}).text('Stretch', 320, 130);
doc.image('images/test.jpeg', 320, 280, {
scale: 0.25
}).text('Scale', 320, 265);
+390
View File
@@ -0,0 +1,390 @@
// Type definitions for Pdfkit v0.7.1
// Project: http://pdfkit.org
// Definitions by: Eric Hillah <https://github.com/erichillah>
// Definitions: https://github.com/borisyankov/DefinitelyTyped
/// <reference path="../node/node.d.ts" />
declare module 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 module PDFKit.Mixins {
interface AnnotationOption {
Type?: string;
Rect?: any;
Border?: Array<number>;
SubType?: string;
Contents?: string;
Name?: string;
color?: string;
QuadPoints?: Array<number>;
A?: any;
B?: any;
C?: any;
L?: any;
DA?: string;
}
interface PDFAnnotation<TDocument> {
annotate(x: number, y: number, w: number, h: number, option: AnnotationOption): TDocument;
note(x: number, y: number, w: number, h: number, content: string, option?: AnnotationOption): TDocument;
link(x: number, y: number, w: number, h: number, url: string, option?: AnnotationOption): TDocument;
highlight(x: number, y: number, w: number, h: number, option?: AnnotationOption): TDocument;
underline(x: number, y: number, w: number, h: number, option?: AnnotationOption): TDocument;
strike(x: number, y: number, w: number, h: number, option?: AnnotationOption): TDocument;
lineAnnotation(x1: number, y1: number, x2: number, y2: number, option?: AnnotationOption): TDocument;
rectAnnotation(x: number, y: number, w: number, h: number, option?: AnnotationOption): TDocument;
ellipseAnnotation(x: number, y: number, w: number, h: number, option?: AnnotationOption): TDocument;
textAnnotation(x: number, y: number, w: number, h: number, text: string, option?: AnnotationOption): TDocument;
}
interface PDFColor<TDocument> {
fillColor(color: string|PDFGradient, opacity?: number): TDocument;
strokeColor(color: string, opacity?: number): TDocument;
opacity(opacity: number): TDocument;
fillOpacity(opacity: number): TDocument;
strokeOpacity(opacity: number): TDocument;
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<TDocument> {
font(src: string, family?: string, size?: number): TDocument;
fontSize(size: number): TDocument;
currentLineHeight(includeGap?: boolean): number;
registerFont(name: string, src?: string, family?: string): TDocument;
}
interface ImageOption {
width?: number;
height?: number;
/** Scale percentage */
scale?: number;
/** Two elements array specifying dimensions(w,h) */
fit?: number[];
}
interface PDFImage {
/**
* Draw an image in PDFKit document.
* No need chainning capabilities
*/
image(src: any, x: number, y: number, options: ImageOption): any;
}
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 */
paragrahGap?: 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;
}
interface PDFText<TDocument> {
lineGap(lineGap: number): TDocument;
moveDown(line?: number): TDocument;
moveUp(line?: number): TDocument;
text(text: string, x?: number, y?: number, options?: TextOptions): TDocument;
text(text: string, options?: TextOptions): TDocument;
widthOfString(text: string, options?: TextOptions): number;
heightOfString(text: string, options?: TextOptions): number;
list(list: Array<string|any>, x?: number, y?: number, options?: TextOptions): TDocument;
list(list: Array<string|any>, options?: TextOptions): TDocument;
}
interface PDFVector<TDocument> {
save(): TDocument;
restore(): TDocument;
closePath(): TDocument;
lineWidth(w: number): TDocument;
lineCap(c: string): TDocument;
lineJoin(j: string): TDocument;
miterLimit(m: any): TDocument;
dash(length: number, option: any): TDocument;
undash(): TDocument;
moveTo(x: number, y: number): TDocument;
lineTo(x: number, y: number): TDocument;
bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): TDocument;
quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): TDocument;
rect(x: number, y: number, w: number, h: number): TDocument;
roundRect(x: number, y: number, w: number, h: number, r?: number): TDocument;
ellipse(x: number, y: number, r1: number, r2?: number): TDocument;
circle(x: number, y: number, raduis: number): TDocument;
polygon(...points: number[][]): TDocument;
path(path: string): TDocument;
fill(color: string|PDFKit.PDFGradient, rule?: string): TDocument;
stroke(color?: string|PDFKit.PDFGradient): TDocument;
fillAndStroke(fillColor: string, strokeColor?: string, rule?: string): TDocument;
clip(rule?: string): TDocument;
transform(m11: number, m12: number, m21: number, m22: number, dx: number, dy: number): TDocument;
translate(x: number, y: number): TDocument;
rotate(angle: number, options?: { origin?: number[] }): TDocument;
scale(xFactor: number, yFactor?: number, options?: { origin?: number[] }): TDocument;
}
}
declare module 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 module PDFKit {
interface DocumentInfo {
Producer?: string;
Creator?: string;
CreationDate?: Date;
Title?: string;
Author?: string;
Keywords?: string;
ModDate?: Date;
}
interface PDFDocumentOptions {
compress?: boolean;
info?: DocumentInfo;
autoFirstPage?: boolean;
sizes?: number[];
margin?: { top: number; left: number; bottom: number; right: number }|number;
bufferPages?: boolean;
}
interface PDFDocument extends NodeJS.ReadableStream,
Mixins.PDFAnnotation<PDFDocument>, Mixins.PDFColor<PDFDocument>, Mixins.PDFImage,
Mixins.PDFText<PDFDocument>, Mixins.PDFVector<PDFDocument>, Mixins.PDFFont<PDFDocument> {
/**
* 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;
bufferedPageRanges(): { 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 module PDFKit {
/**
* Represent a single page in the PDF document
*/
interface PDFPage {
size: string;
layout: string;
margin: { top: number; left: number; bottom: number; right: number }|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 module 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<void>;
export = PDFKitAnnotation;
}
declare module "pdfkit/js/mixins/color" {
var PDFKitColor: PDFKit.Mixins.PDFColor<void>;
export = PDFKitColor;
}
declare module "pdfkit/js/mixins/fonts" {
var PDFKitFont: PDFKit.Mixins.PDFFont<void>;
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<void>;
export = PDFKitText;
}
declare module "pdfkit/js/mixins/vector" {
var PDFKitVector: PDFKit.Mixins.PDFVector<void>;
export = PDFKitVector;
}