forked from bpampuch/pdfmake
-
Notifications
You must be signed in to change notification settings - Fork 0
/
relative.js
110 lines (95 loc) · 2.79 KB
/
relative.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
var pdfmake = require('../js/index'); // only during development, otherwise use the following line
//var pdfmake = require('pdfmake');
var Roboto = require('../fonts/Roboto');
pdfmake.addFonts(Roboto);
var left = 20;
var width = 130;
var top = 20;
var height = 130;
var yAxisWidth = 30;
var xAxisHeight = 30;
var tickSize = 5;
var chartLines = [];
var chartText = [];
var chart = [{ stack: chartText }, { canvas: chartLines }];
buildXAxis();
buildYAxis();
var docDefinition = {
content: [
{ text: 'We sometimes don\'t know the absolute position of text', margin: [10, 0, 0, 50] },
{
columns: [
{ width: '50%', text: 'horizontal position is not known either' },
{ width: '50%', stack: chart }
]
},
{ text: 'We can position relative with center and right alignment', margin: [0, 50, 0, 50] },
{
table: {
widths: [100, 100, 100],
body: [
['Column with a lot of text. Column with a lot of text. Column with a lot of text. Column with a lot of text.',
{
text: 'I\'m aligned center',
style: {
alignment: 'center',
},
relativePosition: {
x: 0,
y: 25,
}
},
{
text: 'I\'m aligned right',
style: {
alignment: 'right',
},
relativePosition: {
x: 0,
y: 25,
}
}]
]
}
}
]
};
var now = new Date();
var pdf = pdfmake.createPdf(docDefinition);
pdf.write('pdfs/relative.pdf').then(() => {
console.log(new Date() - now);
});
function buildXAxis() {
var xTicks = [
{ t: '2016', x: 0, y: 0 },
{ t: '2017', x: 25, y: 0 },
{ t: '2018', x: 50, y: 0 },
{ t: '2019', x: 75, y: 0 },
{ t: '2020', x: 100, y: 0 }
];
chartLines.push(horizontalLine(left + yAxisWidth - 1, top + height - xAxisHeight, width - yAxisWidth + 1));
xTicks.forEach(function (tick) {
chartLines.push(verticalLine(left + yAxisWidth + tick.x - 0.5, top + height - xAxisHeight, tickSize));
chartText.push({ text: tick.t, fontSize: 8, relativePosition: { x: left + yAxisWidth + tick.x - 9, y: top + height - xAxisHeight + tickSize + 2 } });
});
}
function buildYAxis() {
var yTicks = [
{ t: '5', y: 0, x: 0 },
{ t: '4', y: 25, x: 0 },
{ t: '3', y: 50, x: 0 },
{ t: '2', y: 75, x: 0 },
{ t: '1', y: 100, x: 0 }
];
chartLines.push(verticalLine(left + yAxisWidth - 0.5, top - 0.5, height - xAxisHeight));
yTicks.forEach(function (tick) {
chartLines.push(horizontalLine(left + yAxisWidth - tickSize - 1, top + tick.y, tickSize));
chartText.push({ text: tick.t, fontSize: 8, relativePosition: { x: left + yAxisWidth - tickSize - 8, y: top + tick.y - 5 } });
});
}
function horizontalLine(x, y, length) {
return { type: 'line', x1: x, y1: y, x2: x + length, y2: y };
}
function verticalLine(x, y, height) {
return { type: 'line', x1: x, y1: y, x2: x, y2: y + height };
}