You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
typesetting/pitfall/pdfkit/lib/mixins/images.js

112 lines
3.0 KiB
JavaScript

// Generated by CoffeeScript 1.12.5
(function() {
var PDFImage;
PDFImage = require('../image');
module.exports = {
initImages: function() {
this._imageRegistry = {};
return this._imageCount = 0;
},
image: function(src, x, y, options) {
var base, bh, bp, bw, h, hp, image, ip, name, ref, ref1, ref2, ref3, w, wp;
if (options == null) {
options = {};
}
if (typeof x === 'object') {
options = x;
x = null;
}
x = (ref = x != null ? x : options.x) != null ? ref : this.x;
y = (ref1 = y != null ? y : options.y) != null ? ref1 : this.y;
if (typeof src === 'string') {
image = this._imageRegistry[src];
}
if (!image) {
if (src.width && src.height) {
image = src;
} else {
image = this.openImage(src);
}
}
if (!image.obj) {
image.embed(this);
}
if ((base = this.page.xobjects)[name = image.label] == null) {
base[name] = image.obj;
}
w = options.width || image.width;
h = options.height || image.height;
if (options.width && !options.height) {
wp = w / image.width;
w = image.width * wp;
h = image.height * wp;
} else if (options.height && !options.width) {
hp = h / image.height;
w = image.width * hp;
h = image.height * hp;
} else if (options.scale) {
w = image.width * options.scale;
h = image.height * options.scale;
} else if (options.fit) {
ref2 = options.fit, bw = ref2[0], bh = ref2[1];
bp = bw / bh;
ip = image.width / image.height;
if (ip > bp) {
w = bw;
h = bw / ip;
} else {
h = bh;
w = bh * ip;
}
} else if (options.cover) {
ref3 = options.cover, bw = ref3[0], bh = ref3[1];
bp = bw / bh;
ip = image.width / image.height;
if (ip > bp) {
h = bh;
w = bh * ip;
} else {
w = bw;
h = bw / ip;
}
}
if (options.fit || options.cover) {
if (options.align === 'center') {
x = x + bw / 2 - w / 2;
} else if (options.align === 'right') {
x = x + bw - w;
}
if (options.valign === 'center') {
y = y + bh / 2 - h / 2;
} else if (options.valign === 'bottom') {
y = y + bh - h;
}
}
if (this.y === y) {
this.y += h;
}
this.save();
this.transform(w, 0, 0, -h, x, y + h);
this.addContent("/" + image.label + " Do");
this.restore();
return this;
},
openImage: function(src) {
var image;
if (typeof src === 'string') {
image = this._imageRegistry[src];
}
if (!image) {
image = PDFImage.open(src, 'I' + (++this._imageCount));
if (typeof src === 'string') {
this._imageRegistry[src] = image;
}
}
return image;
}
};
}).call(this);