@digicole/pdfmake-rtl 1.2.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/.vscode/tasks.json +17 -0
  2. package/CHANGELOG.md +83 -128
  3. package/LICENSE +22 -22
  4. package/README.md +188 -681
  5. package/build/fonts/Cairo/Cairo-Black.ttf +0 -0
  6. package/build/fonts/Cairo/Cairo-Bold.ttf +0 -0
  7. package/build/fonts/Cairo/Cairo-ExtraLight.ttf +0 -0
  8. package/build/fonts/Cairo/Cairo-Light.ttf +0 -0
  9. package/build/fonts/Cairo/Cairo-Regular.ttf +0 -0
  10. package/build/fonts/Cairo/Cairo-SemiBold.ttf +0 -0
  11. package/build/fonts/Cairo.js +27 -0
  12. package/build/fonts/Roboto/Roboto-Italic.ttf +0 -0
  13. package/build/fonts/Roboto/Roboto-Medium.ttf +0 -0
  14. package/build/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
  15. package/build/fonts/Roboto/Roboto-Regular.ttf +0 -0
  16. package/build/fonts/Roboto.js +27 -0
  17. package/build/pdfmake.js +63736 -71285
  18. package/build/pdfmake.js.map +1 -1
  19. package/build/pdfmake.min.js +2 -2
  20. package/build/pdfmake.min.js.map +1 -1
  21. package/build/standard-fonts/Courier.js +27 -0
  22. package/build/standard-fonts/Helvetica.js +27 -0
  23. package/build/standard-fonts/Symbol.js +21 -0
  24. package/build/standard-fonts/Times.js +27 -0
  25. package/build/standard-fonts/ZapfDingbats.js +21 -0
  26. package/build/vfs_fonts.js +11 -7
  27. package/build-vfs.js +44 -44
  28. package/fonts/Cairo/Cairo-Black.ttf +0 -0
  29. package/fonts/Cairo/Cairo-Bold.ttf +0 -0
  30. package/fonts/Cairo/Cairo-ExtraLight.ttf +0 -0
  31. package/fonts/Cairo/Cairo-Light.ttf +0 -0
  32. package/fonts/Cairo/Cairo-Regular.ttf +0 -0
  33. package/fonts/Cairo/Cairo-SemiBold.ttf +0 -0
  34. package/fonts/Cairo.js +8 -0
  35. package/fonts/Roboto/Roboto-Italic.ttf +0 -0
  36. package/fonts/Roboto/Roboto-Medium.ttf +0 -0
  37. package/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
  38. package/fonts/Roboto/Roboto-Regular.ttf +0 -0
  39. package/fonts/Roboto.js +8 -0
  40. package/index.js +26 -26
  41. package/package.json +42 -39
  42. package/src/3rd-party/svg-to-pdfkit/LICENSE +9 -9
  43. package/src/3rd-party/svg-to-pdfkit/source.js +229 -36
  44. package/src/3rd-party/svg-to-pdfkit.js +3 -3
  45. package/src/OutputDocument.js +64 -0
  46. package/src/OutputDocumentServer.js +32 -0
  47. package/src/PDFDocument.js +174 -0
  48. package/src/PageSize.js +53 -0
  49. package/src/Renderer.js +445 -0
  50. package/src/TextBreaker.js +168 -0
  51. package/src/TextInlines.js +263 -0
  52. package/src/URLResolver.js +43 -0
  53. package/src/base.js +70 -0
  54. package/src/browser-extensions/OutputDocumentBrowser.js +80 -0
  55. package/src/browser-extensions/fonts/Cairo.js +27 -0
  56. package/src/browser-extensions/fonts/Roboto.js +27 -0
  57. package/src/browser-extensions/index.js +61 -0
  58. package/src/browser-extensions/pdfMake.js +1 -355
  59. package/src/browser-extensions/standard-fonts/Courier.js +27 -0
  60. package/src/browser-extensions/standard-fonts/Helvetica.js +27 -0
  61. package/src/browser-extensions/standard-fonts/Symbol.js +21 -0
  62. package/src/browser-extensions/standard-fonts/Times.js +27 -0
  63. package/src/browser-extensions/standard-fonts/ZapfDingbats.js +21 -0
  64. package/src/browser-extensions/virtual-fs-cjs.js +1 -0
  65. package/src/columnCalculator.js +154 -157
  66. package/src/docMeasure.js +802 -810
  67. package/src/docPreprocessor.js +306 -273
  68. package/src/documentContext.js +345 -340
  69. package/src/elementWriter.js +736 -411
  70. package/src/helpers/node.js +136 -0
  71. package/src/helpers/tools.js +44 -0
  72. package/src/helpers/variableType.js +50 -0
  73. package/src/index.js +16 -0
  74. package/src/layoutBuilder.js +1393 -1197
  75. package/src/line.js +122 -104
  76. package/src/pageElementWriter.js +187 -174
  77. package/src/printer.js +370 -727
  78. package/src/qrEnc.js +796 -791
  79. package/src/rtlUtils.js +500 -485
  80. package/src/standardPageSizes.js +52 -54
  81. package/src/styleContextStack.js +208 -138
  82. package/src/svgMeasure.js +109 -70
  83. package/src/tableLayouts.js +100 -0
  84. package/src/tableProcessor.js +620 -606
  85. package/src/textDecorator.js +175 -157
  86. package/src/virtual-fs.js +66 -0
  87. package/standard-fonts/Courier.js +8 -0
  88. package/standard-fonts/Helvetica.js +8 -0
  89. package/standard-fonts/Symbol.js +5 -0
  90. package/standard-fonts/Times.js +8 -0
  91. package/standard-fonts/ZapfDingbats.js +5 -0
  92. package/index.html +0 -396
  93. package/src/browser-extensions/URLBrowserResolver.js +0 -96
  94. package/src/browser-extensions/virtual-fs.js +0 -55
  95. package/src/fontProvider.js +0 -68
  96. package/src/helpers.js +0 -138
  97. package/src/imageMeasure.js +0 -62
  98. package/src/pdfKitEngine.js +0 -21
  99. package/src/textTools.js +0 -391
  100. package/src/traversalTracker.js +0 -47
