Commit b33385d8 by Luciano Barletta

changed the compilation method

Now every drawable entity has a draw(pdf) function that takes in a pdf and adds a drawing to it

Div holds drawable entities, so it checks that the method exists and calls them all in its draw method

Now there's an option for adding children with absolute coordinates

the adding process is generic now

there's an utility for compiling coordinates in the Div class.
1 parent 2c138709
"use strict";
/** Coordinate container that occupies the whole page **/
const A4 = new Div(
new Vector(0, 0),
new Vector(595, 842)
);
const Pos = {
"beg": 0,
"beg_margin": 5,
"quarter": 25,
"third": 33.33,
"middle": 50,
"two_thirds": 66.67,
"three_quarters": 75,
"end_margin": 95,
"end": 100
};
const containerSize = 86;
function generateDivTree(data) {
/**
* The lambdas serve as "apply" functions
* Each function processes an element, executed in order of appeareance in HTML.
* They all return a coordinate "pointer" to draw.
*/
const functionMapping = [
(pointer, data) => headerToPDF(pointer, data['header']),
(pointer, data) => alineadorToPDF(pointer, data['alineador']),
(pointer, data) => suspensionToPDF(pointer, data['suspension']),
(pointer, data) => frenosToPDF(pointer, data['frenos']),
(pointer, data) => traseroToPDF(pointer, data['trasero']),
(pointer, data) => gaseshumosToPDF(pointer, data['gaseshumos'])
];
/**
* We pass the pointer to each function, which then modify it and passes it to the next,
* We start with (0%,0%)
*/
functionMapping.reduce(
(pointer, treeMaker) => treeMaker(pointer, data),
A4.position
);
return A4;
}
function headerToPDF(pointer, data) {
const header = A4.addChild(pointer, new Vector(Pos.end, 3));
header.addText(
"Dominio: " + data['dominio'],
new Vector(Pos.beg_margin, Pos.two_thirds)
);
header.addText(
"Fecha: " + data['fecha'],
new Vector(Pos.third, Pos.two_thirds)
);
return new Vector(pointer.x, pointer.y + 3);
}
function alineadorToPDF(pointer, data) {
const alineador = A4.addChild(pointer, new Vector(Pos.end, 5));
alineador.addText(
"Resultado Pruebas en Banco de Alineador al Paso",
new Vector(Pos.beg_margin + 2, Pos.third)
);
alineador.addText(
"Eje Delantero",
new Vector(Pos.beg_margin + 2, Pos.two_thirds)
);
alineador.addText(
data['eje_delan'],
new Vector(Pos.quarter, Pos.two_thirds)
);
return new Vector(pointer.x, pointer.y + 5);
}
function suspensionToPDF(pointer, data) {
const suspension = A4.addChild(pointer, new Vector(Pos.end, 15));
const divsize = new Vector(containerSize, Pos.middle);
const eje1 = suspension.addChild(new Vector(Pos.beg_margin + 2, Pos.beg), divsize)
const eje2 = suspension.addChild(new Vector(Pos.beg_margin + 2, Pos.middle), divsize)
const table = (container, eje, RI, peso, RD) => {
container.addTexts([
[`Resultado Pruebas en Banco de Suspensión - Eje ${eje}`, new Vector(0, Pos.third)],
["Rendimiento Izquierdo", new Vector(Pos.beg, Pos.two_thirds)],
[RI, new Vector(Pos.beg + 10, Pos.end)],
["Peso Total del Eje", new Vector(Pos.middle - 10, Pos.two_thirds)],
[peso, new Vector(Pos.middle - 3, Pos.end)],
["Rendimiento Derecho", new Vector(Pos.three_quarters - 5, Pos.two_thirds)],
[RD, new Vector(Pos.three_quarters + 5, Pos.end)]
]);
};
table(eje1, 1, data[0]["ren_izq"], data[0]["peso"], data[0]["ren_der"])
table(eje2, 2, data[1]["ren_izq"], data[1]["peso"], data[1]["ren_der"])
return new Vector(pointer.x, pointer.y + 15);
}
function frenosToPDF(pointer, data) {
const frenos = A4.addChild(pointer, new Vector(Pos.end, 60));
const divsize = new Vector(containerSize, Pos.quarter);
const eje1 = frenos.addChild(new Vector(Pos.beg_margin + 2, Pos.beg), divsize);
const eje2 = frenos.addChild(new Vector(Pos.beg_margin + 2, Pos.quarter), divsize);
const eje3 = frenos.addChild(new Vector(Pos.beg_margin + 2, Pos.middle), divsize);
const eje4 = frenos.addChild(new Vector(Pos.beg_margin + 2, Pos.three_quarters), divsize);
const table = (container, eje, FI, RI, OI, peso, FD, RD, OD) => {
container.addTexts([
[`Diagnóstico de Frenos - Eje ${eje}`, new Vector(Pos.beg, Pos.beg_margin + 10)],
["Fuerza IZ", new Vector(Pos.beg_margin, Pos.quarter)],
[FI, new Vector(Pos.beg_margin + 3, Pos.quarter + 10)],
["Res.Rodadura IZ", new Vector(Pos.beg_margin, Pos.middle)],
[RI, new Vector(Pos.beg_margin + 3, Pos.middle + 10)],
["Ovalidad IZ", new Vector(Pos.beg_margin, Pos.three_quarters)],
[OI, new Vector(Pos.beg_margin + 3, Pos.three_quarters + 10)],
["Peso del Eje", new Vector(Pos.middle - 10, Pos.quarter)],
[peso, new Vector(Pos.middle - 5, Pos.quarter + 10)],
["Fuerza DE", new Vector(Pos.three_quarters, Pos.quarter)],
[FD, new Vector(Pos.three_quarters + 3, Pos.quarter + 10)],
["Res.Rodadura DE", new Vector(Pos.three_quarters, Pos.middle)],
[RD, new Vector(Pos.three_quarters + 3, Pos.middle + 10)],
["Ovalidad DE", new Vector(Pos.three_quarters, Pos.three_quarters)],
[OD, new Vector(Pos.three_quarters + 3, Pos.three_quarters + 10)]
]);
};
let x;
x = data[0];
table(eje1, 1, x["f_izq"], x["res_izq"], x["ov_izq"], x["peso"], x["f_der"], x["res_der"], x["ov_der"])
x = data[1];
table(eje2, 2, x["f_izq"], x["res_izq"], x["ov_izq"], x["peso"], x["f_der"], x["res_der"], x["ov_der"])
x = data[2];
table(eje3, 3, x["f_izq"], x["res_izq"], x["ov_izq"], x["peso"], x["f_der"], x["res_der"], x["ov_der"])
x = data[3];
table(eje4, 4, x["f_izq"], x["res_izq"], x["ov_izq"], x["peso"], x["f_der"], x["res_der"], x["ov_der"])
return new Vector(pointer.x, pointer.y + 60);
}
function traseroToPDF(pointer, data) {
const trasero = A4.addChild(new Vector(pointer.x + Pos.beg_margin + 2, pointer.y), new Vector(containerSize, 9));
trasero.addTexts([
["Diagnóstico de Frenos - Eje Trasero - Frenos de Mano", new Vector(Pos.beg, Pos.third)],
["Fuerza IZ", new Vector(Pos.beg_margin, Pos.two_thirds)],
[data['f_izq'], new Vector(Pos.beg_margin, Pos.end)],
["Fuerza DE", new Vector(Pos.three_quarters, Pos.two_thirds)],
[data['f_der'], new Vector(Pos.three_quarters, Pos.end)],
]);
return new Vector(pointer.x, pointer.y + 9);
}
function gaseshumosToPDF(pointer, data) {
const gaseshumos = A4.addChild(new Vector(pointer.x + Pos.beg_margin + 2, pointer.y), new Vector(containerSize, 9));
gaseshumos.addTexts([
["Resultado Analizador de Gases", new Vector(Pos.beg, Pos.third)],
["Resultado Analizador de Humos", new Vector(Pos.two_thirds, Pos.third)],
[`CO ${data['co']} % HC ${data['hc']} ppm`, new Vector(Pos.beg, Pos.two_thirds)],
[`Medición ${data['med']}`, new Vector(Pos.three_quarters, Pos.two_thirds)]
]);
return new Vector(pointer.x, pointer.y + 9);
}
function compile(tree, pdf) {
pdf.setFont("Courier");
pdf.setFontType("normal");
pdf.setFontSize(10);
tree.children.forEach( child => {
switch (child.constructor.name) {
case "Text":
pdf.text(child.text, child.position.x, child.position.y);
break;
case "Div":
if (child.drawOutline) {
child.drawDivBox(pdf);
}
compile(child, pdf);
break;
}
});
return pdf;
}
\ No newline at end of file \ No newline at end of file
...@@ -8,14 +8,69 @@ class Vector { ...@@ -8,14 +8,69 @@ class Vector {
this.x = x; this.x = x;
this.y = y; this.y = y;
} }
/**
* @param {Vector} vector
*/
addv(vector) {
return new Vector(
this.x + vector.x,
this.y + vector.y
);
}
/**
* @param {number} x
* @param {number} y
*/
addxy(x = 0,y = 0) {
return new Vector(
this.x + x,
this.y + y
);
}
/**
* @param {number} n
*/
mult(n) {
return new Vector(
this.x * n,
this.y * n
);
}
}
class Line {
/**
* @param {Vector} beggining
* @param {Vector} end
*/
constructor(beggining, end) {
this.beggining = beggining;
this.end = end;
}
/**
* @param {jsPDF} pdf
*/
draw(pdf) {
pdf.line(
this.beggining.x,
this.beggining.y,
this.end.x,
this.end.y
);
}
} }
class Text { class Text {
/** /**
* Both arguments should be real coordinates and not a percentage based on parent element * Both arguments should be real coordinates and not a percentage based on parent element
* @param {string} text
* @param {Vector} position * @param {Vector} position
* @param {Vector?} size
*/ */
constructor(text, position) { constructor(text, position) {
this.text = text; this.text = text;
...@@ -23,18 +78,15 @@ class Text { ...@@ -23,18 +78,15 @@ class Text {
} }
/** /**
* Compiles the true position coordinates based on percentage relative to parent element * @param {jsPDF} pdf
* Assumes the elements grow to the right and down
* @param {Vector} position
*/ */
getDrawCoordinates(position) { draw(pdf) {
return new Vector( pdf.text(
(this.size.x * position.x / 100) + this.position.x, this.text,
(this.size.y * position.y / 100) + this.position.y, this.position.x,
this.position.y
); );
} }
} }
/** /**
...@@ -42,11 +94,9 @@ class Text { ...@@ -42,11 +94,9 @@ class Text {
* It does NOT resize or realocate its children to fit, in any way. * It does NOT resize or realocate its children to fit, in any way.
* Its only purpose is to provide percentage based relative coordinates. * Its only purpose is to provide percentage based relative coordinates.
*/ */
class Div { class Div {
/** /**
* Both arguments should be real coordinates and not a percentage based on parent element
* @param {Vector} position * @param {Vector} position
* @param {Vector} size * @param {Vector} size
* @param {bool} draw * @param {bool} draw
...@@ -58,55 +108,61 @@ class Div { ...@@ -58,55 +108,61 @@ class Div {
this.children = []; this.children = [];
} }
addChild(position, size) { /** Allows any position you want **/
if (position.x < 0 || position.x > 100) addAbsoluteChild(child) {
console.error("position.x has to be an int between 0 and 100"); if ("draw" in child === false)
if (position.y < 0 || position.y > 100) console.error("the object passed needs to have a 'draw' method that takes a jsPDF object");
console.error("position.y has to be an int between 0 and 100"); this.children.push(child);
if (size.x < 0 || size.x > 100) return this.children[this.children.length - 1];
console.error("size.x has to be an int between 0 and 100");
if (size.y < 0 || size.y > 100)
console.error("size.y has to be an int between 0 and 100");
let div = new Div(
this.getDrawCoordinates(position),
this.getSize(size)
);
this.children.push(div);
return div;
} }
/** Allows only positions inside the Div **/
addRelativeChild(child) {
if ("draw" in child === false)
console.error("the object passed needs to have a 'draw' method that takes a jsPDF object");
addText(text, position) { if ("position" in child)
if (position.x < 0 || position.x > 100) child.position = this._getDrawCoordinates(child.position);
console.error("position.x has to be an int between 0 and 100");
if (position.y < 0 || position.y > 100) if ("size" in child)
console.error("position.y has to be an int between 0 and 100"); child.size = this._getSizeCoordinates(child.size);
this.children.push(new Text( this.children.push(child);
text, return this.children[this.children.length - 1];
this.getDrawCoordinates(position)
));
} }
/** addAbsoluteChildren(children) {
* Array de arrays de la forma ['texto', VectorPosición] const pointers = [];
* @param {array} textArray children.forEach(c => pointers.push(this.addAbsoluteChild(c)));
*/ return pointers;
addTexts(textArray) {
textArray.forEach( args =>
this.addText(args[0], args[1])
);
} }
addRelativeChildren(children) {
const pointers = [];
children.forEach(c => pointers.push(this.addRelativeChild(c)));
return pointers;
}
/** Allows any position you want relative to the position of this Div. Percentage based **/
getAbsoluteVector(vector) {
return this.position.addxy(
(this.size.x * vector.x / 100),
(this.size.y * vector.y / 100)
);
}
/** /**
* Compiles the true position coordinates based on percentage relative to parent element * Compiles the true position coordinates based on percentage relative to parent element
* Assumes the elements grow to the right and down * Assumes the elements grow to the right and down
* @param {Vector} position * @param {Vector} position
*/ */
getDrawCoordinates(position) { _getDrawCoordinates(position) {
return new Vector ( if (position.x < 0 || position.x > 100 || position.y < 0 || position.y > 100)
(this.size.x * position.x / 100) + this.position.x, console.error("position components need to be real numbers in the range [0;100]");
(this.size.y * position.y / 100) + this.position.y,
return this.position.addxy(
(this.size.x * position.x / 100),
(this.size.y * position.y / 100)
); );
} }
...@@ -115,46 +171,74 @@ class Div { ...@@ -115,46 +171,74 @@ class Div {
* Assumes the elements grow to the right and down * Assumes the elements grow to the right and down
* @param {Vector?} size * @param {Vector?} size
*/ */
getSize(size) { _getSizeCoordinates(size) {
if (size === null) return null; if (size.x < 0 || size.x > 100 || size.y < 0 || size.y > 100)
console.error("size components need to be real numbers in the range [0;100]");
return new Vector ( return new Vector (
this.size.x * size.x / 100, this.size.x * size.x / 100,
this.size.y * size.y / 100, this.size.y * size.y / 100,
); );
} }
/** draw(pdf) {
* Debug method to see the confines of the Div /** Draw the confines of the div **/
* @param {jsPDF} pdf if (this.drawOutline) {
*/ /** Upper **/
drawDivBox(pdf) { this.addAbsoluteChild(new Line(
/** Upper **/ this.position,
pdf.line( this.position.addxy(this.size.x, 0)
this.position.x, ));
this.position.y, /** Lower **/
this.position.x + this.size.x, this.addAbsoluteChild(new Line(
this.position.y this.position.addxy(0, this.size.y),
); this.position.addv(this.size)
/** Lower **/ ));
pdf.line( /** Left **/
this.position.x, this.addAbsoluteChild(new Line(
this.position.y + this.size.y, this.position,
this.position.x + this.size.x, this.position.addxy(0, this.size.y)
this.position.y + this.size.y ));
); /** Right **/
/** Left **/ this.addAbsoluteChild(new Line(
pdf.line( this.position.addxy(this.size.x, 0),
this.position.x, this.position.addv(this.size)
this.position.y, ));
this.position.x, }
this.position.y + this.size.y
); /** Recursion **/
/** Right **/ this.children.forEach( child => child.draw(pdf) );
pdf.line(
this.position.x + this.size.x,
this.position.y,
this.position.x + this.size.x,
this.position.y + this.size.y
);
} }
}
const Pos = {
"beg": 0,
"beg_margin": 5,
"quarter": 25,
"third": 33.33,
"middle": 50,
"two_thirds": 66.67,
"three_quarters": 75,
"end_margin": 95,
"end": 100
};
function compile(tree, pdf) {
pdf.setFont("Courier");
pdf.setFontType("normal");
pdf.setFontSize(10);
tree.children.forEach(child => {
switch (child.constructor.name) {
case "Text":
pdf.text(child.text, child.position.x, child.position.y);
break;
case "Div":
if (child.drawOutline) {
child.drawDivBox(pdf);
}
compile(child, pdf);
break;
}
});
return pdf;
} }
\ No newline at end of file \ No newline at end of file
class PDF1 {
"use strict";
constructor() {
/** Coordinate container that occupies the whole page **/
this.A4 = new Div(
new Vector(0, 0),
new Vector(595, 842)
);
this.containerSize = 86;
}
pdf(data) {
/**
* The lambdas serve as "apply" functions
* Each function processes an element, executed in order of appeareance in HTML.
* They all return a coordinate "pointer" to draw.
*/
const pdfthis = this;
const functionMapping = [
(pointer, data) => pdfthis.headerToPDF(pointer, data['header']),
(pointer, data) => pdfthis.alineadorToPDF(pointer, data['alineador']),
(pointer, data) => pdfthis.suspensionToPDF(pointer, data['suspension']),
(pointer, data) => pdfthis.frenosToPDF(pointer, data['frenos']),
(pointer, data) => pdfthis.traseroToPDF(pointer, data['trasero']),
(pointer, data) => pdfthis.gaseshumosToPDF(pointer, data['gaseshumos'])
];
/**
* We pass the pointer to each function, which then modify it and passes it to the next,
* We start with (0%,0%)
*/
functionMapping.reduce(
(pointer, treeMaker) => treeMaker(pointer, data),
pdfthis.A4.position
);
return this.A4;
}
headerToPDF(pointer, data) {
const header = this.A4.addRelativeChild(new Div(pointer, new Vector(Pos.end, 3)));
header.addRelativeChildren([
new Text("Dominio: " + data['dominio'], new Vector(Pos.beg_margin, Pos.two_thirds)),
new Text("Fecha: " + data['fecha'], new Vector(Pos.third, Pos.two_thirds))
]);
return pointer.addxy(0,3);
}
alineadorToPDF(pointer, data) {
const alineador = this.A4.addRelativeChild(new Div(pointer, new Vector(Pos.end, 5)));
alineador.addRelativeChildren([
new Text("Resultado Pruebas en Banco de Alineador al Paso", new Vector(Pos.beg_margin + 2, Pos.third)),
new Text("Eje Delantero", new Vector(Pos.beg_margin + 2, Pos.two_thirds)),
new Text(data['eje_delan'], new Vector(Pos.quarter, Pos.two_thirds))
]);
return pointer.addxy(0, 5);
}
suspensionToPDF(pointer, data) {
const suspension = this.A4.addRelativeChild(new Div(pointer, new Vector(Pos.end, 15)));
const divsize = new Vector(this.containerSize, Pos.middle);
const ejes = suspension.addRelativeChildren([
new Div(new Vector(Pos.beg_margin + 2, Pos.beg), divsize),
new Div(new Vector(Pos.beg_margin + 2, Pos.middle), divsize)
]);
const table = (container, eje, RI, peso, RD) => {
container.addRelativeChildren([
new Text(`Resultado Pruebas en Banco de Suspensión - Eje ${eje}`, new Vector(0, Pos.third)),
new Text("Rendimiento Izquierdo", new Vector(Pos.beg, Pos.two_thirds)),
new Text(RI, new Vector(Pos.beg + 10, Pos.end)),
new Text("Peso Total del Eje", new Vector(Pos.middle - 10, Pos.two_thirds)),
new Text(peso, new Vector(Pos.middle - 3, Pos.end)),
new Text("Rendimiento Derecho", new Vector(Pos.three_quarters - 5, Pos.two_thirds)),
new Text(RD, new Vector(Pos.three_quarters + 5, Pos.end))
]);
};
for (let i = 0; i < ejes.length; i++) {
const x = data[i];
table(ejes[i], i-1, x["ren_izq"], x["peso"], x["ren_der"])
}
return pointer.addxy(0, 15);
}
frenosToPDF(pointer, data) {
const frenos = this.A4.addRelativeChild(new Div(pointer, new Vector(Pos.end, 60)));
const divsize = new Vector(this.containerSize, Pos.quarter);
const ejes = frenos.addRelativeChildren([
new Div(new Vector(Pos.beg_margin + 2, Pos.beg), divsize),
new Div(new Vector(Pos.beg_margin + 2, Pos.quarter), divsize),
new Div(new Vector(Pos.beg_margin + 2, Pos.middle), divsize),
new Div(new Vector(Pos.beg_margin + 2, Pos.three_quarters), divsize)
]);
const table = (container, eje, FI, RI, OI, peso, FD, RD, OD) => {
container.addRelativeChildren([
new Text(`Diagnóstico de Frenos - Eje ${eje}`, new Vector(Pos.beg, Pos.beg_margin + 10)),
new Text("Fuerza IZ", new Vector(Pos.beg_margin, Pos.quarter)),
new Text(FI, new Vector(Pos.beg_margin + 3, Pos.quarter + 10)),
new Text("Res.Rodadura IZ", new Vector(Pos.beg_margin, Pos.middle)),
new Text(RI, new Vector(Pos.beg_margin + 3, Pos.middle + 10)),
new Text("Ovalidad IZ", new Vector(Pos.beg_margin, Pos.three_quarters)),
new Text(OI, new Vector(Pos.beg_margin + 3, Pos.three_quarters + 10)),
new Text("Peso del Eje", new Vector(Pos.middle - 10, Pos.quarter)),
new Text(peso, new Vector(Pos.middle - 5, Pos.quarter + 10)),
new Text("Fuerza DE", new Vector(Pos.three_quarters, Pos.quarter)),
new Text(FD, new Vector(Pos.three_quarters + 3, Pos.quarter + 10)),
new Text("Res.Rodadura DE", new Vector(Pos.three_quarters, Pos.middle)),
new Text(RD, new Vector(Pos.three_quarters + 3, Pos.middle + 10)),
new Text("Ovalidad DE", new Vector(Pos.three_quarters, Pos.three_quarters)),
new Text(OD, new Vector(Pos.three_quarters + 3, Pos.three_quarters + 10))
]);
};
for (let i = 0; i < ejes.length; i++) {
const x = data[i];
table(ejes[i], i-1, x["f_izq"], x["res_izq"], x["ov_izq"], x["peso"], x["f_der"], x["res_der"], x["ov_der"]);
}
return pointer.addxy(0, 60);
}
traseroToPDF(pointer, data) {
const trasero = this.A4.addRelativeChild(new Div(pointer.addxy(Pos.beg_margin + 2, 0), new Vector(this.containerSize, 9)));
trasero.addRelativeChildren([
new Text("Diagnóstico de Frenos - Eje Trasero - Frenos de Mano", new Vector(Pos.beg, Pos.third)),
new Text("Fuerza IZ", new Vector(Pos.beg_margin, Pos.two_thirds)),
new Text(data['f_izq'], new Vector(Pos.beg_margin, Pos.end)),
new Text("Fuerza DE", new Vector(Pos.three_quarters, Pos.two_thirds)),
new Text(data['f_der'], new Vector(Pos.three_quarters, Pos.end)),
]);
return pointer.addxy(0, 9);
}
gaseshumosToPDF(pointer, data) {
const gaseshumos = this.A4.addRelativeChild(new Div(pointer.addxy(Pos.beg_margin + 2, 0), new Vector(this.containerSize, 9)));
gaseshumos.addRelativeChildren([
new Text("Resultado Analizador de Gases", new Vector(Pos.beg, Pos.third)),
new Text("Resultado Analizador de Humos", new Vector(Pos.two_thirds, Pos.third)),
new Text(`CO ${data['co']} % HC ${data['hc']} ppm`, new Vector(Pos.beg, Pos.two_thirds)),
new Text(`Medición ${data['med']}`, new Vector(Pos.three_quarters, Pos.two_thirds))
]);
return pointer.addxy(0, 9);
}
}
\ No newline at end of file \ No newline at end of file
class PDF2 {
"use strict";
constructor() {
/** Coordinate container that occupies the whole page **/
this.A4 = new Div(
new Vector(0, 0),
new Vector(595, 842)
);
this.containerSize = 86;
}
pdf(data) {
/**
* The lambdas serve as "apply" functions
* Each function processes an element, executed in order of appeareance in HTML.
* They all return a coordinate "pointer" to draw.
*/
const pdfthis = this;
const functionMapping = [
(pointer, data) => pdfthis.headerToPDF(pointer, data['header']),
(pointer, data) => pdfthis.alineadorToPDF(pointer, data['alineador']),
(pointer, data) => pdfthis.suspensionToPDF(pointer, data['suspension']),
(pointer, data) => pdfthis.frenosToPDF(pointer, data['frenos']),
(pointer, data) => pdfthis.traseroToPDF(pointer, data['trasero']),
(pointer, data) => pdfthis.gaseshumosToPDF(pointer, data['gaseshumos'])
];
/**
* We pass the pointer to each function, which then modify it and passes it to the next,
* We start with (0%,0%)
*/
functionMapping.reduce(
(pointer, treeMaker) => treeMaker(pointer, data),
pdfthis.A4.position
);
return this.A4;
}
headerToPDF(pointer, data) {
const header = this.A4.addRelativeChild(new Div(pointer, new Vector(Pos.end, 3)));
header.addRelativeChildren([
new Text("Dominio: " + data['dominio'], new Vector(Pos.beg_margin, Pos.two_thirds)),
new Text("Fecha: " + data['fecha'], new Vector(Pos.third, Pos.two_thirds))
]);
return pointer.addxy(0, 3);
}
alineadorToPDF(pointer, data) {
const alineador = this.A4.addRelativeChild(new Div(pointer, new Vector(Pos.end, 5)));
alineador.addRelativeChildren([
new Text("Resultado Pruebas en Banco de Alineador al Paso", new Vector(Pos.beg_margin + 2, Pos.third)),
new Text("Eje Delantero", new Vector(Pos.beg_margin + 2, Pos.two_thirds)),
new Text(data['eje_delan'], new Vector(Pos.quarter, Pos.two_thirds))
]);
return pointer.addxy(0, 5);
}
suspensionToPDF(pointer, data) {
const suspension = this.A4.addRelativeChild(new Div(pointer, new Vector(Pos.end, 15)));
const divsize = new Vector(this.containerSize, Pos.middle);
const ejes = suspension.addRelativeChildren([
new Div(new Vector(Pos.beg_margin + 2, Pos.beg), divsize),
new Div(new Vector(Pos.beg_margin + 2, Pos.middle), divsize)
]);
const table = (container, eje, RI, peso, RD) => {
container.addRelativeChildren([
new Text(`Resultado Pruebas en Banco de Suspensión - Eje ${eje}`, new Vector(0, Pos.third)),
new Text("Rendimiento Izquierdo", new Vector(Pos.beg, Pos.two_thirds)),
new Text(RI, new Vector(Pos.beg + 10, Pos.end)),
new Text("Peso Total del Eje", new Vector(Pos.middle - 10, Pos.two_thirds)),
new Text(peso, new Vector(Pos.middle - 3, Pos.end)),
new Text("Rendimiento Derecho", new Vector(Pos.three_quarters - 5, Pos.two_thirds)),
new Text(RD, new Vector(Pos.three_quarters + 5, Pos.end))
]);
};
for (let i = 0; i < ejes.length; i++) {
const x = data[i];
table(ejes[i], i - 1, x["ren_izq"], x["peso"], x["ren_der"])
}
return pointer.addxy(0, 15);
}
frenosToPDF(pointer, data) {
const frenos = this.A4.addRelativeChild(new Div(pointer, new Vector(Pos.end, 60)));
const divsize = new Vector(this.containerSize, Pos.quarter);
const ejes = frenos.addRelativeChildren(
new Div(new Vector(Pos.beg_margin + 2, Pos.beg), divsize),
new Div(new Vector(Pos.beg_margin + 2, Pos.quarter), divsize),
new Div(new Vector(Pos.beg_margin + 2, Pos.middle), divsize),
new Div(new Vector(Pos.beg_margin + 2, Pos.three_quarters), divsize)
)
const table = (container, eje, FI, RI, OI, peso, FD, RD, OD) => {
container.addRelativeChildren([
new Text(`Diagnóstico de Frenos - Eje ${eje}`, new Vector(Pos.beg, Pos.beg_margin + 10)),
new Text("Fuerza IZ", new Vector(Pos.beg_margin, Pos.quarter)),
new Text(FI, new Vector(Pos.beg_margin + 3, Pos.quarter + 10)),
new Text("Res.Rodadura IZ", new Vector(Pos.beg_margin, Pos.middle)),
new Text(RI, new Vector(Pos.beg_margin + 3, Pos.middle + 10)),
new Text("Ovalidad IZ", new Vector(Pos.beg_margin, Pos.three_quarters)),
new Text(OI, new Vector(Pos.beg_margin + 3, Pos.three_quarters + 10)),
new Text("Peso del Eje", new Vector(Pos.middle - 10, Pos.quarter)),
new Text(peso, new Vector(Pos.middle - 5, Pos.quarter + 10)),
new Text("Fuerza DE", new Vector(Pos.three_quarters, Pos.quarter)),
new Text(FD, new Vector(Pos.three_quarters + 3, Pos.quarter + 10)),
new Text("Res.Rodadura DE", new Vector(Pos.three_quarters, Pos.middle)),
new Text(RD, new Vector(Pos.three_quarters + 3, Pos.middle + 10)),
new Text("Ovalidad DE", new Vector(Pos.three_quarters, Pos.three_quarters)),
new Text(OD, new Vector(Pos.three_quarters + 3, Pos.three_quarters + 10))
]);
};
for (let i = 0; i < ejes.length; i++) {
const x = data[i];
table(ejes[i], i - 1, x["f_izq"], x["res_izq"], x["ov_izq"], x["peso"], x["f_der"], x["res_der"], x["ov_der"]);
}
return pointer.addxy(0, 60);
}
traseroToPDF(pointer, data) {
const trasero = this.A4.addRelativeChild(new Div(pointer.addxy(Pos.beg_margin + 2, 0), new Vector(this.containerSize, 9)));
trasero.addRelativeChildren([
new Text("Diagnóstico de Frenos - Eje Trasero - Frenos de Mano", new Vector(Pos.beg, Pos.third)),
new Text("Fuerza IZ", new Vector(Pos.beg_margin, Pos.two_thirds)),
new Text(data['f_izq'], new Vector(Pos.beg_margin, Pos.end)),
new Text("Fuerza DE", new Vector(Pos.three_quarters, Pos.two_thirds)),
new Text(data['f_der'], new Vector(Pos.three_quarters, Pos.end)),
]);
return pointer.addxy(0, 9);
}
gaseshumosToPDF(pointer, data) {
const gaseshumos = this.A4.addRelativeChild(new Div(pointer.addxy(Pos.beg_margin + 2, 0), new Vector(this.containerSize, 9)));
gaseshumos.addRelativeChildren([
new Text("Resultado Analizador de Gases", new Vector(Pos.beg, Pos.third)),
new Text("Resultado Analizador de Humos", new Vector(Pos.two_thirds, Pos.third)),
new Text(`CO ${data['co']} % HC ${data['hc']} ppm`, new Vector(Pos.beg, Pos.two_thirds)),
new Text(`Medición ${data['med']}`, new Vector(Pos.three_quarters, Pos.two_thirds))
]);
return pointer.addxy(0, 9);
}
}
\ No newline at end of file \ No newline at end of file
...@@ -6,93 +6,25 @@ ...@@ -6,93 +6,25 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.3.2/jspdf.min.js"></script>
<script src="{{ url_for('static', filename = 'src/div.js') }}"></script> <script src="{{ url_for('static', filename = 'src/div.js') }}"></script>
<script src="{{ url_for('static', filename = 'src/getters.js') }}"></script> <script src="{{ url_for('static', filename = 'src/getters.js') }}"></script>
<script src="{{ url_for('static', filename = 'src/convert.js') }}"></script> <script src="{{ url_for('static', filename = 'src/pdf1.js') }}"></script>
<script src="{{ url_for('static', filename = 'src/pdf2.js') }}"></script>
<link rel="stylesheet" href="{{ url_for('static', filename = 'styles/general.css') }}"> <link rel="stylesheet" href="{{ url_for('static', filename = 'styles/general.css') }}">
<!--INCLUIMOS LA FUENTE--> <!--INCLUIMOS LA FUENTE-->
<link rel="stylesheet" media="screen" href="https://fontlibrary.org/face/cmu-typewriter" type="text/css" /> <link rel="stylesheet" media="screen" href="https://fontlibrary.org/face/cmu-typewriter" type="text/css" />
<title>Pruebas de Alineamiento</title> <title>Pruebas de Alineamiento</title>
</head> </head>
<body> <body>
<div id = "pdf">
<!-- Header -->
<div class="TableContainer">
{% from "functions.html" import header %}
{{ header(data['dominio'],data['fecha']) }}
</div>
<!-- Header -->
<br>
<!-- Alineador -->
<div class="TableContainer">
{% from "functions.html" import alineador %}
{{ alineador(data['alineador']['eje_delan']) }}
</div>
<!-- Alineador -->
<br>
<!-- Suspensión -->
<div class="TableContainer">
{% from "functions.html" import suspension %}
{% set susp = data['suspension'][0] %}
{{ suspension(1, susp['ren_izq'], susp['peso'], susp['ren_der']) }}
{% set susp = data['suspension'][1] %}
{{ suspension(2, susp['ren_izq'], susp['peso'], susp['ren_der']) }}
</div>
<!-- Suspensión -->
<br>
<!-- Frenos -->
<div class="TableContainer">
{% from "functions.html" import frenos %}
{% set freno = data['frenos'][0] %}
{{ frenos(1,freno['f_izq'],freno['res_izq'],freno['ov_izq'],freno['peso'],freno['f_der'],freno['res_der'],freno['ov_der']) }}
{% set freno = data['frenos'][1] %}
{{ frenos(2,freno['f_izq'],freno['res_izq'],freno['ov_izq'],freno['peso'],freno['f_der'],freno['res_der'],freno['ov_der']) }}
{% set freno = data['frenos'][2] %}
{{ frenos(3,freno['f_izq'],freno['res_izq'],freno['ov_izq'],freno['peso'],freno['f_der'],freno['res_der'],freno['ov_der']) }}
{% set freno = data['frenos'][3] %}
{{ frenos(4,freno['f_izq'],freno['res_izq'],freno['ov_izq'],freno['peso'],freno['f_der'],freno['res_der'],freno['ov_der']) }}
</div>
<!-- Frenos -->
<br>
<!-- Frenos Trasero -->
<div class="TableContainer">
{% from "functions.html" import trasero %}
{{ trasero(data['trasero']['f_izq'], data['trasero']['f_der']) }}
</div>
<!-- Frenos Trasero -->
<br>
<!-- Gases y Humos -->
<div class="TableContainer">
{% from "functions.html" import gaseshumos %}
{{ gaseshumos(data['gaseshumos']['co'], data['gaseshumos']['hc'], data['gaseshumos']['med']) }}
</div>
<!-- Gases y Humos -->
<br>
</div>
<div class="PDFButtonContainer"> <div class="PDFButtonContainer">
<button class="PDFButton" onclick= <button class="PDFButton" onclick=
"window.open(compile(generateDivTree( {{ data }} ), new jsPDF('portrait', 'pt', 'a4')).output('bloburl'))"; "window.open(compile((new PDF1()).pdf( {{ data }} ), new jsPDF('portrait', 'pt', 'a4')).output('bloburl'))";
>
Convertir a PDF - 1
</button>
<button class="PDFButton" onclick=
"window.open(compile((new PDF2()).pdf( {{ data }} ), new jsPDF('portrait', 'pt', 'a4')).output('bloburl'))";
> >
Convertir a PDF Convertir a PDF - 2
</button> </button>
</div> </div>
</body> </body>
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!