LT-55: Making the mocked version of PDF template

This commit is contained in:
Bruno Alves de Faria committed 2017-01-24 19:31:10 -02:00
1 parent 8cb13fca6b
commit edcecade56
4 files changed
+84 -4

No files matched your search

@@ -18,7 +18,9 @@ Template.measurementTableView.onCreated(() => {
Template.measurementTableView.events({ Template.measurementTableView.events({
'click .js-pdf'(event, instance) { 'click .js-pdf'(event, instance) {
OHIF.measurements.exportPdf(instance.data.measurementGroups.get()); const { measurementApi, timepointApi } = instance.data;
const measurementGroups = instance.data.measurementGroups.get();
OHIF.measurements.exportPdf(measurementGroups, measurementApi, timepointApi);
} }
}); });
@@ -2,12 +2,25 @@ import { OHIF } from 'meteor/ohif:core';
// import { $ } from 'meteor/jquery'; // import { $ } from 'meteor/jquery';
import jsPDF from 'jspdf'; import jsPDF from 'jspdf';
import html2canvas from 'html2canvas'; import html2canvas from 'html2canvas';
// import * as pdfMake from 'pdfmake';
window.jsPDF = jsPDF; window.jsPDF = jsPDF;
window.html2canvas = html2canvas; window.html2canvas = html2canvas;
// window.pdfMake = pdfMake;
OHIF.measurements.exportPdf = measurementGroups => { OHIF.measurements.exportPdf = (measurementGroups, measurementApi, timepointApi) => {
console.warn('>>>>Adding canvas to body', measurementGroups); const pdf = new jsPDF('portrait', 'pt', 'a4');
// Generate the logo
const logoImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAABLZAAAS2QBQlK26QAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAoXSURBVHic7d1LkFTVHcfxbzcDFiAqxCQ8Fc2jFMljTIIaixjLlaAoEktTiYsssnRNUS6SXVwllSULNnERK9lEkUVSeZQxpoIlkGB4mFipRISRATEYGUh0hizOjNQwt2emL+fe29P/76fqX1R1T5/+X87p39y+t6dvi+ktBe4HHgJuA5YDH5vhMcrrNPA2cBjYDewB3m20o2Q18OB43QSsApY02lEsY8AwMATsB54Dfg2czzH4YmA7cBa4aPVUnQOeBq7tOHvVWgXsBD6YpkermTpFet0u6Dh7s/AV4K0e2Bhr+joObOgwh1V5FHg/Q+9WtbUPWNNhDqf1MDDSAxtgza7OA48UzmR+O0i7nU1vszW7GgIGC2eyg9tJu5dNN251V+eBOwvmM6cnemA7re7rBOktW0et8X+XAEdm+mH1rBPArcB7FYy9jnSQ6aoKxlb1XgLuIQXCFPPG/32KdDRXc9MS0u75bysYexcpBDQ33Qi8RvoFP0WLdKrvTeDqGptSfiOkAz9nMo65AdibcTw14zDpNP4UbeABfPH3g0XA5sxjPp55PDVjHbC+6I6JAFB/2JJ5PNdG/yhcG218f9dPcs7lAuDTGcdTswrXRhtYWXMjqk7OuVzOpbNEmvsK10abdBBQ/eE6Lp3ZuVLLMo2j3lD4NzwDlEv514EXr6gdzWQj6dx+t3L91i47zsvAoUw9qNhW4ONdPqbjfJb5hNGurltWt3ZSbm4GMj3/YMnnfzLT86uzV+h+Xg4WDdSuoVlJPcoAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTABko+7m5gZ85GNMXGphso6TFgfdNN9Lm1uQZqAWPj/6o/DACjGcb5InAgwzjqDQeBL1x+Yxt4t/5eVJF/k+fFD3Am0zjqDe8U3dgGhmpuRNU5nnGst4GLGcdTswrXRhs4VHMjqs7RjGP9D3gj43hqVuHaaAO7a25E1Xku83iujf5RuDZawFLgGLC41naU2wiwhrzv3e8A/pRxPDXjCLCu6I6Jg4A/qrUdVeHH5D9wtxfYk3lM1e97ne6YOP13DSklVtbSjnIbAm4FzlYw9nrgVeCqCsZW9f4AfI0OB3QnPgn4HvAgaTdSc8sF4BGqefED/BX4bkVjq1pDwDeZ5mzOvMt++CjwEOU/Iah6XQCeAH5V8fMcJH2+4F780NhcMQxsBl7v9oF3kM4ZXrR6uk4Ad3aYw6o8BpzL0LtVbR0Abugwh7NyNbCd9Nag6Y2xJtc54Gnguo6zV63VpL8D+XCaHq1m6hTpdTvr4zUz7c4tAx4gHR9YRzpI2NTCi+osaY/sCOm8/At0+FhnzW4gvV3cBNxMCoZFjXYUzzDprft+4Hngl8D5RjuSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEmSJEkldPMNrwuATwKfqKgXFRsGTpKu1derFgEr8Ovi6jRKWhcngbGyg8wUABuAR4EtwGfLPomy+Bvp+wB/TvOX62oB9wMPk74zckWz7YQ2CvyFdO2/Z0nr5IrdRvoCyqa/5dQqrhfG56gJ95GuFNT0/4E1tT4gfWPzFQXy46QrBDW9Mdb0dQH4Toc5rEIL+D5pd7Ppbbemr9PA14smcSY7eqB5q7t6qnAm82oDP21o+6xy9V9ga9FkdrIN030u1hjp+m9V+kEPbKfVfY0AXy6Yz49MHARcRbqG2OLpflg9awS4BThWwdj3Ar/BawLOVW+QjhcVnkWauDjoD6n/OnPKZz6wlHQkOKcW8DPSLwjNTctIxwT2Ft3ZIl3S6Z9MvlKw5p5R0iW63sw45iZgT8bx1IwhYA1pjUzSJp3L9cU/980jXasvp22Zx1MzVgB3Fd3RJn2gQ/1hU+bxXBv9o3BttIFP1dyIqpNzLhfiJ/z6SeHaaJMu+a3+kPNgneuivxTOZxtYUnMjqs4iYCDTWNdkGke94dqiG8sulpeBn5TvRbPwbWBj002U8Czwu6ab6HM7gLW5BivzCaNduZ5cHe2k3Nzk2gMYLPn8T2Z6fnX2Ct3Py8Gigdo1NCupRxkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBSYASAFZgBIgRkAUmAGgBRYC7hY4nGngX9l7kWT3QhcX+Jx84EPMzz/ILC/xOOOAcMZnl+d3QIs7vIxrwGfv/zGAWCM7vcErqfc4lS1LlIu0IuMlnzcmvFSbxkrurENnKq5EVXnNOVfuJdzXfSXk0U3toGhmhtRdY5nHGuYfGGi5hWujTbwas2NqDoHMo41Cvw543hqVuHaaAPP19yIqvOLzOO5NvrH7qIbW8BC4B/A8lrbUW7DwFrgfMYxPwMcJh0s1tz1e+CeojvmkU4ZjQCb6+xI2W0H/ph5zDPAauBLmcdVvb5FOj3b0XxgH5dOI1lzq/aPz2EVVpD2LpreRqtcPTN1SoutBN7qgYat7uoUcFPBfOZ0N3ChB7bV6q72A4sK5rOjQdKuQtONW7Or48DthTOZ31bg/Rq2ycpT+0h7b11bQTpo0PQGWNPXS6S9tjoNAn/P0LtVbT1Dl7/5L9cCtgGHemBjrMl1GPjG+Bw1YQHwJOkDZE3/X1iT60Xgq52nbqrZLKLPAVtIf4CwGljSzRPoiv2HdGzmKOlc7sFm2/nIPOAu0tmjm0l7Iwsb7Sied0hBvI/0mQ3/QE+SJEmSJEnSZP8HeHuu/bhu8A8AAAAASUVORK5CYII=';
pdf.addImage(logoImage, 'PNG', 40, 40, 20, 20);
pdf.setFont('Sanchez');
pdf.setFontSize(14);
pdf.text('Open Health Imaging Foundation', 66, 54);
// Header horizontal line
pdf.setLineWidth(0.5);
pdf.line(30, 64, 565, 64);
const $element = $('<div></div>').css({ const $element = $('<div></div>').css({
border: '1px solid red', border: '1px solid red',
@@ -57,7 +70,10 @@ OHIF.measurements.exportPdf = measurementGroups => {
readMeasurements('targets'); readMeasurements('targets');
readMeasurements('nonTargets'); readMeasurements('nonTargets');
setTimeout(() => $element.remove(), i * 1000); setTimeout(() => {
$element.remove();
pdf.save('measurements.pdf');
}, i * 1000);
}; };
// window.exportCanvasToPdf = canvas => { // window.exportCanvasToPdf = canvas => {
@@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jsPDF</title>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js"></script>
<script src="pdf.js"></script>
</body>
</html>
@@ -0,0 +1,51 @@
const doc = new jsPDF('portrait', 'pt', 'a4');
// Print the logo
const logoImage = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAABLZAAAS2QBQlK26QAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAoXSURBVHic7d1LkFTVHcfxbzcDFiAqxCQ8Fc2jFMljTIIaixjLlaAoEktTiYsssnRNUS6SXVwllSULNnERK9lEkUVSeZQxpoIlkGB4mFipRISRATEYGUh0hizOjNQwt2emL+fe29P/76fqX1R1T5/+X87p39y+t6dvi+ktBe4HHgJuA5YDH5vhMcrrNPA2cBjYDewB3m20o2Q18OB43QSsApY02lEsY8AwMATsB54Dfg2czzH4YmA7cBa4aPVUnQOeBq7tOHvVWgXsBD6YpkermTpFet0u6Dh7s/AV4K0e2Bhr+joObOgwh1V5FHg/Q+9WtbUPWNNhDqf1MDDSAxtgza7OA48UzmR+O0i7nU1vszW7GgIGC2eyg9tJu5dNN251V+eBOwvmM6cnemA7re7rBOktW0et8X+XAEdm+mH1rBPArcB7FYy9jnSQ6aoKxlb1XgLuIQXCFPPG/32KdDRXc9MS0u75bysYexcpBDQ33Qi8RvoFP0WLdKrvTeDqGptSfiOkAz9nMo65AdibcTw14zDpNP4UbeABfPH3g0XA5sxjPp55PDVjHbC+6I6JAFB/2JJ5PNdG/yhcG218f9dPcs7lAuDTGcdTswrXRhtYWXMjqk7OuVzOpbNEmvsK10abdBBQ/eE6Lp3ZuVLLMo2j3lD4NzwDlEv514EXr6gdzWQj6dx+t3L91i47zsvAoUw9qNhW4ONdPqbjfJb5hNGurltWt3ZSbm4GMj3/YMnnfzLT86uzV+h+Xg4WDdSuoVlJPcoAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswAkAIzAKTADAApMANACswA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';
doc.addImage(logoImage, 'PNG', 40, 30, 20, 20);
doc.setFont('Sanchez');
doc.setFontSize(14);
doc.setFontStyle('normal');
doc.setTextColor(0, 0, 0);
doc.text('Open Health Imaging Foundation', 66, 44);
// Print header horizontal line
doc.setDrawColor(0);
doc.setLineWidth(0.5);
doc.line(40, 54, 555, 54);
// Print header information
doc.setFont('Verdana');
doc.setFontSize(8);
doc.text('DEMO - 13-541', 40, 76);
doc.setFillColor(16);
doc.roundedRect(110, 65, 50, 15, 3, 3, 'F');
doc.setTextColor(255, 255, 255);
doc.setFontStyle('bold');
doc.text('RECIST 1.1', 114, 76);
// Print patient information
doc.setFont('Verdana');
doc.setFontSize(10);
doc.setFontStyle('normal');
doc.setTextColor(0, 0, 0);
doc.text('Ana Goodwin\tMGH 4044827\t13-Aug-1942\tLung Non-Small', 40, 96);
// Print timepoint header
doc.setFillColor(223, 233, 242);
doc.rect(40, 106, 515, 18, 'F');
doc.setFont('Verdana');
doc.setFontSize(9);
doc.setFontStyle('normal');
doc.setTextColor(0, 0, 0);
doc.setDrawColor(223, 233, 242);
doc.setLineWidth(4);
doc.line(297, 124, 297, 380);
const image1 = 'data:image/jpeg;base64,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 truncated
const image2 = 'data:image/jpeg;base64,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 truncated
doc.addImage(image1, 'JPEG', 40, 124, 256, 256);
doc.addImage(image2, 'JPEG', 299, 124, 256, 256);
doc.output('datauri');