@@ -1,157 +1,154 @@
1
- 'use strict';
2
-
3
- var isString = require('./helpers').isString;
4
-
5
- function buildColumnWidths(columns, availableWidth, offsetTotal = 0, tableNode) {
6
- var autoColumns = [],
7
- autoMin = 0, autoMax = 0,
8
- starColumns = [],
9
- starMaxMin = 0,
10
- starMaxMax = 0,
11
- fixedColumns = [],
12
- initial_availableWidth = availableWidth;
13
-
14
- columns.forEach(function (column) {
15
- if (isAutoColumn(column)) {
16
- autoColumns.push(column);
17
- autoMin += column._minWidth;
18
- autoMax += column._maxWidth;
19
- } else if (isStarColumn(column)) {
20
- starColumns.push(column);
21
- starMaxMin = Math.max(starMaxMin, column._minWidth);
22
- starMaxMax = Math.max(starMaxMax, column._maxWidth);
23
- } else {
24
- fixedColumns.push(column);
25
- }
26
- });
27
-
28
- fixedColumns.forEach(function (col, colIndex) {
29
- // width specified as %
30
- if (isString(col.width) && /\d+%/.test(col.width)) {
31
- // In tables we have to take into consideration the reserved width for paddings and borders
32
- var reservedWidth = 0;
33
- if (tableNode) {
34
- var paddingLeft = tableNode._layout.paddingLeft(colIndex, tableNode);
35
- var paddingRight = tableNode._layout.paddingRight(colIndex, tableNode);
36
- var borderLeft = tableNode._layout.vLineWidth(colIndex, tableNode);
37
- var borderRight = tableNode._layout.vLineWidth(colIndex + 1, tableNode);
38
- if (colIndex === 0) {
39
- // first column assumes whole borderLeft and half of border right
40
- reservedWidth = paddingLeft + paddingRight + borderLeft + (borderRight / 2);
41
-
42
- } else if (colIndex === fixedColumns.length - 1) {
43
- // last column assumes whole borderRight and half of border left
44
- reservedWidth = paddingLeft + paddingRight + (borderLeft / 2) + borderRight;
45
-
46
- } else {
47
- // Columns in the middle assume half of each border
48
- reservedWidth = paddingLeft + paddingRight + (borderLeft / 2) + (borderRight / 2);
49
- }
50
- }
51
- var totalAvailableWidth = initial_availableWidth + offsetTotal;
52
- col.width = (parseFloat(col.width) * totalAvailableWidth / 100) - reservedWidth;
53
- }
54
- if (col.width < (col._minWidth) && col.elasticWidth) {
55
- col._calcWidth = col._minWidth;
56
- } else {
57
- col._calcWidth = col.width;
58
- }
59
-
60
- availableWidth -= col._calcWidth;
61
- });
62
-
63
- // http://www.freesoft.org/CIE/RFC/1942/18.htm
64
- // http://www.w3.org/TR/CSS2/tables.html#width-layout
65
- // http://dev.w3.org/csswg/css3-tables-algorithms/Overview.src.htm
66
- var minW = autoMin + starMaxMin * starColumns.length;
67
- var maxW = autoMax + starMaxMax * starColumns.length;
68
- if (minW >= availableWidth) {
69
- // case 1 - there's no way to fit all columns within available width
70
- // that's actually pretty bad situation with PDF as we have no horizontal scroll
71
- // no easy workaround (unless we decide, in the future, to split single words)
72
- // currently we simply use minWidths for all columns
73
- autoColumns.forEach(function (col) {
74
- col._calcWidth = col._minWidth;
75
- });
76
-
77
- starColumns.forEach(function (col) {
78
- col._calcWidth = starMaxMin; // starMaxMin already contains padding
79
- });
80
- } else {
81
- if (maxW < availableWidth) {
82
- // case 2 - we can fit rest of the table within available space
83
- autoColumns.forEach(function (col) {
84
- col._calcWidth = col._maxWidth;
85
- availableWidth -= col._calcWidth;
86
- });
87
- } else {
88
- // maxW is too large, but minW fits within available width
89
- var W = availableWidth - minW;
90
- var D = maxW - minW;
91
-
92
- autoColumns.forEach(function (col) {
93
- var d = col._maxWidth - col._minWidth;
94
- col._calcWidth = col._minWidth + d * W / D;
95
- availableWidth -= col._calcWidth;
96
- });
97
- }
98
-
99
- if (starColumns.length > 0) {
100
- var starSize = availableWidth / starColumns.length;
101
-
102
- starColumns.forEach(function (col) {
103
- col._calcWidth = starSize;
104
- });
105
- }
106
- }
107
- }
108
-
109
- function isAutoColumn(column) {
110
- return column.width === 'auto';
111
- }
112
-
113
- function isStarColumn(column) {
114
- return column.width === null || column.width === undefined || column.width === '*' || column.width === 'star';
115
- }
116
-
117
- //TODO: refactor and reuse in measureTable
118
- function measureMinMax(columns) {
119
- var result = { min: 0, max: 0 };
120
-
121
- var maxStar = { min: 0, max: 0 };
122
- var starCount = 0;
123
-
124
- for (var i = 0, l = columns.length; i < l; i++) {
125
- var c = columns[i];
126
-
127
- if (isStarColumn(c)) {
128
- maxStar.min = Math.max(maxStar.min, c._minWidth);
129
- maxStar.max = Math.max(maxStar.max, c._maxWidth);
130
- starCount++;
131
- } else if (isAutoColumn(c)) {
132
- result.min += c._minWidth;
133
- result.max += c._maxWidth;
134
- } else {
135
- result.min += ((c.width !== undefined && c.width) || c._minWidth);
136
- result.max += ((c.width !== undefined && c.width) || c._maxWidth);
137
- }
138
- }
139
-
140
- if (starCount) {
141
- result.min += starCount * maxStar.min;
142
- result.max += starCount * maxStar.max;
143
- }
144
-
145
- return result;
146
- }
147
-
148
- /**
149
- * Calculates column widths
150
- * @private
151
- */
152
- module.exports = {
153
- buildColumnWidths: buildColumnWidths,
154
- measureMinMax: measureMinMax,
155
- isAutoColumn: isAutoColumn,
156
- isStarColumn: isStarColumn
157
- };
1
+ import { isString } from './helpers/variableType';
2
+
3
+ function buildColumnWidths(columns, availableWidth, offsetTotal = 0, tableNode) {
4
+ let autoColumns = [];
5
+ let autoMin = 0;
6
+ let autoMax = 0;
7
+ let starColumns = [];
8
+ let starMaxMin = 0;
9
+ let starMaxMax = 0;
10
+ let fixedColumns = [];
11
+ let initial_availableWidth = availableWidth;
12
+
13
+ columns.forEach(column => {
14
+ if (isAutoColumn(column)) {
15
+ autoColumns.push(column);
16
+ autoMin += column._minWidth;
17
+ autoMax += column._maxWidth;
18
+ } else if (isStarColumn(column)) {
19
+ starColumns.push(column);
20
+ starMaxMin = Math.max(starMaxMin, column._minWidth);
21
+ starMaxMax = Math.max(starMaxMax, column._maxWidth);
22
+ } else {
23
+ fixedColumns.push(column);
24
+ }
25
+ });
26
+
27
+ fixedColumns.forEach((col, colIndex) => {
28
+ // width specified as %
29
+ if (isString(col.width) && /\d+%/.test(col.width)) {
30
+ // In tables we have to take into consideration the reserved width for paddings and borders
31
+ let reservedWidth = 0;
32
+ if (tableNode) {
33
+ const paddingLeft = tableNode._layout.paddingLeft(colIndex, tableNode);
34
+ const paddingRight = tableNode._layout.paddingRight(colIndex, tableNode);
35
+ const borderLeft = tableNode._layout.vLineWidth(colIndex, tableNode);
36
+ const borderRight = tableNode._layout.vLineWidth(colIndex + 1, tableNode);
37
+ if (colIndex === 0) {
38
+ // first column assumes whole borderLeft and half of border right
39
+ reservedWidth = paddingLeft + paddingRight + borderLeft + (borderRight / 2);
40
+
41
+ } else if (colIndex === fixedColumns.length - 1) {
42
+ // last column assumes whole borderRight and half of border left
43
+ reservedWidth = paddingLeft + paddingRight + (borderLeft / 2) + borderRight;
44
+
45
+ } else {
46
+ // Columns in the middle assume half of each border
47
+ reservedWidth = paddingLeft + paddingRight + (borderLeft / 2) + (borderRight / 2);
48
+ }
49
+ }
50
+ const totalAvailableWidth = initial_availableWidth + offsetTotal;
51
+ col.width = (parseFloat(col.width) * totalAvailableWidth / 100) - reservedWidth;
52
+ }
53
+ if (col.width < (col._minWidth) && col.elasticWidth) {
54
+ col._calcWidth = col._minWidth;
55
+ } else {
56
+ col._calcWidth = col.width;
57
+ }
58
+
59
+ availableWidth -= col._calcWidth;
60
+ });
61
+
62
+ // http://www.freesoft.org/CIE/RFC/1942/18.htm
63
+ // http://www.w3.org/TR/CSS2/tables.html#width-layout
64
+ // http://dev.w3.org/csswg/css3-tables-algorithms/Overview.src.htm
65
+ let minW = autoMin + starMaxMin * starColumns.length;
66
+ let maxW = autoMax + starMaxMax * starColumns.length;
67
+ if (minW >= availableWidth) {
68
+ // case 1 - there's no way to fit all columns within available width
69
+ // that's actually pretty bad situation with PDF as we have no horizontal scroll
70
+ // no easy workaround (unless we decide, in the future, to split single words)
71
+ // currently we simply use minWidths for all columns
72
+ autoColumns.forEach(col => {
73
+ col._calcWidth = col._minWidth;
74
+ });
75
+
76
+ starColumns.forEach(col => {
77
+ col._calcWidth = starMaxMin; // starMaxMin already contains padding
78
+ });
79
+ } else {
80
+ if (maxW < availableWidth) {
81
+ // case 2 - we can fit rest of the table within available space
82
+ autoColumns.forEach(col => {
83
+ col._calcWidth = col._maxWidth;
84
+ availableWidth -= col._calcWidth;
85
+ });
86
+ } else {
87
+ // maxW is too large, but minW fits within available width
88
+ let W = availableWidth - minW;
89
+ let D = maxW - minW;
90
+
91
+ autoColumns.forEach(col => {
92
+ let d = col._maxWidth - col._minWidth;
93
+ col._calcWidth = col._minWidth + d * W / D;
94
+ availableWidth -= col._calcWidth;
95
+ });
96
+ }
97
+
98
+ if (starColumns.length > 0) {
99
+ let starSize = availableWidth / starColumns.length;
100
+
101
+ starColumns.forEach(col => {
102
+ col._calcWidth = starSize;
103
+ });
104
+ }
105
+ }
106
+ }
107
+
108
+ function isAutoColumn(column) {
109
+ return column.width === 'auto';
110
+ }
111
+
112
+ function isStarColumn(column) {
113
+ return column.width === null || column.width === undefined || column.width === '*' || column.width === 'star';
114
+ }
115
+
116
+ //TODO: refactor and reuse in measureTable
117
+ function measureMinMax(columns) {
118
+ let result = { min: 0, max: 0 };
119
+ let maxStar = { min: 0, max: 0 };
120
+ let starCount = 0;
121
+
122
+ for (let i = 0, l = columns.length; i < l; i++) {
123
+ let c = columns[i];
124
+
125
+ if (isStarColumn(c)) {
126
+ maxStar.min = Math.max(maxStar.min, c._minWidth);
127
+ maxStar.max = Math.max(maxStar.max, c._maxWidth);
128
+ starCount++;
129
+ } else if (isAutoColumn(c)) {
130
+ result.min += c._minWidth;
131
+ result.max += c._maxWidth;
132
+ } else {
133
+ result.min += ((c.width !== undefined && c.width) || c._minWidth);
134
+ result.max += ((c.width !== undefined && c.width) || c._maxWidth);
135
+ }
136
+ }
137
+
138
+ if (starCount) {
139
+ result.min += starCount * maxStar.min;
140
+ result.max += starCount * maxStar.max;
141
+ }
142
+
143
+ return result;
144
+ }
145
+
146
+ /**
147
+ * Calculates column widths
148
+ */
149
+ export default {
150
+ buildColumnWidths: buildColumnWidths,
151
+ measureMinMax: measureMinMax,
152
+ isAutoColumn: isAutoColumn,
153
+ isStarColumn: isStarColumn
154
+ };