84 lines
2.4 KiB
JavaScript
84 lines
2.4 KiB
JavaScript
import jsPDF from 'jspdf';
|
|
import { _ } from 'meteor/underscore';
|
|
|
|
export class BaseReport {
|
|
constructor(options) {
|
|
const defaultOptions = {
|
|
width: 595.28,
|
|
height: 841.89,
|
|
marginTop: 30,
|
|
marginLeft: 40,
|
|
marginRight: 40,
|
|
marginBottom: 30,
|
|
showPageNumber: true
|
|
};
|
|
|
|
this.options = _.extend(defaultOptions, options);
|
|
this.init();
|
|
}
|
|
|
|
init() {
|
|
this.doc = new jsPDF('portrait', 'pt', [this.options.width, this.options.height]);
|
|
this.options.width = Math.floor(this.options.width);
|
|
this.options.height = Math.floor(this.options.height);
|
|
this.currentPage = 1;
|
|
this.printStatic();
|
|
}
|
|
|
|
printStatic() {
|
|
this.x = this.options.marginLeft;
|
|
this.y = this.options.marginTop;
|
|
this.printHeader();
|
|
if (this.options.showPageNumber) {
|
|
this.printPageNumber();
|
|
}
|
|
}
|
|
|
|
newPage() {
|
|
this.doc.addPage();
|
|
this.currentPage++;
|
|
this.printStatic();
|
|
}
|
|
|
|
printHeader() {
|
|
const { marginLeft, marginRight, width } = this.options;
|
|
const doc = this.doc;
|
|
let y = this.y;
|
|
|
|
// Print the logo strokes
|
|
doc.setDrawColor(0).setLineWidth(1);
|
|
doc.roundedRect(marginLeft + 0.5, y + 0.5, 8, 8, 0.5, 0.5, 'D');
|
|
doc.roundedRect(marginLeft + 11, y + 0.5, 8, 8, 0.5, 0.5, 'D');
|
|
doc.roundedRect(marginLeft + 0.5, y + 11, 8, 8, 0.5, 0.5, 'D');
|
|
doc.roundedRect(marginLeft + 11, y + 11, 8, 8, 0.5, 0.5, 'D');
|
|
|
|
// Print the logo text
|
|
doc.setFont('Serif').setFontSize(16).setFontStyle('normal').setTextColor(0);
|
|
doc.text('Open Health Imaging Foundation', 66, y + 14);
|
|
y += 24;
|
|
|
|
// Print header horizontal line
|
|
doc.setDrawColor(0).setLineWidth(0.5);
|
|
doc.line(marginLeft, y, width - marginRight, y);
|
|
y += 1;
|
|
|
|
this.y = y;
|
|
}
|
|
|
|
printPageNumber() {
|
|
const doc = this.doc;
|
|
const { marginBottom, marginRight, width, height } = this.options;
|
|
doc.setFont('Verdana');
|
|
doc.setFontSize(8);
|
|
doc.setFontStyle('normal');
|
|
doc.setTextColor(0);
|
|
const text = `PAGE ${this.currentPage}`;
|
|
const size = doc.getTextDimensions(text);
|
|
doc.text(text, width - marginRight - size.w, height - marginBottom + (size.h / 2));
|
|
}
|
|
|
|
save(fileName) {
|
|
this.doc.save(fileName || 'report.pdf');
|
|
}
|
|
}
|