YetiForceCompany /
YetiForcePDF
| 1 | <?php |
||||||
| 2 | |||||||
| 3 | declare(strict_types=1); |
||||||
| 4 | /** |
||||||
| 5 | * Page class. |
||||||
| 6 | * |
||||||
| 7 | * @package YetiForcePDF\Document |
||||||
| 8 | * |
||||||
| 9 | * @copyright YetiForce Sp. z o.o |
||||||
| 10 | * @license MIT |
||||||
| 11 | * @author Rafal Pospiech <[email protected]> |
||||||
| 12 | */ |
||||||
| 13 | |||||||
| 14 | namespace YetiForcePDF; |
||||||
| 15 | |||||||
| 16 | use YetiForcePDF\Layout\Box; |
||||||
| 17 | use YetiForcePDF\Layout\Coordinates\Coordinates; |
||||||
| 18 | use YetiForcePDF\Layout\Dimensions\BoxDimensions; |
||||||
| 19 | use YetiForcePDF\Layout\Dimensions\Dimensions; |
||||||
| 20 | use YetiForcePDF\Layout\FooterBox; |
||||||
| 21 | use YetiForcePDF\Layout\HeaderBox; |
||||||
| 22 | use YetiForcePDF\Layout\TableFooterGroupBox; |
||||||
| 23 | use YetiForcePDF\Layout\TableHeaderGroupBox; |
||||||
| 24 | use YetiForcePDF\Layout\TableWrapperBox; |
||||||
| 25 | use YetiForcePDF\Layout\TextBox; |
||||||
| 26 | use YetiForcePDF\Layout\WatermarkBox; |
||||||
| 27 | use YetiForcePDF\Objects\Basic\StreamObject; |
||||||
| 28 | |||||||
| 29 | /** |
||||||
| 30 | * Class Page. |
||||||
| 31 | */ |
||||||
| 32 | class Page extends \YetiForcePDF\Objects\Basic\DictionaryObject |
||||||
| 33 | { |
||||||
| 34 | /** |
||||||
| 35 | * @var int |
||||||
| 36 | */ |
||||||
| 37 | protected $group = 0; |
||||||
| 38 | /** |
||||||
| 39 | * {@inheritdoc} |
||||||
| 40 | */ |
||||||
| 41 | protected $dictionaryType = 'Page'; |
||||||
| 42 | /** |
||||||
| 43 | * Object name. |
||||||
| 44 | * |
||||||
| 45 | * @var string |
||||||
| 46 | */ |
||||||
| 47 | protected $name = 'Page'; |
||||||
| 48 | |||||||
| 49 | /** |
||||||
| 50 | * @var int page number |
||||||
| 51 | */ |
||||||
| 52 | protected $pageNumber = 1; |
||||||
| 53 | /** |
||||||
| 54 | * @var int page count |
||||||
| 55 | */ |
||||||
| 56 | protected $pageCount = 1; |
||||||
| 57 | /** |
||||||
| 58 | * Page resources. |
||||||
| 59 | * |
||||||
| 60 | * @var array |
||||||
| 61 | */ |
||||||
| 62 | protected $resources = []; |
||||||
| 63 | /** |
||||||
| 64 | * Page content streams. |
||||||
| 65 | * |
||||||
| 66 | * @var StreamObject |
||||||
| 67 | */ |
||||||
| 68 | protected $contentStream; |
||||||
| 69 | /** |
||||||
| 70 | * Portrait page orientation. |
||||||
| 71 | */ |
||||||
| 72 | const ORIENTATION_PORTRAIT = 'P'; |
||||||
| 73 | /** |
||||||
| 74 | * Landscape page orientation. |
||||||
| 75 | */ |
||||||
| 76 | const ORIENTATION_LANDSCAPE = 'L'; |
||||||
| 77 | /** |
||||||
| 78 | * After page breaking box was cut below. |
||||||
| 79 | */ |
||||||
| 80 | const CUT_BELOW = 1; |
||||||
| 81 | /** |
||||||
| 82 | * After page breaking box was cut above. |
||||||
| 83 | */ |
||||||
| 84 | const CUT_ABOVE = 2; |
||||||
| 85 | /** |
||||||
| 86 | * Current page format. |
||||||
| 87 | * |
||||||
| 88 | * @var string |
||||||
| 89 | */ |
||||||
| 90 | protected $format; |
||||||
| 91 | /** |
||||||
| 92 | * Current page orientation. |
||||||
| 93 | * |
||||||
| 94 | * @var string |
||||||
| 95 | */ |
||||||
| 96 | protected $orientation; |
||||||
| 97 | /** |
||||||
| 98 | * User unit - to calculate page dpi. |
||||||
| 99 | * |
||||||
| 100 | * @var float |
||||||
| 101 | */ |
||||||
| 102 | protected $userUnit = 1.0; |
||||||
| 103 | /** |
||||||
| 104 | * Page margins. |
||||||
| 105 | * |
||||||
| 106 | * @var array |
||||||
| 107 | */ |
||||||
| 108 | protected $margins; |
||||||
| 109 | /** |
||||||
| 110 | * Page dimensions. |
||||||
| 111 | * |
||||||
| 112 | * @var BoxDimensions |
||||||
| 113 | */ |
||||||
| 114 | protected $dimensions; |
||||||
| 115 | /** |
||||||
| 116 | * Page outer dimensions. |
||||||
| 117 | * |
||||||
| 118 | * @var BoxDimensions |
||||||
| 119 | */ |
||||||
| 120 | protected $outerDimensions; |
||||||
| 121 | /** |
||||||
| 122 | * @var Coordinates |
||||||
| 123 | */ |
||||||
| 124 | protected $coordinates; |
||||||
| 125 | /** |
||||||
| 126 | * Don't group this 'group' names. |
||||||
| 127 | * |
||||||
| 128 | * @var string[] |
||||||
| 129 | */ |
||||||
| 130 | protected $doNotGroup = []; |
||||||
| 131 | /** |
||||||
| 132 | * @var Box main box with content |
||||||
| 133 | */ |
||||||
| 134 | protected $box; |
||||||
| 135 | |||||||
| 136 | public static $pageFormats = [ |
||||||
| 137 | // ISO 216 A Series + 2 SIS 014711 extensions |
||||||
| 138 | 'A0' => [2383.937, 3370.394], // = ( 841 x 1189 ) mm = ( 33.11 x 46.81 ) in |
||||||
| 139 | 'A1' => [1683.780, 2383.937], // = ( 594 x 841 ) mm = ( 23.39 x 33.11 ) in |
||||||
| 140 | 'A2' => [1190.551, 1683.780], // = ( 420 x 594 ) mm = ( 16.54 x 23.39 ) in |
||||||
| 141 | 'A3' => [841.890, 1190.551], // = ( 297 x 420 ) mm = ( 11.69 x 16.54 ) in |
||||||
| 142 | 'A4' => [595.276, 841.890], // = ( 210 x 297 ) mm = ( 8.27 x 11.69 ) in |
||||||
| 143 | 'A5' => [419.528, 595.276], // = ( 148 x 210 ) mm = ( 5.83 x 8.27 ) in |
||||||
| 144 | 'A6' => [297.638, 419.528], // = ( 105 x 148 ) mm = ( 4.13 x 5.83 ) in |
||||||
| 145 | 'A7' => [209.764, 297.638], // = ( 74 x 105 ) mm = ( 2.91 x 4.13 ) in |
||||||
| 146 | 'A8' => [147.402, 209.764], // = ( 52 x 74 ) mm = ( 2.05 x 2.91 ) in |
||||||
| 147 | 'A9' => [104.882, 147.402], // = ( 37 x 52 ) mm = ( 1.46 x 2.05 ) in |
||||||
| 148 | 'A10' => [73.701, 104.882], // = ( 26 x 37 ) mm = ( 1.02 x 1.46 ) in |
||||||
| 149 | 'A11' => [51.024, 73.701], // = ( 18 x 26 ) mm = ( 0.71 x 1.02 ) in |
||||||
| 150 | 'A12' => [36.850, 51.024], // = ( 13 x 18 ) mm = ( 0.51 x 0.71 ) in |
||||||
| 151 | // ISO 216 B Series + 2 SIS 014711 extensions |
||||||
| 152 | 'B0' => [2834.646, 4008.189], // = ( 1000 x 1414 ) mm = ( 39.37 x 55.67 ) in |
||||||
| 153 | 'B1' => [2004.094, 2834.646], // = ( 707 x 1000 ) mm = ( 27.83 x 39.37 ) in |
||||||
| 154 | 'B2' => [1417.323, 2004.094], // = ( 500 x 707 ) mm = ( 19.69 x 27.83 ) in |
||||||
| 155 | 'B3' => [1000.630, 1417.323], // = ( 353 x 500 ) mm = ( 13.90 x 19.69 ) in |
||||||
| 156 | 'B4' => [708.661, 1000.630], // = ( 250 x 353 ) mm = ( 9.84 x 13.90 ) in |
||||||
| 157 | 'B5' => [498.898, 708.661], // = ( 176 x 250 ) mm = ( 6.93 x 9.84 ) in |
||||||
| 158 | 'B6' => [354.331, 498.898], // = ( 125 x 176 ) mm = ( 4.92 x 6.93 ) in |
||||||
| 159 | 'B7' => [249.449, 354.331], // = ( 88 x 125 ) mm = ( 3.46 x 4.92 ) in |
||||||
| 160 | 'B8' => [175.748, 249.449], // = ( 62 x 88 ) mm = ( 2.44 x 3.46 ) in |
||||||
| 161 | 'B9' => [124.724, 175.748], // = ( 44 x 62 ) mm = ( 1.73 x 2.44 ) in |
||||||
| 162 | 'B10' => [87.874, 124.724], // = ( 31 x 44 ) mm = ( 1.22 x 1.73 ) in |
||||||
| 163 | 'B11' => [62.362, 87.874], // = ( 22 x 31 ) mm = ( 0.87 x 1.22 ) in |
||||||
| 164 | 'B12' => [42.520, 62.362], // = ( 15 x 22 ) mm = ( 0.59 x 0.87 ) in |
||||||
| 165 | // ISO 216 C Series + 2 SIS 014711 extensions + 5 EXTENSION |
||||||
| 166 | 'C0' => [2599.370, 3676.535], // = ( 917 x 1297 ) mm = ( 36.10 x 51.06 ) in |
||||||
| 167 | 'C1' => [1836.850, 2599.370], // = ( 648 x 917 ) mm = ( 25.51 x 36.10 ) in |
||||||
| 168 | 'C2' => [1298.268, 1836.850], // = ( 458 x 648 ) mm = ( 18.03 x 25.51 ) in |
||||||
| 169 | 'C3' => [918.425, 1298.268], // = ( 324 x 458 ) mm = ( 12.76 x 18.03 ) in |
||||||
| 170 | 'C4' => [649.134, 918.425], // = ( 229 x 324 ) mm = ( 9.02 x 12.76 ) in |
||||||
| 171 | 'C5' => [459.213, 649.134], // = ( 162 x 229 ) mm = ( 6.38 x 9.02 ) in |
||||||
| 172 | 'C6' => [323.150, 459.213], // = ( 114 x 162 ) mm = ( 4.49 x 6.38 ) in |
||||||
| 173 | 'C7' => [229.606, 323.150], // = ( 81 x 114 ) mm = ( 3.19 x 4.49 ) in |
||||||
| 174 | 'C8' => [161.575, 229.606], // = ( 57 x 81 ) mm = ( 2.24 x 3.19 ) in |
||||||
| 175 | 'C9' => [113.386, 161.575], // = ( 40 x 57 ) mm = ( 1.57 x 2.24 ) in |
||||||
| 176 | 'C10' => [79.370, 113.386], // = ( 28 x 40 ) mm = ( 1.10 x 1.57 ) in |
||||||
| 177 | 'C11' => [56.693, 79.370], // = ( 20 x 28 ) mm = ( 0.79 x 1.10 ) in |
||||||
| 178 | 'C12' => [39.685, 56.693], // = ( 14 x 20 ) mm = ( 0.55 x 0.79 ) in |
||||||
| 179 | 'C76' => [229.606, 459.213], // = ( 81 x 162 ) mm = ( 3.19 x 6.38 ) in |
||||||
| 180 | 'DL' => [311.811, 623.622], // = ( 110 x 220 ) mm = ( 4.33 x 8.66 ) in |
||||||
| 181 | 'DLE' => [323.150, 637.795], // = ( 114 x 225 ) mm = ( 4.49 x 8.86 ) in |
||||||
| 182 | 'DLX' => [340.158, 666.142], // = ( 120 x 235 ) mm = ( 4.72 x 9.25 ) in |
||||||
| 183 | 'DLP' => [280.630, 595.276], // = ( 99 x 210 ) mm = ( 3.90 x 8.27 ) in (1/3 A4) |
||||||
| 184 | // SIS 014711 E Series |
||||||
| 185 | 'E0' => [2491.654, 3517.795], // = ( 879 x 1241 ) mm = ( 34.61 x 48.86 ) in |
||||||
| 186 | 'E1' => [1757.480, 2491.654], // = ( 620 x 879 ) mm = ( 24.41 x 34.61 ) in |
||||||
| 187 | 'E2' => [1247.244, 1757.480], // = ( 440 x 620 ) mm = ( 17.32 x 24.41 ) in |
||||||
| 188 | 'E3' => [878.740, 1247.244], // = ( 310 x 440 ) mm = ( 12.20 x 17.32 ) in |
||||||
| 189 | 'E4' => [623.622, 878.740], // = ( 220 x 310 ) mm = ( 8.66 x 12.20 ) in |
||||||
| 190 | 'E5' => [439.370, 623.622], // = ( 155 x 220 ) mm = ( 6.10 x 8.66 ) in |
||||||
| 191 | 'E6' => [311.811, 439.370], // = ( 110 x 155 ) mm = ( 4.33 x 6.10 ) in |
||||||
| 192 | 'E7' => [221.102, 311.811], // = ( 78 x 110 ) mm = ( 3.07 x 4.33 ) in |
||||||
| 193 | 'E8' => [155.906, 221.102], // = ( 55 x 78 ) mm = ( 2.17 x 3.07 ) in |
||||||
| 194 | 'E9' => [110.551, 155.906], // = ( 39 x 55 ) mm = ( 1.54 x 2.17 ) in |
||||||
| 195 | 'E10' => [76.535, 110.551], // = ( 27 x 39 ) mm = ( 1.06 x 1.54 ) in |
||||||
| 196 | 'E11' => [53.858, 76.535], // = ( 19 x 27 ) mm = ( 0.75 x 1.06 ) in |
||||||
| 197 | 'E12' => [36.850, 53.858], // = ( 13 x 19 ) mm = ( 0.51 x 0.75 ) in |
||||||
| 198 | // SIS 014711 G Series |
||||||
| 199 | 'G0' => [2715.591, 3838.110], // = ( 958 x 1354 ) mm = ( 37.72 x 53.31 ) in |
||||||
| 200 | 'G1' => [1919.055, 2715.591], // = ( 677 x 958 ) mm = ( 26.65 x 37.72 ) in |
||||||
| 201 | 'G2' => [1357.795, 1919.055], // = ( 479 x 677 ) mm = ( 18.86 x 26.65 ) in |
||||||
| 202 | 'G3' => [958.110, 1357.795], // = ( 338 x 479 ) mm = ( 13.31 x 18.86 ) in |
||||||
| 203 | 'G4' => [677.480, 958.110], // = ( 239 x 338 ) mm = ( 9.41 x 13.31 ) in |
||||||
| 204 | 'G5' => [479.055, 677.480], // = ( 169 x 239 ) mm = ( 6.65 x 9.41 ) in |
||||||
| 205 | 'G6' => [337.323, 479.055], // = ( 119 x 169 ) mm = ( 4.69 x 6.65 ) in |
||||||
| 206 | 'G7' => [238.110, 337.323], // = ( 84 x 119 ) mm = ( 3.31 x 4.69 ) in |
||||||
| 207 | 'G8' => [167.244, 238.110], // = ( 59 x 84 ) mm = ( 2.32 x 3.31 ) in |
||||||
| 208 | 'G9' => [119.055, 167.244], // = ( 42 x 59 ) mm = ( 1.65 x 2.32 ) in |
||||||
| 209 | 'G10' => [82.205, 119.055], // = ( 29 x 42 ) mm = ( 1.14 x 1.65 ) in |
||||||
| 210 | 'G11' => [59.528, 82.205], // = ( 21 x 29 ) mm = ( 0.83 x 1.14 ) in |
||||||
| 211 | 'G12' => [39.685, 59.528], // = ( 14 x 21 ) mm = ( 0.55 x 0.83 ) in |
||||||
| 212 | // ISO Press |
||||||
| 213 | 'RA0' => [2437.795, 3458.268], // = ( 860 x 1220 ) mm = ( 33.86 x 48.03 ) in |
||||||
| 214 | 'RA1' => [1729.134, 2437.795], // = ( 610 x 860 ) mm = ( 24.02 x 33.86 ) in |
||||||
| 215 | 'RA2' => [1218.898, 1729.134], // = ( 430 x 610 ) mm = ( 16.93 x 24.02 ) in |
||||||
| 216 | 'RA3' => [864.567, 1218.898], // = ( 305 x 430 ) mm = ( 12.01 x 16.93 ) in |
||||||
| 217 | 'RA4' => [609.449, 864.567], // = ( 215 x 305 ) mm = ( 8.46 x 12.01 ) in |
||||||
| 218 | 'SRA0' => [2551.181, 3628.346], // = ( 900 x 1280 ) mm = ( 35.43 x 50.39 ) in |
||||||
| 219 | 'SRA1' => [1814.173, 2551.181], // = ( 640 x 900 ) mm = ( 25.20 x 35.43 ) in |
||||||
| 220 | 'SRA2' => [1275.591, 1814.173], // = ( 450 x 640 ) mm = ( 17.72 x 25.20 ) in |
||||||
| 221 | 'SRA3' => [907.087, 1275.591], // = ( 320 x 450 ) mm = ( 12.60 x 17.72 ) in |
||||||
| 222 | 'SRA4' => [637.795, 907.087], // = ( 225 x 320 ) mm = ( 8.86 x 12.60 ) in |
||||||
| 223 | // German DIN 476 |
||||||
| 224 | '4A0' => [4767.874, 6740.787], // = ( 1682 x 2378 ) mm = ( 66.22 x 93.62 ) in |
||||||
| 225 | '2A0' => [3370.394, 4767.874], // = ( 1189 x 1682 ) mm = ( 46.81 x 66.22 ) in |
||||||
| 226 | // Variations on the ISO Standard |
||||||
| 227 | 'A2_EXTRA' => [1261.417, 1754.646], // = ( 445 x 619 ) mm = ( 17.52 x 24.37 ) in |
||||||
| 228 | 'A3+' => [932.598, 1369.134], // = ( 329 x 483 ) mm = ( 12.95 x 19.02 ) in |
||||||
| 229 | 'A3_EXTRA' => [912.756, 1261.417], // = ( 322 x 445 ) mm = ( 12.68 x 17.52 ) in |
||||||
| 230 | 'A3_SUPER' => [864.567, 1440.000], // = ( 305 x 508 ) mm = ( 12.01 x 20.00 ) in |
||||||
| 231 | 'SUPER_A3' => [864.567, 1380.472], // = ( 305 x 487 ) mm = ( 12.01 x 19.17 ) in |
||||||
| 232 | 'A4_EXTRA' => [666.142, 912.756], // = ( 235 x 322 ) mm = ( 9.25 x 12.68 ) in |
||||||
| 233 | 'A4_SUPER' => [649.134, 912.756], // = ( 229 x 322 ) mm = ( 9.02 x 12.68 ) in |
||||||
| 234 | 'SUPER_A4' => [643.465, 1009.134], // = ( 227 x 356 ) mm = ( 8.94 x 14.02 ) in |
||||||
| 235 | 'A4_LONG' => [595.276, 986.457], // = ( 210 x 348 ) mm = ( 8.27 x 13.70 ) in |
||||||
| 236 | 'F4' => [595.276, 935.433], // = ( 210 x 330 ) mm = ( 8.27 x 12.99 ) in |
||||||
| 237 | 'SO_B5_EXTRA' => [572.598, 782.362], // = ( 202 x 276 ) mm = ( 7.95 x 10.87 ) in |
||||||
| 238 | 'A5_EXTRA' => [490.394, 666.142], // = ( 173 x 235 ) mm = ( 6.81 x 9.25 ) in |
||||||
| 239 | // ANSI Series |
||||||
| 240 | 'ANSI_E' => [2448.000, 3168.000], // = ( 864 x 1118 ) mm = ( 34.00 x 44.00 ) in |
||||||
| 241 | 'ANSI_D' => [1584.000, 2448.000], // = ( 559 x 864 ) mm = ( 22.00 x 34.00 ) in |
||||||
| 242 | 'ANSI_C' => [1224.000, 1584.000], // = ( 432 x 559 ) mm = ( 17.00 x 22.00 ) in |
||||||
| 243 | 'ANSI_B' => [792.000, 1224.000], // = ( 279 x 432 ) mm = ( 11.00 x 17.00 ) in |
||||||
| 244 | 'ANSI_A' => [612.000, 792.000], // = ( 216 x 279 ) mm = ( 8.50 x 11.00 ) in |
||||||
| 245 | // Traditional 'Loose' North American Paper Sizes |
||||||
| 246 | 'USLEDGER' => [1224.000, 792.000], // = ( 432 x 279 ) mm = ( 17.00 x 11.00 ) in |
||||||
| 247 | 'LEDGER' => [1224.000, 792.000], // = ( 432 x 279 ) mm = ( 17.00 x 11.00 ) in |
||||||
| 248 | 'ORGANIZERK' => [792.000, 1224.000], // = ( 279 x 432 ) mm = ( 11.00 x 17.00 ) in |
||||||
| 249 | 'BIBLE' => [792.000, 1224.000], // = ( 279 x 432 ) mm = ( 11.00 x 17.00 ) in |
||||||
| 250 | 'USTABLOID' => [792.000, 1224.000], // = ( 279 x 432 ) mm = ( 11.00 x 17.00 ) in |
||||||
| 251 | 'TABLOID' => [792.000, 1224.000], // = ( 279 x 432 ) mm = ( 11.00 x 17.00 ) in |
||||||
| 252 | 'ORGANIZERM' => [612.000, 792.000], // = ( 216 x 279 ) mm = ( 8.50 x 11.00 ) in |
||||||
| 253 | 'USLETTER' => [612.000, 792.000], // = ( 216 x 279 ) mm = ( 8.50 x 11.00 ) in |
||||||
| 254 | 'LETTER' => [612.000, 792.000], // = ( 216 x 279 ) mm = ( 8.50 x 11.00 ) in |
||||||
| 255 | 'USLEGAL' => [612.000, 1008.000], // = ( 216 x 356 ) mm = ( 8.50 x 14.00 ) in |
||||||
| 256 | 'LEGAL' => [612.000, 1008.000], // = ( 216 x 356 ) mm = ( 8.50 x 14.00 ) in |
||||||
| 257 | 'GOVERNMENTLETTER' => [576.000, 756.000], // = ( 203 x 267 ) mm = ( 8.00 x 10.50 ) in |
||||||
| 258 | 'GLETTER' => [576.000, 756.000], // = ( 203 x 267 ) mm = ( 8.00 x 10.50 ) in |
||||||
| 259 | 'JUNIORLEGAL' => [576.000, 360.000], // = ( 203 x 127 ) mm = ( 8.00 x 5.00 ) in |
||||||
| 260 | 'JLEGAL' => [576.000, 360.000], // = ( 203 x 127 ) mm = ( 8.00 x 5.00 ) in |
||||||
| 261 | // Other North American Paper Sizes |
||||||
| 262 | 'QUADDEMY' => [2520.000, 3240.000], // = ( 889 x 1143 ) mm = ( 35.00 x 45.00 ) in |
||||||
| 263 | 'SUPER_B' => [936.000, 1368.000], // = ( 330 x 483 ) mm = ( 13.00 x 19.00 ) in |
||||||
| 264 | 'QUARTO' => [648.000, 792.000], // = ( 229 x 279 ) mm = ( 9.00 x 11.00 ) in |
||||||
| 265 | 'GOVERNMENTLEGAL' => [612.000, 936.000], // = ( 216 x 330 ) mm = ( 8.50 x 13.00 ) in |
||||||
| 266 | 'FOLIO' => [612.000, 936.000], // = ( 216 x 330 ) mm = ( 8.50 x 13.00 ) in |
||||||
| 267 | 'MONARCH' => [522.000, 756.000], // = ( 184 x 267 ) mm = ( 7.25 x 10.50 ) in |
||||||
| 268 | 'EXECUTIVE' => [522.000, 756.000], // = ( 184 x 267 ) mm = ( 7.25 x 10.50 ) in |
||||||
| 269 | 'ORGANIZERL' => [396.000, 612.000], // = ( 140 x 216 ) mm = ( 5.50 x 8.50 ) in |
||||||
| 270 | 'STATEMENT' => [396.000, 612.000], // = ( 140 x 216 ) mm = ( 5.50 x 8.50 ) in |
||||||
| 271 | 'MEMO' => [396.000, 612.000], // = ( 140 x 216 ) mm = ( 5.50 x 8.50 ) in |
||||||
| 272 | 'FOOLSCAP' => [595.440, 936.000], // = ( 210 x 330 ) mm = ( 8.27 x 13.00 ) in |
||||||
| 273 | 'COMPACT' => [306.000, 486.000], // = ( 108 x 171 ) mm = ( 4.25 x 6.75 ) in |
||||||
| 274 | 'ORGANIZERJ' => [198.000, 360.000], // = ( 70 x 127 ) mm = ( 2.75 x 5.00 ) in |
||||||
| 275 | // Canadian standard CAN 2-9.60M |
||||||
| 276 | 'P1' => [1587.402, 2437.795], // = ( 560 x 860 ) mm = ( 22.05 x 33.86 ) in |
||||||
| 277 | 'P2' => [1218.898, 1587.402], // = ( 430 x 560 ) mm = ( 16.93 x 22.05 ) in |
||||||
| 278 | 'P3' => [793.701, 1218.898], // = ( 280 x 430 ) mm = ( 11.02 x 16.93 ) in |
||||||
| 279 | 'P4' => [609.449, 793.701], // = ( 215 x 280 ) mm = ( 8.46 x 11.02 ) in |
||||||
| 280 | 'P5' => [396.850, 609.449], // = ( 140 x 215 ) mm = ( 5.51 x 8.46 ) in |
||||||
| 281 | 'P6' => [303.307, 396.850], // = ( 107 x 140 ) mm = ( 4.21 x 5.51 ) in |
||||||
| 282 | // North American Architectural Sizes |
||||||
| 283 | 'ARCH_E' => [2592.000, 3456.000], // = ( 914 x 1219 ) mm = ( 36.00 x 48.00 ) in |
||||||
| 284 | 'ARCH_E1' => [2160.000, 3024.000], // = ( 762 x 1067 ) mm = ( 30.00 x 42.00 ) in |
||||||
| 285 | 'ARCH_D' => [1728.000, 2592.000], // = ( 610 x 914 ) mm = ( 24.00 x 36.00 ) in |
||||||
| 286 | 'BROADSHEET' => [1296.000, 1728.000], // = ( 457 x 610 ) mm = ( 18.00 x 24.00 ) in |
||||||
| 287 | 'ARCH_C' => [1296.000, 1728.000], // = ( 457 x 610 ) mm = ( 18.00 x 24.00 ) in |
||||||
| 288 | 'ARCH_B' => [864.000, 1296.000], // = ( 305 x 457 ) mm = ( 12.00 x 18.00 ) in |
||||||
| 289 | 'ARCH_A' => [648.000, 864.000], // = ( 229 x 305 ) mm = ( 9.00 x 12.00 ) in |
||||||
| 290 | // -- North American Envelope Sizes |
||||||
| 291 | // - Announcement Envelopes |
||||||
| 292 | 'ANNENV_A2' => [314.640, 414.000], // = ( 111 x 146 ) mm = ( 4.37 x 5.75 ) in |
||||||
| 293 | 'ANNENV_A6' => [342.000, 468.000], // = ( 121 x 165 ) mm = ( 4.75 x 6.50 ) in |
||||||
| 294 | 'ANNENV_A7' => [378.000, 522.000], // = ( 133 x 184 ) mm = ( 5.25 x 7.25 ) in |
||||||
| 295 | 'ANNENV_A8' => [396.000, 584.640], // = ( 140 x 206 ) mm = ( 5.50 x 8.12 ) in |
||||||
| 296 | 'ANNENV_A10' => [450.000, 692.640], // = ( 159 x 244 ) mm = ( 6.25 x 9.62 ) in |
||||||
| 297 | 'ANNENV_SLIM' => [278.640, 638.640], // = ( 98 x 225 ) mm = ( 3.87 x 8.87 ) in |
||||||
| 298 | // - Commercial Envelopes |
||||||
| 299 | 'COMMENV_N6_1/4' => [252.000, 432.000], // = ( 89 x 152 ) mm = ( 3.50 x 6.00 ) in |
||||||
| 300 | 'COMMENV_N6_3/4' => [260.640, 468.000], // = ( 92 x 165 ) mm = ( 3.62 x 6.50 ) in |
||||||
| 301 | 'COMMENV_N8' => [278.640, 540.000], // = ( 98 x 191 ) mm = ( 3.87 x 7.50 ) in |
||||||
| 302 | 'COMMENV_N9' => [278.640, 638.640], // = ( 98 x 225 ) mm = ( 3.87 x 8.87 ) in |
||||||
| 303 | 'COMMENV_N10' => [296.640, 684.000], // = ( 105 x 241 ) mm = ( 4.12 x 9.50 ) in |
||||||
| 304 | 'COMMENV_N11' => [324.000, 746.640], // = ( 114 x 263 ) mm = ( 4.50 x 10.37 ) in |
||||||
| 305 | 'COMMENV_N12' => [342.000, 792.000], // = ( 121 x 279 ) mm = ( 4.75 x 11.00 ) in |
||||||
| 306 | 'COMMENV_N14' => [360.000, 828.000], // = ( 127 x 292 ) mm = ( 5.00 x 11.50 ) in |
||||||
| 307 | // - Catalogue Envelopes |
||||||
| 308 | 'CATENV_N1' => [432.000, 648.000], // = ( 152 x 229 ) mm = ( 6.00 x 9.00 ) in |
||||||
| 309 | 'CATENV_N1_3/4' => [468.000, 684.000], // = ( 165 x 241 ) mm = ( 6.50 x 9.50 ) in |
||||||
| 310 | 'CATENV_N2' => [468.000, 720.000], // = ( 165 x 254 ) mm = ( 6.50 x 10.00 ) in |
||||||
| 311 | 'CATENV_N3' => [504.000, 720.000], // = ( 178 x 254 ) mm = ( 7.00 x 10.00 ) in |
||||||
| 312 | 'CATENV_N6' => [540.000, 756.000], // = ( 191 x 267 ) mm = ( 7.50 x 10.50 ) in |
||||||
| 313 | 'CATENV_N7' => [576.000, 792.000], // = ( 203 x 279 ) mm = ( 8.00 x 11.00 ) in |
||||||
| 314 | 'CATENV_N8' => [594.000, 810.000], // = ( 210 x 286 ) mm = ( 8.25 x 11.25 ) in |
||||||
| 315 | 'CATENV_N9_1/2' => [612.000, 756.000], // = ( 216 x 267 ) mm = ( 8.50 x 10.50 ) in |
||||||
| 316 | 'CATENV_N9_3/4' => [630.000, 810.000], // = ( 222 x 286 ) mm = ( 8.75 x 11.25 ) in |
||||||
| 317 | 'CATENV_N10_1/2' => [648.000, 864.000], // = ( 229 x 305 ) mm = ( 9.00 x 12.00 ) in |
||||||
| 318 | 'CATENV_N12_1/2' => [684.000, 900.000], // = ( 241 x 318 ) mm = ( 9.50 x 12.50 ) in |
||||||
| 319 | 'CATENV_N13_1/2' => [720.000, 936.000], // = ( 254 x 330 ) mm = ( 10.00 x 13.00 ) in |
||||||
| 320 | 'CATENV_N14_1/4' => [810.000, 882.000], // = ( 286 x 311 ) mm = ( 11.25 x 12.25 ) in |
||||||
| 321 | 'CATENV_N14_1/2' => [828.000, 1044.000], // = ( 292 x 368 ) mm = ( 11.50 x 14.50 ) in |
||||||
| 322 | // Japanese (JIS P 0138-61) Standard B-Series |
||||||
| 323 | 'JIS_B0' => [2919.685, 4127.244], // = ( 1030 x 1456 ) mm = ( 40.55 x 57.32 ) in |
||||||
| 324 | 'JIS_B1' => [2063.622, 2919.685], // = ( 728 x 1030 ) mm = ( 28.66 x 40.55 ) in |
||||||
| 325 | 'JIS_B2' => [1459.843, 2063.622], // = ( 515 x 728 ) mm = ( 20.28 x 28.66 ) in |
||||||
| 326 | 'JIS_B3' => [1031.811, 1459.843], // = ( 364 x 515 ) mm = ( 14.33 x 20.28 ) in |
||||||
| 327 | 'JIS_B4' => [728.504, 1031.811], // = ( 257 x 364 ) mm = ( 10.12 x 14.33 ) in |
||||||
| 328 | 'JIS_B5' => [515.906, 728.504], // = ( 182 x 257 ) mm = ( 7.17 x 10.12 ) in |
||||||
| 329 | 'JIS_B6' => [362.835, 515.906], // = ( 128 x 182 ) mm = ( 5.04 x 7.17 ) in |
||||||
| 330 | 'JIS_B7' => [257.953, 362.835], // = ( 91 x 128 ) mm = ( 3.58 x 5.04 ) in |
||||||
| 331 | 'JIS_B8' => [181.417, 257.953], // = ( 64 x 91 ) mm = ( 2.52 x 3.58 ) in |
||||||
| 332 | 'JIS_B9' => [127.559, 181.417], // = ( 45 x 64 ) mm = ( 1.77 x 2.52 ) in |
||||||
| 333 | 'JIS_B10' => [90.709, 127.559], // = ( 32 x 45 ) mm = ( 1.26 x 1.77 ) in |
||||||
| 334 | 'JIS_B11' => [62.362, 90.709], // = ( 22 x 32 ) mm = ( 0.87 x 1.26 ) in |
||||||
| 335 | 'JIS_B12' => [45.354, 62.362], // = ( 16 x 22 ) mm = ( 0.63 x 0.87 ) in |
||||||
| 336 | // PA Series |
||||||
| 337 | 'PA0' => [2381.102, 3174.803], // = ( 840 x 1120 ) mm = ( 33.07 x 44.09 ) in |
||||||
| 338 | 'PA1' => [1587.402, 2381.102], // = ( 560 x 840 ) mm = ( 22.05 x 33.07 ) in |
||||||
| 339 | 'PA2' => [1190.551, 1587.402], // = ( 420 x 560 ) mm = ( 16.54 x 22.05 ) in |
||||||
| 340 | 'PA3' => [793.701, 1190.551], // = ( 280 x 420 ) mm = ( 11.02 x 16.54 ) in |
||||||
| 341 | 'PA4' => [595.276, 793.701], // = ( 210 x 280 ) mm = ( 8.27 x 11.02 ) in |
||||||
| 342 | 'PA5' => [396.850, 595.276], // = ( 140 x 210 ) mm = ( 5.51 x 8.27 ) in |
||||||
| 343 | 'PA6' => [297.638, 396.850], // = ( 105 x 140 ) mm = ( 4.13 x 5.51 ) in |
||||||
| 344 | 'PA7' => [198.425, 297.638], // = ( 70 x 105 ) mm = ( 2.76 x 4.13 ) in |
||||||
| 345 | 'PA8' => [147.402, 198.425], // = ( 52 x 70 ) mm = ( 2.05 x 2.76 ) in |
||||||
| 346 | 'PA9' => [99.213, 147.402], // = ( 35 x 52 ) mm = ( 1.38 x 2.05 ) in |
||||||
| 347 | 'PA10' => [73.701, 99.213], // = ( 26 x 35 ) mm = ( 1.02 x 1.38 ) in |
||||||
| 348 | // Standard Photographic Print Sizes |
||||||
| 349 | 'PASSPORT_PHOTO' => [99.213, 127.559], // = ( 35 x 45 ) mm = ( 1.38 x 1.77 ) in |
||||||
| 350 | 'E' => [233.858, 340.157], // = ( 82 x 120 ) mm = ( 3.25 x 4.72 ) in |
||||||
| 351 | 'L' => [252.283, 360.000], // = ( 89 x 127 ) mm = ( 3.50 x 5.00 ) in |
||||||
| 352 | '3R' => [252.283, 360.000], // = ( 89 x 127 ) mm = ( 3.50 x 5.00 ) in |
||||||
| 353 | 'KG' => [289.134, 430.866], // = ( 102 x 152 ) mm = ( 4.02 x 5.98 ) in |
||||||
| 354 | '4R' => [289.134, 430.866], // = ( 102 x 152 ) mm = ( 4.02 x 5.98 ) in |
||||||
| 355 | '4D' => [340.157, 430.866], // = ( 120 x 152 ) mm = ( 4.72 x 5.98 ) in |
||||||
| 356 | '2L' => [360.000, 504.567], // = ( 127 x 178 ) mm = ( 5.00 x 7.01 ) in |
||||||
| 357 | '5R' => [360.000, 504.567], // = ( 127 x 178 ) mm = ( 5.00 x 7.01 ) in |
||||||
| 358 | '8P' => [430.866, 575.433], // = ( 152 x 203 ) mm = ( 5.98 x 7.99 ) in |
||||||
| 359 | '6R' => [430.866, 575.433], // = ( 152 x 203 ) mm = ( 5.98 x 7.99 ) in |
||||||
| 360 | '6P' => [575.433, 720.000], // = ( 203 x 254 ) mm = ( 7.99 x 10.00 ) in |
||||||
| 361 | '8R' => [575.433, 720.000], // = ( 203 x 254 ) mm = ( 7.99 x 10.00 ) in |
||||||
| 362 | '6PW' => [575.433, 864.567], // = ( 203 x 305 ) mm = ( 7.99 x 12.01 ) in |
||||||
| 363 | 'S8R' => [575.433, 864.567], // = ( 203 x 305 ) mm = ( 7.99 x 12.01 ) in |
||||||
| 364 | '4P' => [720.000, 864.567], // = ( 254 x 305 ) mm = ( 10.00 x 12.01 ) in |
||||||
| 365 | '10R' => [720.000, 864.567], // = ( 254 x 305 ) mm = ( 10.00 x 12.01 ) in |
||||||
| 366 | '4PW' => [720.000, 1080.000], // = ( 254 x 381 ) mm = ( 10.00 x 15.00 ) in |
||||||
| 367 | 'S10R' => [720.000, 1080.000], // = ( 254 x 381 ) mm = ( 10.00 x 15.00 ) in |
||||||
| 368 | '11R' => [790.866, 1009.134], // = ( 279 x 356 ) mm = ( 10.98 x 14.02 ) in |
||||||
| 369 | 'S11R' => [790.866, 1224.567], // = ( 279 x 432 ) mm = ( 10.98 x 17.01 ) in |
||||||
| 370 | '12R' => [864.567, 1080.000], // = ( 305 x 381 ) mm = ( 12.01 x 15.00 ) in |
||||||
| 371 | 'S12R' => [864.567, 1292.598], // = ( 305 x 456 ) mm = ( 12.01 x 17.95 ) in |
||||||
| 372 | // Common Newspaper Sizes |
||||||
| 373 | 'NEWSPAPER_BROADSHEET' => [2125.984, 1700.787], // = ( 750 x 600 ) mm = ( 29.53 x 23.62 ) in |
||||||
| 374 | 'NEWSPAPER_BERLINER' => [1332.283, 892.913], // = ( 470 x 315 ) mm = ( 18.50 x 12.40 ) in |
||||||
| 375 | 'NEWSPAPER_TABLOID' => [1218.898, 793.701], // = ( 430 x 280 ) mm = ( 16.93 x 11.02 ) in |
||||||
| 376 | 'NEWSPAPER_COMPACT' => [1218.898, 793.701], // = ( 430 x 280 ) mm = ( 16.93 x 11.02 ) in |
||||||
| 377 | // Business Cards |
||||||
| 378 | 'CREDIT_CARD' => [153.014, 242.646], // = ( 54 x 86 ) mm = ( 2.13 x 3.37 ) in |
||||||
| 379 | 'BUSINESS_CARD' => [153.014, 242.646], // = ( 54 x 86 ) mm = ( 2.13 x 3.37 ) in |
||||||
| 380 | 'BUSINESS_CARD_ISO7810' => [153.014, 242.646], // = ( 54 x 86 ) mm = ( 2.13 x 3.37 ) in |
||||||
| 381 | 'BUSINESS_CARD_ISO216' => [147.402, 209.764], // = ( 52 x 74 ) mm = ( 2.05 x 2.91 ) in |
||||||
| 382 | 'BUSINESS_CARD_IT' => [155.906, 240.945], // = ( 55 x 85 ) mm = ( 2.17 x 3.35 ) in |
||||||
| 383 | 'BUSINESS_CARD_UK' => [155.906, 240.945], // = ( 55 x 85 ) mm = ( 2.17 x 3.35 ) in |
||||||
| 384 | 'BUSINESS_CARD_FR' => [155.906, 240.945], // = ( 55 x 85 ) mm = ( 2.17 x 3.35 ) in |
||||||
| 385 | 'BUSINESS_CARD_DE' => [155.906, 240.945], // = ( 55 x 85 ) mm = ( 2.17 x 3.35 ) in |
||||||
| 386 | 'BUSINESS_CARD_ES' => [155.906, 240.945], // = ( 55 x 85 ) mm = ( 2.17 x 3.35 ) in |
||||||
| 387 | 'BUSINESS_CARD_CA' => [144.567, 252.283], // = ( 51 x 89 ) mm = ( 2.01 x 3.50 ) in |
||||||
| 388 | 'BUSINESS_CARD_US' => [144.567, 252.283], // = ( 51 x 89 ) mm = ( 2.01 x 3.50 ) in |
||||||
| 389 | 'BUSINESS_CARD_JP' => [155.906, 257.953], // = ( 55 x 91 ) mm = ( 2.17 x 3.58 ) in |
||||||
| 390 | 'BUSINESS_CARD_HK' => [153.071, 255.118], // = ( 54 x 90 ) mm = ( 2.13 x 3.54 ) in |
||||||
| 391 | 'BUSINESS_CARD_AU' => [155.906, 255.118], // = ( 55 x 90 ) mm = ( 2.17 x 3.54 ) in |
||||||
| 392 | 'BUSINESS_CARD_DK' => [155.906, 255.118], // = ( 55 x 90 ) mm = ( 2.17 x 3.54 ) in |
||||||
| 393 | 'BUSINESS_CARD_SE' => [155.906, 255.118], // = ( 55 x 90 ) mm = ( 2.17 x 3.54 ) in |
||||||
| 394 | 'BUSINESS_CARD_RU' => [141.732, 255.118], // = ( 50 x 90 ) mm = ( 1.97 x 3.54 ) in |
||||||
| 395 | 'BUSINESS_CARD_CZ' => [141.732, 255.118], // = ( 50 x 90 ) mm = ( 1.97 x 3.54 ) in |
||||||
| 396 | 'BUSINESS_CARD_FI' => [141.732, 255.118], // = ( 50 x 90 ) mm = ( 1.97 x 3.54 ) in |
||||||
| 397 | 'BUSINESS_CARD_HU' => [141.732, 255.118], // = ( 50 x 90 ) mm = ( 1.97 x 3.54 ) in |
||||||
| 398 | 'BUSINESS_CARD_IL' => [141.732, 255.118], // = ( 50 x 90 ) mm = ( 1.97 x 3.54 ) in |
||||||
| 399 | // Billboards |
||||||
| 400 | '4SHEET' => [2880.000, 4320.000], // = ( 1016 x 1524 ) mm = ( 40.00 x 60.00 ) in |
||||||
| 401 | '6SHEET' => [3401.575, 5102.362], // = ( 1200 x 1800 ) mm = ( 47.24 x 70.87 ) in |
||||||
| 402 | '12SHEET' => [8640.000, 4320.000], // = ( 3048 x 1524 ) mm = (120.00 x 60.00 ) in |
||||||
| 403 | '16SHEET' => [5760.000, 8640.000], // = ( 2032 x 3048 ) mm = ( 80.00 x 120.00) in |
||||||
| 404 | '32SHEET' => [11520.000, 8640.000], // = ( 4064 x 3048 ) mm = (160.00 x 120.00) in |
||||||
| 405 | '48SHEET' => [17280.000, 8640.000], // = ( 6096 x 3048 ) mm = (240.00 x 120.00) in |
||||||
| 406 | '64SHEET' => [23040.000, 8640.000], // = ( 8128 x 3048 ) mm = (320.00 x 120.00) in |
||||||
| 407 | '96SHEET' => [34560.000, 8640.000], // = (12192 x 3048 ) mm = (480.00 x 120.00) in |
||||||
| 408 | // -- Old European Sizes |
||||||
| 409 | // - Old Imperial English Sizes |
||||||
| 410 | 'EN_EMPEROR' => [3456.000, 5184.000], // = ( 1219 x 1829 ) mm = ( 48.00 x 72.00 ) in |
||||||
| 411 | 'EN_ANTIQUARIAN' => [2232.000, 3816.000], // = ( 787 x 1346 ) mm = ( 31.00 x 53.00 ) in |
||||||
| 412 | 'EN_GRAND_EAGLE' => [2070.000, 3024.000], // = ( 730 x 1067 ) mm = ( 28.75 x 42.00 ) in |
||||||
| 413 | 'EN_DOUBLE_ELEPHANT' => [1926.000, 2880.000], // = ( 679 x 1016 ) mm = ( 26.75 x 40.00 ) in |
||||||
| 414 | 'EN_ATLAS' => [1872.000, 2448.000], // = ( 660 x 864 ) mm = ( 26.00 x 34.00 ) in |
||||||
| 415 | 'EN_COLOMBIER' => [1692.000, 2484.000], // = ( 597 x 876 ) mm = ( 23.50 x 34.50 ) in |
||||||
| 416 | 'EN_ELEPHANT' => [1656.000, 2016.000], // = ( 584 x 711 ) mm = ( 23.00 x 28.00 ) in |
||||||
| 417 | 'EN_DOUBLE_DEMY' => [1620.000, 2556.000], // = ( 572 x 902 ) mm = ( 22.50 x 35.50 ) in |
||||||
| 418 | 'EN_IMPERIAL' => [1584.000, 2160.000], // = ( 559 x 762 ) mm = ( 22.00 x 30.00 ) in |
||||||
| 419 | 'EN_PRINCESS' => [1548.000, 2016.000], // = ( 546 x 711 ) mm = ( 21.50 x 28.00 ) in |
||||||
| 420 | 'EN_CARTRIDGE' => [1512.000, 1872.000], // = ( 533 x 660 ) mm = ( 21.00 x 26.00 ) in |
||||||
| 421 | 'EN_DOUBLE_LARGE_POST' => [1512.000, 2376.000], // = ( 533 x 838 ) mm = ( 21.00 x 33.00 ) in |
||||||
| 422 | 'EN_ROYAL' => [1440.000, 1800.000], // = ( 508 x 635 ) mm = ( 20.00 x 25.00 ) in |
||||||
| 423 | 'EN_SHEET' => [1404.000, 1692.000], // = ( 495 x 597 ) mm = ( 19.50 x 23.50 ) in |
||||||
| 424 | 'EN_HALF_POST' => [1404.000, 1692.000], // = ( 495 x 597 ) mm = ( 19.50 x 23.50 ) in |
||||||
| 425 | 'EN_SUPER_ROYAL' => [1368.000, 1944.000], // = ( 483 x 686 ) mm = ( 19.00 x 27.00 ) in |
||||||
| 426 | 'EN_DOUBLE_POST' => [1368.000, 2196.000], // = ( 483 x 775 ) mm = ( 19.00 x 30.50 ) in |
||||||
| 427 | 'EN_MEDIUM' => [1260.000, 1656.000], // = ( 445 x 584 ) mm = ( 17.50 x 23.00 ) in |
||||||
| 428 | 'EN_DEMY' => [1260.000, 1620.000], // = ( 445 x 572 ) mm = ( 17.50 x 22.50 ) in |
||||||
| 429 | 'EN_LARGE_POST' => [1188.000, 1512.000], // = ( 419 x 533 ) mm = ( 16.50 x 21.00 ) in |
||||||
| 430 | 'EN_COPY_DRAUGHT' => [1152.000, 1440.000], // = ( 406 x 508 ) mm = ( 16.00 x 20.00 ) in |
||||||
| 431 | 'EN_POST' => [1116.000, 1386.000], // = ( 394 x 489 ) mm = ( 15.50 x 19.25 ) in |
||||||
| 432 | 'EN_CROWN' => [1080.000, 1440.000], // = ( 381 x 508 ) mm = ( 15.00 x 20.00 ) in |
||||||
| 433 | 'EN_PINCHED_POST' => [1062.000, 1332.000], // = ( 375 x 470 ) mm = ( 14.75 x 18.50 ) in |
||||||
| 434 | 'EN_BRIEF' => [972.000, 1152.000], // = ( 343 x 406 ) mm = ( 13.50 x 16.00 ) in |
||||||
| 435 | 'EN_FOOLSCAP' => [972.000, 1224.000], // = ( 343 x 432 ) mm = ( 13.50 x 17.00 ) in |
||||||
| 436 | 'EN_SMALL_FOOLSCAP' => [954.000, 1188.000], // = ( 337 x 419 ) mm = ( 13.25 x 16.50 ) in |
||||||
| 437 | 'EN_POTT' => [900.000, 1080.000], // = ( 318 x 381 ) mm = ( 12.50 x 15.00 ) in |
||||||
| 438 | // - Old Imperial Belgian Sizes |
||||||
| 439 | 'BE_GRAND_AIGLE' => [1984.252, 2948.031], // = ( 700 x 1040 ) mm = ( 27.56 x 40.94 ) in |
||||||
| 440 | 'BE_COLOMBIER' => [1757.480, 2409.449], // = ( 620 x 850 ) mm = ( 24.41 x 33.46 ) in |
||||||
| 441 | 'BE_DOUBLE_CARRE' => [1757.480, 2607.874], // = ( 620 x 920 ) mm = ( 24.41 x 36.22 ) in |
||||||
| 442 | 'BE_ELEPHANT' => [1746.142, 2182.677], // = ( 616 x 770 ) mm = ( 24.25 x 30.31 ) in |
||||||
| 443 | 'BE_PETIT_AIGLE' => [1700.787, 2381.102], // = ( 600 x 840 ) mm = ( 23.62 x 33.07 ) in |
||||||
| 444 | 'BE_GRAND_JESUS' => [1559.055, 2069.291], // = ( 550 x 730 ) mm = ( 21.65 x 28.74 ) in |
||||||
| 445 | 'BE_JESUS' => [1530.709, 2069.291], // = ( 540 x 730 ) mm = ( 21.26 x 28.74 ) in |
||||||
| 446 | 'BE_RAISIN' => [1417.323, 1842.520], // = ( 500 x 650 ) mm = ( 19.69 x 25.59 ) in |
||||||
| 447 | 'BE_GRAND_MEDIAN' => [1303.937, 1714.961], // = ( 460 x 605 ) mm = ( 18.11 x 23.82 ) in |
||||||
| 448 | 'BE_DOUBLE_POSTE' => [1233.071, 1601.575], // = ( 435 x 565 ) mm = ( 17.13 x 22.24 ) in |
||||||
| 449 | 'BE_COQUILLE' => [1218.898, 1587.402], // = ( 430 x 560 ) mm = ( 16.93 x 22.05 ) in |
||||||
| 450 | 'BE_PETIT_MEDIAN' => [1176.378, 1502.362], // = ( 415 x 530 ) mm = ( 16.34 x 20.87 ) in |
||||||
| 451 | 'BE_RUCHE' => [1020.472, 1303.937], // = ( 360 x 460 ) mm = ( 14.17 x 18.11 ) in |
||||||
| 452 | 'BE_PROPATRIA' => [977.953, 1218.898], // = ( 345 x 430 ) mm = ( 13.58 x 16.93 ) in |
||||||
| 453 | 'BE_LYS' => [898.583, 1125.354], // = ( 317 x 397 ) mm = ( 12.48 x 15.63 ) in |
||||||
| 454 | 'BE_POT' => [870.236, 1088.504], // = ( 307 x 384 ) mm = ( 12.09 x 15.12 ) in |
||||||
| 455 | 'BE_ROSETTE' => [765.354, 983.622], // = ( 270 x 347 ) mm = ( 10.63 x 13.66 ) in |
||||||
| 456 | // - Old Imperial French Sizes |
||||||
| 457 | 'FR_UNIVERS' => [2834.646, 3685.039], // = ( 1000 x 1300 ) mm = ( 39.37 x 51.18 ) in |
||||||
| 458 | 'FR_DOUBLE_COLOMBIER' => [2551.181, 3571.654], // = ( 900 x 1260 ) mm = ( 35.43 x 49.61 ) in |
||||||
| 459 | 'FR_GRANDE_MONDE' => [2551.181, 3571.654], // = ( 900 x 1260 ) mm = ( 35.43 x 49.61 ) in |
||||||
| 460 | 'FR_DOUBLE_SOLEIL' => [2267.717, 3401.575], // = ( 800 x 1200 ) mm = ( 31.50 x 47.24 ) in |
||||||
| 461 | 'FR_DOUBLE_JESUS' => [2154.331, 3174.803], // = ( 760 x 1120 ) mm = ( 29.92 x 44.09 ) in |
||||||
| 462 | 'FR_GRAND_AIGLE' => [2125.984, 3004.724], // = ( 750 x 1060 ) mm = ( 29.53 x 41.73 ) in |
||||||
| 463 | 'FR_PETIT_AIGLE' => [1984.252, 2664.567], // = ( 700 x 940 ) mm = ( 27.56 x 37.01 ) in |
||||||
| 464 | 'FR_DOUBLE_RAISIN' => [1842.520, 2834.646], // = ( 650 x 1000 ) mm = ( 25.59 x 39.37 ) in |
||||||
| 465 | 'FR_JOURNAL' => [1842.520, 2664.567], // = ( 650 x 940 ) mm = ( 25.59 x 37.01 ) in |
||||||
| 466 | 'FR_COLOMBIER_AFFICHE' => [1785.827, 2551.181], // = ( 630 x 900 ) mm = ( 24.80 x 35.43 ) in |
||||||
| 467 | 'FR_DOUBLE_CAVALIER' => [1757.480, 2607.874], // = ( 620 x 920 ) mm = ( 24.41 x 36.22 ) in |
||||||
| 468 | 'FR_CLOCHE' => [1700.787, 2267.717], // = ( 600 x 800 ) mm = ( 23.62 x 31.50 ) in |
||||||
| 469 | 'FR_SOLEIL' => [1700.787, 2267.717], // = ( 600 x 800 ) mm = ( 23.62 x 31.50 ) in |
||||||
| 470 | 'FR_DOUBLE_CARRE' => [1587.402, 2551.181], // = ( 560 x 900 ) mm = ( 22.05 x 35.43 ) in |
||||||
| 471 | 'FR_DOUBLE_COQUILLE' => [1587.402, 2494.488], // = ( 560 x 880 ) mm = ( 22.05 x 34.65 ) in |
||||||
| 472 | 'FR_JESUS' => [1587.402, 2154.331], // = ( 560 x 760 ) mm = ( 22.05 x 29.92 ) in |
||||||
| 473 | 'FR_RAISIN' => [1417.323, 1842.520], // = ( 500 x 650 ) mm = ( 19.69 x 25.59 ) in |
||||||
| 474 | 'FR_CAVALIER' => [1303.937, 1757.480], // = ( 460 x 620 ) mm = ( 18.11 x 24.41 ) in |
||||||
| 475 | 'FR_DOUBLE_COURONNE' => [1303.937, 2040.945], // = ( 460 x 720 ) mm = ( 18.11 x 28.35 ) in |
||||||
| 476 | 'FR_CARRE' => [1275.591, 1587.402], // = ( 450 x 560 ) mm = ( 17.72 x 22.05 ) in |
||||||
| 477 | 'FR_COQUILLE' => [1247.244, 1587.402], // = ( 440 x 560 ) mm = ( 17.32 x 22.05 ) in |
||||||
| 478 | 'FR_DOUBLE_TELLIERE' => [1247.244, 1927.559], // = ( 440 x 680 ) mm = ( 17.32 x 26.77 ) in |
||||||
| 479 | 'FR_DOUBLE_CLOCHE' => [1133.858, 1700.787], // = ( 400 x 600 ) mm = ( 15.75 x 23.62 ) in |
||||||
| 480 | 'FR_DOUBLE_POT' => [1133.858, 1757.480], // = ( 400 x 620 ) mm = ( 15.75 x 24.41 ) in |
||||||
| 481 | 'FR_ECU' => [1133.858, 1474.016], // = ( 400 x 520 ) mm = ( 15.75 x 20.47 ) in |
||||||
| 482 | 'FR_COURONNE' => [1020.472, 1303.937], // = ( 360 x 460 ) mm = ( 14.17 x 18.11 ) in |
||||||
| 483 | 'FR_TELLIERE' => [963.780, 1247.244], // = ( 340 x 440 ) mm = ( 13.39 x 17.32 ) in |
||||||
| 484 | 'FR_POT' => [878.740, 1133.858], // = ( 310 x 400 ) mm = ( 12.20 x 15.75 ) in |
||||||
| 485 | ]; |
||||||
| 486 | |||||||
| 487 | /** |
||||||
| 488 | * Initialisation. |
||||||
| 489 | * |
||||||
| 490 | * @return $this |
||||||
| 491 | */ |
||||||
| 492 | public function init() |
||||||
| 493 | { |
||||||
| 494 | parent::init(); |
||||||
| 495 | $this->contentStream = (new \YetiForcePDF\Objects\Basic\StreamObject()) |
||||||
| 496 | ->setDocument($this->document) |
||||||
| 497 | ->init(); |
||||||
| 498 | if (!$this->margins) { |
||||||
|
0 ignored issues
–
show
|
|||||||
| 499 | $this->margins = $this->document->getDefaultMargins(); |
||||||
| 500 | } |
||||||
| 501 | if (!$this->format) { |
||||||
| 502 | $this->setFormat($this->document->getDefaultFormat()); |
||||||
| 503 | } |
||||||
| 504 | if (!$this->orientation) { |
||||||
| 505 | $this->setOrientation($this->document->getDefaultOrientation()); |
||||||
| 506 | } |
||||||
| 507 | $this->document->getPagesObject()->addChild($this); |
||||||
| 508 | $this->synchronizeFonts(); |
||||||
| 509 | return $this; |
||||||
| 510 | } |
||||||
| 511 | |||||||
| 512 | /** |
||||||
| 513 | * Set page group. |
||||||
| 514 | * |
||||||
| 515 | * @param int $group |
||||||
| 516 | * |
||||||
| 517 | * @return $this |
||||||
| 518 | */ |
||||||
| 519 | public function setGroup(int $group) |
||||||
| 520 | { |
||||||
| 521 | $this->group = $group; |
||||||
| 522 | return $this; |
||||||
| 523 | } |
||||||
| 524 | |||||||
| 525 | /** |
||||||
| 526 | * Get page group. |
||||||
| 527 | * |
||||||
| 528 | * @return int |
||||||
| 529 | */ |
||||||
| 530 | public function getGroup() |
||||||
| 531 | { |
||||||
| 532 | return $this->group; |
||||||
| 533 | } |
||||||
| 534 | |||||||
| 535 | /** |
||||||
| 536 | * Set page format. |
||||||
| 537 | * |
||||||
| 538 | * @param string $format |
||||||
| 539 | * |
||||||
| 540 | * @return $this |
||||||
| 541 | */ |
||||||
| 542 | public function setFormat(string $format) |
||||||
| 543 | { |
||||||
| 544 | $this->format = $format; |
||||||
| 545 | $dimensions = self::$pageFormats[$this->format]; |
||||||
| 546 | if ('L' === $this->orientation) { |
||||||
| 547 | $dimensions = array_reverse($dimensions); |
||||||
| 548 | } |
||||||
| 549 | $this->dimensions = (new Dimensions()) |
||||||
| 550 | ->setDocument($this->document) |
||||||
| 551 | ->init(); |
||||||
| 552 | $this->dimensions |
||||||
| 553 | ->setWidth(Math::sub((string) $dimensions[0], Math::add((string) $this->margins['left'], (string) $this->margins['right']))) |
||||||
| 554 | ->setHeight(Math::sub((string) $dimensions[1], Math::add((string) $this->margins['top'], (string) $this->margins['bottom']))); |
||||||
| 555 | $this->outerDimensions = (new Dimensions()) |
||||||
| 556 | ->setDocument($this->document) |
||||||
| 557 | ->init(); |
||||||
| 558 | $this->outerDimensions->setWidth((string) $dimensions[0])->setHeight((string) $dimensions[1]); |
||||||
| 559 | $this->coordinates = (new Coordinates()) |
||||||
| 560 | ->setDocument($this->document) |
||||||
| 561 | ->init(); |
||||||
| 562 | $this->coordinates->setX((string) $this->margins['left'])->setY((string) $this->margins['top'])->init(); |
||||||
| 563 | return $this; |
||||||
| 564 | } |
||||||
| 565 | |||||||
| 566 | /** |
||||||
| 567 | * Get format. |
||||||
| 568 | * |
||||||
| 569 | * @return string |
||||||
| 570 | */ |
||||||
| 571 | public function getFormat() |
||||||
| 572 | { |
||||||
| 573 | return $this->format; |
||||||
| 574 | } |
||||||
| 575 | |||||||
| 576 | /** |
||||||
| 577 | * Set page orientation. |
||||||
| 578 | * |
||||||
| 579 | * @param string $orientation |
||||||
| 580 | * |
||||||
| 581 | * @return \YetiForcePDF\Page |
||||||
| 582 | */ |
||||||
| 583 | public function setOrientation(string $orientation): self |
||||||
| 584 | { |
||||||
| 585 | $this->orientation = $orientation; |
||||||
| 586 | return $this; |
||||||
| 587 | } |
||||||
| 588 | |||||||
| 589 | /** |
||||||
| 590 | * Get orientation. |
||||||
| 591 | * |
||||||
| 592 | * @return string |
||||||
| 593 | */ |
||||||
| 594 | public function getOrientation() |
||||||
| 595 | { |
||||||
| 596 | return $this->orientation; |
||||||
| 597 | } |
||||||
| 598 | |||||||
| 599 | /** |
||||||
| 600 | * Set page number. |
||||||
| 601 | * |
||||||
| 602 | * @param int $number |
||||||
| 603 | * |
||||||
| 604 | * @return $this |
||||||
| 605 | */ |
||||||
| 606 | public function setPageNumber(int $number) |
||||||
| 607 | { |
||||||
| 608 | $this->pageNumber = $number; |
||||||
| 609 | return $this; |
||||||
| 610 | } |
||||||
| 611 | |||||||
| 612 | /** |
||||||
| 613 | * Get page number. |
||||||
| 614 | * |
||||||
| 615 | * @return int |
||||||
| 616 | */ |
||||||
| 617 | public function getPageNumber() |
||||||
| 618 | { |
||||||
| 619 | return $this->pageNumber; |
||||||
| 620 | } |
||||||
| 621 | |||||||
| 622 | /** |
||||||
| 623 | * Set page count. |
||||||
| 624 | * |
||||||
| 625 | * @param int $pageCount |
||||||
| 626 | * |
||||||
| 627 | * @return $this |
||||||
| 628 | */ |
||||||
| 629 | public function setPageCount(int $pageCount) |
||||||
| 630 | { |
||||||
| 631 | $this->pageCount = $pageCount; |
||||||
| 632 | return $this; |
||||||
| 633 | } |
||||||
| 634 | |||||||
| 635 | /** |
||||||
| 636 | * Get page count. |
||||||
| 637 | * |
||||||
| 638 | * @return mixed |
||||||
| 639 | */ |
||||||
| 640 | public function getPageCount() |
||||||
| 641 | { |
||||||
| 642 | return $this->pageCount; |
||||||
| 643 | } |
||||||
| 644 | |||||||
| 645 | /** |
||||||
| 646 | * Get page margins. |
||||||
| 647 | * |
||||||
| 648 | * @return array |
||||||
| 649 | */ |
||||||
| 650 | public function getMargins(): array |
||||||
| 651 | { |
||||||
| 652 | return $this->margins; |
||||||
| 653 | } |
||||||
| 654 | |||||||
| 655 | /** |
||||||
| 656 | * Set page margins. |
||||||
| 657 | * |
||||||
| 658 | * @param float $left |
||||||
| 659 | * @param float $top |
||||||
| 660 | * @param float $right |
||||||
| 661 | * @param float $bottom |
||||||
| 662 | * |
||||||
| 663 | * @return $this |
||||||
| 664 | */ |
||||||
| 665 | public function setMargins(float $left, float $top, float $right, float $bottom) |
||||||
| 666 | { |
||||||
| 667 | $this->margins = [ |
||||||
| 668 | 'left' => $left, |
||||||
| 669 | 'top' => $top, |
||||||
| 670 | 'right' => $right, |
||||||
| 671 | 'bottom' => $bottom, |
||||||
| 672 | 'horizontal' => $left + $right, |
||||||
| 673 | 'vertical' => $top + $bottom, |
||||||
| 674 | ]; |
||||||
| 675 | $this->setFormat($this->format); |
||||||
| 676 | return $this; |
||||||
| 677 | } |
||||||
| 678 | |||||||
| 679 | /** |
||||||
| 680 | * Get page coordinates - content area basing on margins. |
||||||
| 681 | * |
||||||
| 682 | * @return \YetiForcePDF\Layout\Coordinates\Coordinates |
||||||
| 683 | */ |
||||||
| 684 | public function getCoordinates() |
||||||
| 685 | { |
||||||
| 686 | return $this->coordinates; |
||||||
| 687 | } |
||||||
| 688 | |||||||
| 689 | /** |
||||||
| 690 | * Set main box for the page. |
||||||
| 691 | * |
||||||
| 692 | * @param Box $box |
||||||
| 693 | * |
||||||
| 694 | * @return $this |
||||||
| 695 | */ |
||||||
| 696 | public function setBox(Box $box) |
||||||
| 697 | { |
||||||
| 698 | $this->box = $box; |
||||||
| 699 | return $this; |
||||||
| 700 | } |
||||||
| 701 | |||||||
| 702 | /** |
||||||
| 703 | * Get main box for the page. |
||||||
| 704 | * |
||||||
| 705 | * @return Box |
||||||
| 706 | */ |
||||||
| 707 | public function getBox() |
||||||
| 708 | { |
||||||
| 709 | return $this->box; |
||||||
| 710 | } |
||||||
| 711 | |||||||
| 712 | /** |
||||||
| 713 | * Set user unit (scale of the DPI $userUnit * 72). |
||||||
| 714 | * |
||||||
| 715 | * @param float $userUnit |
||||||
| 716 | * |
||||||
| 717 | * @return \YetiForcePDF\Page |
||||||
| 718 | */ |
||||||
| 719 | public function setUserUnit(float $userUnit): self |
||||||
| 720 | { |
||||||
| 721 | $this->userUnit = $userUnit; |
||||||
| 722 | return $this; |
||||||
| 723 | } |
||||||
| 724 | |||||||
| 725 | /** |
||||||
| 726 | * Add page resource. |
||||||
| 727 | * |
||||||
| 728 | * @param string $groupName |
||||||
| 729 | * @param string $resourceName |
||||||
| 730 | * @param \YetiForcePDF\Objects\PdfObject $resource |
||||||
| 731 | * |
||||||
| 732 | * @return \YetiForcePDF\Page |
||||||
| 733 | */ |
||||||
| 734 | public function addResource(string $groupName, string $resourceName, Objects\PdfObject $resource): self |
||||||
| 735 | { |
||||||
| 736 | if (!isset($this->resources[$groupName])) { |
||||||
| 737 | $this->resources[$groupName] = []; |
||||||
| 738 | } |
||||||
| 739 | $this->resources[$groupName][$resourceName] = $resource; |
||||||
| 740 | if (!$resourceName) { |
||||||
| 741 | $this->doNotGroup[] = $groupName; |
||||||
| 742 | } |
||||||
| 743 | return $this; |
||||||
| 744 | } |
||||||
| 745 | |||||||
| 746 | /** |
||||||
| 747 | * Get resource. |
||||||
| 748 | * |
||||||
| 749 | * @param string $groupName |
||||||
| 750 | * @param string $resourceName |
||||||
| 751 | * |
||||||
| 752 | * @return \YetiForcePDF\Objects\PdfObject|null |
||||||
| 753 | */ |
||||||
| 754 | public function getResource(string $groupName, string $resourceName) |
||||||
| 755 | { |
||||||
| 756 | if (!empty($this->resources[$groupName][$resourceName])) { |
||||||
| 757 | return $this->resources[$groupName][$resourceName]; |
||||||
| 758 | } |
||||||
| 759 | return null; |
||||||
| 760 | } |
||||||
| 761 | |||||||
| 762 | /** |
||||||
| 763 | * Synchronize fonts with document fonts. |
||||||
| 764 | */ |
||||||
| 765 | public function synchronizeFonts() |
||||||
| 766 | { |
||||||
| 767 | // add all existing fonts |
||||||
| 768 | foreach ($this->document->getAllFontInstances() as $fontInstance) { |
||||||
| 769 | $fontNumber = $fontInstance->getNumber(); |
||||||
| 770 | if (!$this->getResource('Font', $fontNumber)) { |
||||||
| 771 | $this->addResource('Font', $fontNumber, $fontInstance->getType0Font()); |
||||||
| 772 | } |
||||||
| 773 | } |
||||||
| 774 | } |
||||||
| 775 | |||||||
| 776 | /** |
||||||
| 777 | * Get page content stream. |
||||||
| 778 | * |
||||||
| 779 | * @return \YetiForcePDF\Objects\Basic\StreamObject |
||||||
| 780 | */ |
||||||
| 781 | public function getContentStream(): StreamObject |
||||||
| 782 | { |
||||||
| 783 | return $this->contentStream; |
||||||
| 784 | } |
||||||
| 785 | |||||||
| 786 | /** |
||||||
| 787 | * Get page dimensions. |
||||||
| 788 | * |
||||||
| 789 | * @return \YetiForcePDF\Layout\Dimensions\Dimensions |
||||||
| 790 | */ |
||||||
| 791 | public function getDimensions(): Dimensions |
||||||
| 792 | { |
||||||
| 793 | return $this->dimensions; |
||||||
| 794 | } |
||||||
| 795 | |||||||
| 796 | /** |
||||||
| 797 | * Get page dimensions. |
||||||
| 798 | * |
||||||
| 799 | * @return \YetiForcePDF\Layout\Dimensions\Dimensions |
||||||
| 800 | */ |
||||||
| 801 | public function getOuterDimensions(): Dimensions |
||||||
| 802 | { |
||||||
| 803 | return $this->outerDimensions; |
||||||
| 804 | } |
||||||
| 805 | |||||||
| 806 | /** |
||||||
| 807 | * Layout header. |
||||||
| 808 | * |
||||||
| 809 | * @param HeaderBox $header |
||||||
| 810 | * |
||||||
| 811 | * @return $this |
||||||
| 812 | */ |
||||||
| 813 | protected function layoutHeader(HeaderBox $header) |
||||||
| 814 | { |
||||||
| 815 | $header = $header->cloneWithChildren(); |
||||||
| 816 | $box = $this->getBox(); |
||||||
| 817 | if (!$box->hasChildren()) { |
||||||
| 818 | return $this; |
||||||
| 819 | } |
||||||
| 820 | $box->insertBefore($header, $box->getFirstChild()); |
||||||
|
0 ignored issues
–
show
It seems like
$box->getFirstChild() can also be of type null; however, parameter $before of YetiForcePDF\Layout\Box::insertBefore() does only seem to accept YetiForcePDF\Layout\Box, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 821 | $outerWidth = $this->getOuterDimensions()->getWidth(); |
||||||
| 822 | $outerHeight = $this->getOuterDimensions()->getHeight(); |
||||||
| 823 | $header->getDimensions()->resetWidth()->resetHeight(); |
||||||
| 824 | $this->getDimensions()->setWidth($outerWidth); |
||||||
| 825 | $this->getBox()->getDimensions()->setWidth($outerWidth); |
||||||
| 826 | $this->getDimensions()->setHeight($outerHeight); |
||||||
| 827 | $this->getBox()->getDimensions()->setWidth($outerHeight); |
||||||
| 828 | $header->getDimensions()->setWidth($outerWidth); |
||||||
| 829 | $header->setDisplayable(true); |
||||||
| 830 | $header->layout(); |
||||||
| 831 | return $this; |
||||||
| 832 | } |
||||||
| 833 | |||||||
| 834 | /** |
||||||
| 835 | * Layout footer. |
||||||
| 836 | * |
||||||
| 837 | * @param FooterBox $footer |
||||||
| 838 | * |
||||||
| 839 | * @return $this |
||||||
| 840 | */ |
||||||
| 841 | protected function layoutFooter(FooterBox $footer) |
||||||
| 842 | { |
||||||
| 843 | $footer = $footer->cloneWithChildren(); |
||||||
| 844 | $box = $this->getBox(); |
||||||
| 845 | if (!$box->hasChildren()) { |
||||||
| 846 | return $this; |
||||||
| 847 | } |
||||||
| 848 | $box->insertBefore($footer, $box->getFirstChild()); |
||||||
|
0 ignored issues
–
show
It seems like
$box->getFirstChild() can also be of type null; however, parameter $before of YetiForcePDF\Layout\Box::insertBefore() does only seem to accept YetiForcePDF\Layout\Box, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 849 | $outerWidth = $this->getOuterDimensions()->getWidth(); |
||||||
| 850 | $outerHeight = $this->getOuterDimensions()->getHeight(); |
||||||
| 851 | $footer->getDimensions()->resetWidth()->resetHeight(); |
||||||
| 852 | $this->getDimensions()->setWidth($outerWidth); |
||||||
| 853 | $this->getBox()->getDimensions()->setWidth($outerWidth); |
||||||
| 854 | $this->getDimensions()->setHeight($outerHeight); |
||||||
| 855 | $this->getBox()->getDimensions()->setWidth($outerHeight); |
||||||
| 856 | $footer->getDimensions()->setWidth($outerWidth); |
||||||
| 857 | $footer->setDisplayable(true); |
||||||
| 858 | $footer->layout(); |
||||||
| 859 | return $this; |
||||||
| 860 | } |
||||||
| 861 | |||||||
| 862 | /** |
||||||
| 863 | * Layout watermark. |
||||||
| 864 | * |
||||||
| 865 | * @param WatermarkBox $watermark |
||||||
| 866 | * |
||||||
| 867 | * @return $this |
||||||
| 868 | */ |
||||||
| 869 | protected function layoutWatermark(WatermarkBox $watermark) |
||||||
| 870 | { |
||||||
| 871 | $watermark = $watermark->cloneWithChildren(); |
||||||
| 872 | $box = $this->getBox(); |
||||||
| 873 | if (!$box->hasChildren()) { |
||||||
| 874 | return $this; |
||||||
| 875 | } |
||||||
| 876 | $box->insertBefore($watermark, $box->getFirstChild()); |
||||||
|
0 ignored issues
–
show
It seems like
$box->getFirstChild() can also be of type null; however, parameter $before of YetiForcePDF\Layout\Box::insertBefore() does only seem to accept YetiForcePDF\Layout\Box, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 877 | $outerWidth = $this->getOuterDimensions()->getWidth(); |
||||||
| 878 | $outerHeight = $this->getOuterDimensions()->getHeight(); |
||||||
| 879 | $watermark->getDimensions()->resetWidth()->resetHeight(); |
||||||
| 880 | $this->getDimensions()->setWidth($outerWidth); |
||||||
| 881 | $this->getBox()->getDimensions()->setWidth($outerWidth); |
||||||
| 882 | $this->getDimensions()->setHeight($outerHeight); |
||||||
| 883 | $this->getBox()->getDimensions()->setWidth($outerHeight); |
||||||
| 884 | $watermark->getDimensions()->setWidth($outerWidth); |
||||||
| 885 | $watermark->setDisplayable(true); |
||||||
| 886 | $watermark->layout(); |
||||||
| 887 | return $this; |
||||||
| 888 | } |
||||||
| 889 | |||||||
| 890 | /** |
||||||
| 891 | * Set up absolute positioned boxes like header,footer, watermark. |
||||||
| 892 | * |
||||||
| 893 | * @return $this |
||||||
| 894 | */ |
||||||
| 895 | public function setUpAbsoluteBoxes() |
||||||
| 896 | { |
||||||
| 897 | $this->document->setCurrentPage($this); |
||||||
| 898 | $this->getBox()->getOffset()->setLeft('0'); |
||||||
| 899 | $this->getBox()->getOffset()->setTop('0'); |
||||||
| 900 | $this->getBox()->getCoordinates()->setX('0'); |
||||||
| 901 | $this->getBox()->getCoordinates()->setY('0'); |
||||||
| 902 | $this->setMargins(0, 0, 0, 0); |
||||||
| 903 | $box = $this->getBox(); |
||||||
| 904 | $headers = $box->getBoxesByType('HeaderBox'); |
||||||
| 905 | if (!empty($headers)) { |
||||||
| 906 | $header = $headers[0]; |
||||||
| 907 | $headerClone = $header->getParent()->removeChild($header)->cloneWithChildren(); |
||||||
| 908 | $header->clearChildren(); |
||||||
| 909 | $this->document->setHeader($headerClone); |
||||||
| 910 | $this->layoutHeader($headerClone); |
||||||
| 911 | } elseif ($this->document->getHeader()) { |
||||||
| 912 | $this->layoutHeader($this->document->getHeader()); |
||||||
| 913 | } |
||||||
| 914 | $footers = $box->getBoxesByType('FooterBox'); |
||||||
| 915 | if (!empty($footers)) { |
||||||
| 916 | $footer = $footers[0]; |
||||||
| 917 | $footerClone = $footer->getParent()->removeChild($footer)->cloneWithChildren(); |
||||||
| 918 | $footer->clearChildren(); |
||||||
| 919 | $this->document->setFooter($footerClone); |
||||||
| 920 | $this->layoutFooter($footerClone); |
||||||
| 921 | } elseif ($this->document->getFooter()) { |
||||||
| 922 | $this->layoutFooter($this->document->getFooter()); |
||||||
| 923 | } |
||||||
| 924 | $watermarks = $box->getBoxesByType('WatermarkBox'); |
||||||
| 925 | if (!empty($watermarks)) { |
||||||
| 926 | $watermark = $watermarks[0]; |
||||||
| 927 | $watermarkClone = $watermark->getParent()->removeChild($watermark)->cloneWithChildren(); |
||||||
| 928 | $watermark->clearChildren(); |
||||||
| 929 | $this->document->setWatermark($watermarkClone); |
||||||
| 930 | $this->layoutWatermark($watermarkClone); |
||||||
| 931 | } elseif ($this->document->getWatermark()) { |
||||||
| 932 | $this->layoutWatermark($this->document->getWatermark()); |
||||||
| 933 | } |
||||||
| 934 | return $this; |
||||||
| 935 | } |
||||||
| 936 | |||||||
| 937 | /** |
||||||
| 938 | * Get boxes that are laid out after specified y position of the current page. |
||||||
| 939 | * |
||||||
| 940 | * @param string $yPos |
||||||
| 941 | * |
||||||
| 942 | * @return Box[] |
||||||
| 943 | */ |
||||||
| 944 | public function getRootChildsAfterY(string $yPos) |
||||||
| 945 | { |
||||||
| 946 | $boxes = []; |
||||||
| 947 | $box = $this->getBox(); |
||||||
| 948 | $endY = $box->getCoordinates()->getEndY(); |
||||||
| 949 | if (Math::comp($endY, $yPos) <= 0) { |
||||||
| 950 | return $boxes; |
||||||
| 951 | } |
||||||
| 952 | foreach ($box->getChildren() as $childBox) { |
||||||
| 953 | if (Math::comp($childBox->getCoordinates()->getEndY(), $yPos) > 0) { |
||||||
| 954 | $boxes[] = $childBox; |
||||||
| 955 | } |
||||||
| 956 | } |
||||||
| 957 | return $boxes; |
||||||
| 958 | } |
||||||
| 959 | |||||||
| 960 | /** |
||||||
| 961 | * Cut box above specified position. |
||||||
| 962 | * |
||||||
| 963 | * @param Box $child |
||||||
| 964 | * @param string $yPos |
||||||
| 965 | * |
||||||
| 966 | * @return $this |
||||||
| 967 | */ |
||||||
| 968 | public function cutAbove(Box $child, string $yPos) |
||||||
| 969 | { |
||||||
| 970 | $height = Math::sub($child->getCoordinates()->getEndY(), $yPos); |
||||||
| 971 | $child->getDimensions()->setHeight($height); |
||||||
| 972 | $child->getStyle() |
||||||
| 973 | ->setRule('border-top-width', '0') |
||||||
| 974 | ->setRule('padding-top', '0') |
||||||
| 975 | ->setRule('margin-top', '0'); |
||||||
| 976 | $child->setCut(static::CUT_ABOVE); |
||||||
| 977 | return $this; |
||||||
| 978 | } |
||||||
| 979 | |||||||
| 980 | /** |
||||||
| 981 | * Cut box below specified position. |
||||||
| 982 | * |
||||||
| 983 | * @param Box $child |
||||||
| 984 | * @param string $yPos |
||||||
| 985 | * |
||||||
| 986 | * @return $this |
||||||
| 987 | */ |
||||||
| 988 | public function cutBelow(Box $child, string $yPos) |
||||||
| 989 | { |
||||||
| 990 | if ($child instanceof TextBox) { |
||||||
| 991 | $child->setRenderable(false); |
||||||
| 992 | return $this; |
||||||
| 993 | } |
||||||
| 994 | $height = Math::sub($yPos, $child->getCoordinates()->getY()); |
||||||
| 995 | $child->getDimensions()->setHeight($height); |
||||||
| 996 | $child->getStyle() |
||||||
| 997 | ->setRule('border-bottom-width', '0') |
||||||
| 998 | ->setRule('margin-bottom', '0') |
||||||
| 999 | ->setRule('padding-bottom', '0'); |
||||||
| 1000 | $child->setCut(static::CUT_BELOW); |
||||||
| 1001 | return $this; |
||||||
| 1002 | } |
||||||
| 1003 | |||||||
| 1004 | /** |
||||||
| 1005 | * Cut box. |
||||||
| 1006 | * |
||||||
| 1007 | * @param Box $box |
||||||
| 1008 | * @param string $yPos |
||||||
| 1009 | * @param Box $cloned |
||||||
| 1010 | * |
||||||
| 1011 | * @return Box |
||||||
| 1012 | */ |
||||||
| 1013 | public function cutBox(Box $box, string $yPos, Box $cloned) |
||||||
| 1014 | { |
||||||
| 1015 | foreach ($box->getChildren() as $child) { |
||||||
| 1016 | if (!$child->isForMeasurement() || !$child->isRenderable()) { |
||||||
| 1017 | continue; |
||||||
| 1018 | } |
||||||
| 1019 | $childCoords = $child->getCoordinates(); |
||||||
| 1020 | if (Math::comp($childCoords->getEndY(), $yPos) >= 0) { |
||||||
| 1021 | $childBoxes = $this->cloneAndDivideChildrenAfterY($yPos, [$child]); |
||||||
| 1022 | foreach ($childBoxes as $childBox) { |
||||||
| 1023 | $cloned->appendChild($childBox); |
||||||
| 1024 | } |
||||||
| 1025 | } |
||||||
| 1026 | if (Math::comp($childCoords->getY(), $yPos) >= 0) { |
||||||
| 1027 | $child->setRenderable(false)->setForMeasurement(false); |
||||||
| 1028 | } |
||||||
| 1029 | } |
||||||
| 1030 | if (Math::comp($box->getCoordinates()->getY(), $yPos) < 0 && Math::comp($box->getCoordinates()->getEndY(), $yPos) > 0) { |
||||||
| 1031 | $this->cutBelow($box, $yPos); |
||||||
| 1032 | $this->cutAbove($cloned, $yPos); |
||||||
| 1033 | } elseif (Math::comp($box->getCoordinates()->getY(), $yPos) >= 0) { |
||||||
| 1034 | $box->setRenderable(false)->setForMeasurement(false); |
||||||
| 1035 | } |
||||||
| 1036 | return $cloned; |
||||||
| 1037 | } |
||||||
| 1038 | |||||||
| 1039 | /** |
||||||
| 1040 | * Group boxes by parent. |
||||||
| 1041 | * |
||||||
| 1042 | * @param Box[]|null $boxes |
||||||
| 1043 | * @param string $yPos |
||||||
| 1044 | * |
||||||
| 1045 | * @return Box[]|null cloned boxes |
||||||
| 1046 | */ |
||||||
| 1047 | public function cloneAndDivideChildrenAfterY(string $yPos, array $boxes = null) |
||||||
| 1048 | { |
||||||
| 1049 | if (null === $boxes) { |
||||||
| 1050 | $boxes = []; |
||||||
| 1051 | foreach ($this->getBox()->getChildren() as $child) { |
||||||
| 1052 | if (Math::comp($child->getCoordinates()->getEndY(), $yPos) >= 0) { |
||||||
| 1053 | $boxes[] = $child; |
||||||
| 1054 | } |
||||||
| 1055 | } |
||||||
| 1056 | } |
||||||
| 1057 | if (empty($boxes)) { |
||||||
| 1058 | return null; |
||||||
| 1059 | } |
||||||
| 1060 | $clonedBoxes = []; |
||||||
| 1061 | foreach ($boxes as $box) { |
||||||
| 1062 | $cloned = $box->clone(); |
||||||
| 1063 | $cloned->clearChildren(); |
||||||
| 1064 | $boxCoords = $box->getCoordinates(); |
||||||
| 1065 | if ($box instanceof TableWrapperBox && Math::comp($boxCoords->getY(), $yPos) <= 0 && Math::comp($boxCoords->getEndY(), $yPos) > 0) { |
||||||
| 1066 | $cloned = $this->divideTable($box, $yPos, $cloned); |
||||||
| 1067 | } else { |
||||||
| 1068 | $cloned = $this->cutBox($box, $yPos, $cloned); |
||||||
| 1069 | } |
||||||
| 1070 | $clonedBoxes[] = $cloned; |
||||||
| 1071 | } |
||||||
| 1072 | return $clonedBoxes; |
||||||
| 1073 | } |
||||||
| 1074 | |||||||
| 1075 | /** |
||||||
| 1076 | * Treat table like div? - just cut. |
||||||
| 1077 | * |
||||||
| 1078 | * @param TableWrapperBox $tableWrapperBox |
||||||
| 1079 | * @param string $yPos |
||||||
| 1080 | * |
||||||
| 1081 | * @return bool |
||||||
| 1082 | */ |
||||||
| 1083 | public function treatTableLikeDiv(TableWrapperBox $tableWrapperBox, string $yPos) |
||||||
|
0 ignored issues
–
show
The parameter
$yPos is not used and could be removed.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
This check looks for parameters that have been defined for a function or method, but which are not used in the method body. Loading history...
|
|||||||
| 1084 | { |
||||||
| 1085 | $cells = $tableWrapperBox->getBoxesByType('TableCellBox'); |
||||||
| 1086 | foreach ($cells as $cell) { |
||||||
| 1087 | if (Math::comp($cell->getDimensions()->getHeight(), $this->getDimensions()->getHeight()) > 0) { |
||||||
|
0 ignored issues
–
show
It seems like
$this->getDimensions()->getHeight() can also be of type null; however, parameter $right of YetiForcePDF\Math::comp() does only seem to accept string, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 1088 | return true; |
||||||
| 1089 | } |
||||||
| 1090 | } |
||||||
| 1091 | return false; |
||||||
| 1092 | } |
||||||
| 1093 | |||||||
| 1094 | /** |
||||||
| 1095 | * Divide overflowed table. |
||||||
| 1096 | * |
||||||
| 1097 | * @param Box $tableChild |
||||||
| 1098 | * @param string $yPos |
||||||
| 1099 | * @param Box $cloned |
||||||
| 1100 | * |
||||||
| 1101 | * @return TableWrapperBox |
||||||
| 1102 | */ |
||||||
| 1103 | protected function divideTable(Box $tableChild, string $yPos, Box $cloned) |
||||||
| 1104 | { |
||||||
| 1105 | $tableWrapperBox = $tableChild->getClosestByType('TableWrapperBox'); |
||||||
| 1106 | if ($this->treatTableLikeDiv($tableWrapperBox, $yPos)) { |
||||||
| 1107 | return $this->cutBox($tableWrapperBox, $yPos, $cloned); |
||||||
| 1108 | } |
||||||
| 1109 | $pageEnd = Math::add($this->getDimensions()->getHeight(), (string) $this->margins['top']); |
||||||
|
0 ignored issues
–
show
It seems like
$this->getDimensions()->getHeight() can also be of type null; however, parameter $numbers of YetiForcePDF\Math::add() does only seem to accept string, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 1110 | if (Math::comp($tableWrapperBox->getCoordinates()->getY(), $pageEnd) >= 0) { |
||||||
| 1111 | // if table is below page do nothing - it will be moved to the next page and then again checked |
||||||
| 1112 | return $tableWrapperBox; |
||||||
| 1113 | } |
||||||
| 1114 | $newTableWrapperBox = $tableWrapperBox->clone(); |
||||||
| 1115 | $newTableWrapperBox->getStyle()->setBox($newTableWrapperBox); |
||||||
| 1116 | $newTableWrapperBox->clearChildren(); |
||||||
| 1117 | $tableBox = $tableWrapperBox->getFirstChild(); |
||||||
| 1118 | $newTableBox = $tableBox->clone(); |
||||||
| 1119 | $newTableBox->getStyle()->setBox($newTableBox); |
||||||
| 1120 | $newTableBox->clearChildren(); |
||||||
| 1121 | $newTableWrapperBox->appendChild($newTableBox); |
||||||
|
0 ignored issues
–
show
It seems like
$newTableBox can also be of type null; however, parameter $box of YetiForcePDF\Layout\Box::appendChild() does only seem to accept YetiForcePDF\Layout\Box, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 1122 | $clonedFooters = $tableWrapperBox->getBoxesByType('TableFooterGroupBox', 'TableWrapperBox'); |
||||||
| 1123 | if (!empty($clonedFooters)) { |
||||||
| 1124 | $clonedFooter = $clonedFooters[0]->getParent()->removeChild($clonedFooters[0])->cloneWithChildren(); |
||||||
| 1125 | } |
||||||
| 1126 | $headers = $tableWrapperBox->getBoxesByType('TableHeaderGroupBox', 'TableWrapperBox'); |
||||||
| 1127 | if (!empty($headers)) { |
||||||
| 1128 | $newTableBox->appendChild($headers[0]->cloneWithChildren()); |
||||||
| 1129 | } |
||||||
| 1130 | // clone row groups and rows |
||||||
| 1131 | foreach ($tableWrapperBox->getFirstChild()->getChildren() as $tableRowGroup) { |
||||||
| 1132 | if (Math::comp($tableRowGroup->getCoordinates()->getEndY(), $pageEnd) < 0) { |
||||||
| 1133 | continue; |
||||||
| 1134 | } |
||||||
| 1135 | $moveRowGroup = $tableRowGroup->clone(); |
||||||
| 1136 | $moveRowGroup->clearChildren(); |
||||||
| 1137 | foreach ($tableRowGroup->getChildren() as $rowIndex => $row) { |
||||||
| 1138 | if (!$tableRowGroup instanceof TableFooterGroupBox && !$tableRowGroup instanceof TableHeaderGroupBox) { |
||||||
| 1139 | $moveRow = false; |
||||||
| 1140 | foreach ($row->getChildren() as $column) { |
||||||
| 1141 | if (Math::comp($column->getCoordinates()->getEndY(), $pageEnd) >= 0) { |
||||||
| 1142 | $moveRow = true; |
||||||
| 1143 | break; |
||||||
| 1144 | } |
||||||
| 1145 | } |
||||||
| 1146 | if ($moveRow) { |
||||||
| 1147 | if ($row->getRowSpanUp() > 0) { |
||||||
|
0 ignored issues
–
show
The method
getRowSpanUp() does not exist on YetiForcePDF\Layout\Box. It seems like you code against a sub-type of YetiForcePDF\Layout\Box such as YetiForcePDF\Layout\TableRowBox or YetiForcePDF\Layout\TableColumnBox.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 1148 | $move = []; |
||||||
| 1149 | // copy spanned rows too |
||||||
| 1150 | for ($i = $row->getRowSpanUp(); $i > 0; --$i) { |
||||||
| 1151 | $spannedRowIndex = $rowIndex - $i; |
||||||
| 1152 | $move[] = $tableRowGroup->getChildren()[$spannedRowIndex]; |
||||||
| 1153 | } |
||||||
| 1154 | // copy all next rows |
||||||
| 1155 | $rows = $tableRowGroup->getChildren(); |
||||||
| 1156 | for ($i = $rowIndex, $len = \count($rows); $i < $len; ++$i) { |
||||||
| 1157 | $nextRow = $rows[$i]; |
||||||
| 1158 | $move[] = $nextRow; |
||||||
| 1159 | } |
||||||
| 1160 | foreach ($move as $mr) { |
||||||
| 1161 | $moveRowGroup->appendChild($mr->getParent()->removeChild($mr)); |
||||||
| 1162 | } |
||||||
| 1163 | break; |
||||||
| 1164 | } |
||||||
| 1165 | $moveRowGroup->appendChild($row->getParent()->removeChild($row)); |
||||||
| 1166 | } |
||||||
| 1167 | } |
||||||
| 1168 | } |
||||||
| 1169 | $newTableBox->appendChild($moveRowGroup); |
||||||
| 1170 | } |
||||||
| 1171 | if (isset($clonedFooter)) { |
||||||
| 1172 | $newTableBox->appendChild($clonedFooter); |
||||||
| 1173 | } |
||||||
| 1174 | //remove empty rows |
||||||
| 1175 | $tableBox->removeEmptyRows(); |
||||||
|
0 ignored issues
–
show
The method
removeEmptyRows() does not exist on YetiForcePDF\Layout\Box. It seems like you code against a sub-type of YetiForcePDF\Layout\Box such as YetiForcePDF\Layout\TableBox.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 1176 | // remove original table if it was moved with all the content |
||||||
| 1177 | $removeSource = !$tableBox->hasChildren() || !$tableBox->containContent(); |
||||||
| 1178 | $removeSource = $removeSource || ($tableBox->getFirstChild() instanceof TableHeaderGroupBox && 1 === \count($tableBox->getChildren())); |
||||||
| 1179 | if ($removeSource) { |
||||||
| 1180 | $tableWrapperBox->setDisplayable(false)->setRenderable(false)->setForMeasurement(false); |
||||||
| 1181 | } |
||||||
| 1182 | return $newTableWrapperBox; |
||||||
| 1183 | } |
||||||
| 1184 | |||||||
| 1185 | /** |
||||||
| 1186 | * Clone current page. |
||||||
| 1187 | * |
||||||
| 1188 | * @throws \InvalidArgumentException |
||||||
| 1189 | * |
||||||
| 1190 | * @return Page |
||||||
| 1191 | */ |
||||||
| 1192 | public function cloneCurrentPage() |
||||||
| 1193 | { |
||||||
| 1194 | $newPage = clone $this; |
||||||
| 1195 | $newPage->setId($this->document->getActualId()); |
||||||
| 1196 | $newPage->setPageNumber($this->getPageNumber() + 1); |
||||||
| 1197 | $newPage->contentStream = (new \YetiForcePDF\Objects\Basic\StreamObject()) |
||||||
| 1198 | ->setDocument($this->document) |
||||||
| 1199 | ->init(); |
||||||
| 1200 | $newPage->document->getPagesObject()->addChild($newPage, $this); |
||||||
| 1201 | $this->document->addPage($this->format, $this->orientation, $newPage, $this); |
||||||
| 1202 | $this->document->addObject($newPage, $this); |
||||||
| 1203 | return $newPage; |
||||||
| 1204 | } |
||||||
| 1205 | |||||||
| 1206 | /** |
||||||
| 1207 | * Break page after specified box. |
||||||
| 1208 | * |
||||||
| 1209 | * @param Box $box |
||||||
| 1210 | * |
||||||
| 1211 | * @return $this |
||||||
| 1212 | */ |
||||||
| 1213 | public function breakAfter(Box $box) |
||||||
| 1214 | { |
||||||
| 1215 | $box = $box->getFirstRootChild(); |
||||||
| 1216 | if ($box->getParent()->getLastChild() === $box) { |
||||||
| 1217 | return $this; |
||||||
| 1218 | } |
||||||
| 1219 | $contentBoxes = []; |
||||||
| 1220 | $break = false; |
||||||
| 1221 | foreach ($box->getParent()->getChildren() as $child) { |
||||||
| 1222 | if ($child === $box) { |
||||||
| 1223 | $break = true; |
||||||
| 1224 | } |
||||||
| 1225 | if ($break && $child !== $box) { |
||||||
| 1226 | $contentBoxes[] = $child; |
||||||
| 1227 | } |
||||||
| 1228 | } |
||||||
| 1229 | $haveContent = false; |
||||||
| 1230 | foreach ($contentBoxes as $contentBox) { |
||||||
| 1231 | if ($contentBox->containContent()) { |
||||||
| 1232 | $haveContent = true; |
||||||
| 1233 | break; |
||||||
| 1234 | } |
||||||
| 1235 | } |
||||||
| 1236 | if (!$haveContent) { |
||||||
| 1237 | return $this; |
||||||
| 1238 | } |
||||||
| 1239 | $newPage = $this->cloneCurrentPage(); |
||||||
| 1240 | $newBox = $newPage->getBox()->clone(); |
||||||
| 1241 | $newBox->clearChildren(); |
||||||
| 1242 | $newPage->setBox($newBox); |
||||||
| 1243 | $break = false; |
||||||
| 1244 | foreach ($box->getParent()->getChildren() as $child) { |
||||||
| 1245 | if ($child === $box) { |
||||||
| 1246 | $break = true; |
||||||
| 1247 | } |
||||||
| 1248 | if ($break && $child !== $box) { |
||||||
| 1249 | $newBox->appendChild($child->getParent()->removeChild($child)); |
||||||
| 1250 | } |
||||||
| 1251 | } |
||||||
| 1252 | $newBox->layout(true); |
||||||
|
0 ignored issues
–
show
The method
layout() does not exist on YetiForcePDF\Layout\Box. It seems like you code against a sub-type of YetiForcePDF\Layout\Box such as YetiForcePDF\Layout\BlockBox.
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 1253 | $this->document->setCurrentPage($newPage); |
||||||
| 1254 | unset($contentBoxes); |
||||||
| 1255 | return $this; |
||||||
| 1256 | } |
||||||
| 1257 | |||||||
| 1258 | /** |
||||||
| 1259 | * Break overflow of the current page. |
||||||
| 1260 | * |
||||||
| 1261 | * @param int $level Is used to stop infinite loop if something goes wrong |
||||||
| 1262 | * |
||||||
| 1263 | * @return $this |
||||||
| 1264 | */ |
||||||
| 1265 | public function breakOverflow(int $level = 0) |
||||||
| 1266 | { |
||||||
| 1267 | $atYPos = Math::add($this->getDimensions()->getHeight(), (string) $this->margins['top']); |
||||||
|
0 ignored issues
–
show
It seems like
$this->getDimensions()->getHeight() can also be of type null; however, parameter $numbers of YetiForcePDF\Math::add() does only seem to accept string, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 1268 | $clonedBoxes = $this->cloneAndDivideChildrenAfterY($atYPos); |
||||||
| 1269 | if (empty($clonedBoxes)) { |
||||||
| 1270 | return $this; |
||||||
| 1271 | } |
||||||
| 1272 | $newPage = $this->cloneCurrentPage(); |
||||||
| 1273 | $newBox = $newPage->getBox(); |
||||||
| 1274 | $newBox->clearChildren(); |
||||||
| 1275 | foreach ($clonedBoxes as $clonedBox) { |
||||||
| 1276 | $newBox->appendChild($clonedBox->getParent()->removeChild($clonedBox)); |
||||||
| 1277 | } |
||||||
| 1278 | $this->getBox()->getStyle()->fixDomTree(); |
||||||
| 1279 | $this->getBox()->measureHeight(true)->measureOffset(true)->alignText()->measurePosition(true); |
||||||
|
0 ignored issues
–
show
The method
measureHeight() does not exist on YetiForcePDF\Layout\Box. It seems like you code against a sub-type of said class. However, the method does not exist in YetiForcePDF\Layout\ElementBox. Are you sure you never get one of those?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 1280 | $newBox->layout(true); |
||||||
| 1281 | $newBox->getStyle()->fixDomTree(); |
||||||
| 1282 | $this->document->setCurrentPage($newPage); |
||||||
| 1283 | if (Math::comp($newBox->getDimensions()->getHeight(), $this->getDimensions()->getHeight()) > 0 && $level < 1024) { |
||||||
|
0 ignored issues
–
show
It seems like
$this->getDimensions()->getHeight() can also be of type null; however, parameter $right of YetiForcePDF\Math::comp() does only seem to accept string, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
It seems like
$newBox->getDimensions()->getHeight() can also be of type null; however, parameter $left of YetiForcePDF\Math::comp() does only seem to accept string, maybe add an additional type check?
(
Ignorable by Annotation
)
If this is a false-positive, you can also ignore this issue in your code via the
Loading history...
|
|||||||
| 1284 | $newPage->breakOverflow(++$level); |
||||||
| 1285 | } |
||||||
| 1286 | unset($clonedBoxes); |
||||||
| 1287 | return $this; |
||||||
| 1288 | } |
||||||
| 1289 | |||||||
| 1290 | /** |
||||||
| 1291 | * Layout page resources. |
||||||
| 1292 | * |
||||||
| 1293 | * @return string |
||||||
| 1294 | */ |
||||||
| 1295 | public function renderResources(): string |
||||||
| 1296 | { |
||||||
| 1297 | $rendered = [ |
||||||
| 1298 | ' /Resources <<', |
||||||
| 1299 | ]; |
||||||
| 1300 | foreach ($this->resources as $groupName => $resourceGroup) { |
||||||
| 1301 | if (!\in_array($groupName, $this->doNotGroup)) { |
||||||
| 1302 | $rendered[] = " /$groupName <<"; |
||||||
| 1303 | foreach ($resourceGroup as $resourceName => $resourceObject) { |
||||||
| 1304 | $rendered[] = " /$resourceName " . $resourceObject->getReference(); |
||||||
| 1305 | } |
||||||
| 1306 | $rendered[] = ' >>'; |
||||||
| 1307 | } else { |
||||||
| 1308 | $str = " /$groupName "; |
||||||
| 1309 | foreach ($resourceGroup as $resourceName => $resourceObject) { |
||||||
| 1310 | $str .= $resourceObject->getReference(); |
||||||
| 1311 | } |
||||||
| 1312 | $rendered[] = $str; |
||||||
| 1313 | } |
||||||
| 1314 | } |
||||||
| 1315 | $rendered[] = ' >>'; |
||||||
| 1316 | return implode("\n", $rendered); |
||||||
| 1317 | } |
||||||
| 1318 | |||||||
| 1319 | /** |
||||||
| 1320 | * {@inheritdoc} |
||||||
| 1321 | */ |
||||||
| 1322 | public function render(): string |
||||||
| 1323 | { |
||||||
| 1324 | $dimensions = $this->getOuterDimensions(); |
||||||
| 1325 | return implode("\n", [ |
||||||
| 1326 | $this->getRawId() . ' obj', |
||||||
| 1327 | '<<', |
||||||
| 1328 | ' /Type /Page', |
||||||
| 1329 | ' /Parent ' . $this->parent->getReference(), |
||||||
| 1330 | ' /MediaBox [0 0 ' . $dimensions->getWidth() . ' ' . $dimensions->getHeight() . ']', |
||||||
| 1331 | ' /BleedBox [' . $this->margins['left'] . ' ' . $this->margins['top'] . ' ' . $dimensions->getWidth() . ' ' . $dimensions->getHeight() . ']', |
||||||
| 1332 | ' /UserUnit ' . $this->userUnit, |
||||||
| 1333 | ' /Rotate 0', |
||||||
| 1334 | $this->renderResources(), |
||||||
| 1335 | ' /Contents ' . $this->contentStream->getReference(), |
||||||
| 1336 | '>>', |
||||||
| 1337 | 'endobj', |
||||||
| 1338 | ]); |
||||||
| 1339 | } |
||||||
| 1340 | |||||||
| 1341 | public function __clone() |
||||||
| 1342 | { |
||||||
| 1343 | $this->box = clone $this->box->cloneWithChildren(); |
||||||
| 1344 | $this->coordinates = clone $this->coordinates; |
||||||
| 1345 | $this->coordinates->setBox($this->box); |
||||||
| 1346 | $this->contentStream = clone $this->contentStream; |
||||||
| 1347 | $this->dimensions = clone $this->dimensions; |
||||||
| 1348 | $this->outerDimensions = clone $this->dimensions; |
||||||
| 1349 | $currentResources = $this->resources; |
||||||
| 1350 | $this->resources = []; |
||||||
| 1351 | foreach ($currentResources as $groupName => $resources) { |
||||||
| 1352 | foreach ($resources as $resourceName => $resource) { |
||||||
| 1353 | $this->resources[$groupName][$resourceName] = clone $resource; |
||||||
| 1354 | } |
||||||
| 1355 | } |
||||||
| 1356 | } |
||||||
| 1357 | } |
||||||
| 1358 |
This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.
Consider making the comparison explicit by using
empty(..)or! empty(...)instead.