Paper.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. /**
  3. * This file is part of PHPWord - A pure PHP library for reading and writing
  4. * word processing documents.
  5. *
  6. * PHPWord is free software distributed under the terms of the GNU Lesser
  7. * General Public License version 3 as published by the Free Software Foundation.
  8. *
  9. * For the full copyright and license information, please read the LICENSE
  10. * file that was distributed with this source code. For the full list of
  11. * contributors, visit https://github.com/PHPOffice/PHPWord/contributors.
  12. *
  13. * @see https://github.com/PHPOffice/PHPWord
  14. * @copyright 2010-2018 PHPWord contributors
  15. * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3
  16. */
  17. namespace PhpOffice\PhpWord\Style;
  18. use PhpOffice\PhpWord\Shared\Converter;
  19. /**
  20. * Paper size from ISO/IEC 29500-1:2012 pg. 1656-1657
  21. *
  22. * 1 = Letter paper (8.5 in. by 11 in.)
  23. * 2 = Letter small paper (8.5 in. by 11 in.)
  24. * 3 = Tabloid paper (11 in. by 17 in.)
  25. * 4 = Ledger paper (17 in. by 11 in.)
  26. * 5 = Legal paper (8.5 in. by 14 in.)
  27. * 6 = Statement paper (5.5 in. by 8.5 in.)
  28. * 7 = Executive paper (7.25 in. by 10.5 in.)
  29. * 8 = A3 paper (297 mm by 420 mm)
  30. * 9 = A4 paper (210 mm by 297 mm)
  31. * 10 = A4 small paper (210 mm by 297 mm)
  32. * 11 = A5 paper (148 mm by 210 mm)
  33. * 12 = B4 paper (250 mm by 353 mm)
  34. * 13 = B5 paper (176 mm by 250 mm)
  35. * 14 = Folio paper (8.5 in. by 13 in.)
  36. * 15 = Quarto paper (215 mm by 275 mm)
  37. * 16 = Standard paper (10 in. by 14 in.)
  38. * 17 = Standard paper (11 in. by 17 in.)
  39. * 18 = Note paper (8.5 in. by 11 in.)
  40. * 19 = #9 envelope (3.875 in. by 8.875 in.)
  41. * 20 = #10 envelope (4.125 in. by 9.5 in.)
  42. * 21 = #11 envelope (4.5 in. by 10.375 in.)
  43. * 22 = #12 envelope (4.75 in. by 11 in.)
  44. * 23 = #14 envelope (5 in. by 11.5 in.)
  45. * 24 = C paper (17 in. by 22 in.)
  46. * 25 = D paper (22 in. by 34 in.)
  47. * 26 = E paper (34 in. by 44 in.)
  48. * 27 = DL envelope (110 mm by 220 mm)
  49. * 28 = C5 envelope (162 mm by 229 mm)
  50. * 29 = C3 envelope (324 mm by 458 mm)
  51. * 30 = C4 envelope (229 mm by 324 mm)
  52. * 31 = C6 envelope (114 mm by 162 mm)
  53. * 32 = C65 envelope (114 mm by 229 mm)
  54. * 33 = B4 envelope (250 mm by 353 mm)
  55. * 34 = B5 envelope (176 mm by 250 mm)
  56. * 35 = B6 envelope (176 mm by 125 mm)
  57. * 36 = Italy envelope (110 mm by 230 mm)
  58. * 37 = Monarch envelope (3.875 in. by 7.5 in.).
  59. * 38 = 6 3/4 envelope (3.625 in. by 6.5 in.)
  60. * 39 = US standard fanfold (14.875 in. by 11 in.)
  61. * 40 = German standard fanfold (8.5 in. by 12 in.)
  62. * 41 = German legal fanfold (8.5 in. by 13 in.)
  63. * 42 = ISO B4 (250 mm by 353 mm)
  64. * 43 = Japanese double postcard (200 mm by 148 mm)
  65. * 44 = Standard paper (9 in. by 11 in.)
  66. * 45 = Standard paper (10 in. by 11 in.)
  67. * 46 = Standard paper (15 in. by 11 in.)
  68. * 47 = Invite envelope (220 mm by 220 mm)
  69. * 50 = Letter extra paper (9.275 in. by 12 in.)
  70. * 51 = Legal extra paper (9.275 in. by 15 in.)
  71. * 52 = Tabloid extra paper (11.69 in. by 18 in.)
  72. * 53 = A4 extra paper (236 mm by 322 mm)
  73. * 54 = Letter transverse paper (8.275 in. by 11 in.)
  74. * 55 = A4 transverse paper (210 mm by 297 mm)
  75. * 56 = Letter extra transverse paper (9.275 in. by 12 in.)
  76. * 57 = SuperA/SuperA/A4 paper (227 mm by 356 mm)
  77. * 58 = SuperB/SuperB/A3 paper (305 mm by 487 mm)
  78. * 59 = Letter plus paper (8.5 in. by 12.69 in.)
  79. * 60 = A4 plus paper (210 mm by 330 mm)
  80. * 61 = A5 transverse paper (148 mm by 210 mm)
  81. * 62 = JIS B5 transverse paper (182 mm by 257 mm)
  82. * 63 = A3 extra paper (322 mm by 445 mm)
  83. * 64 = A5 extra paper (174 mm by 235 mm)
  84. * 65 = ISO B5 extra paper (201 mm by 276 mm)
  85. * 66 = A2 paper (420 mm by 594 mm)
  86. * 67 = A3 transverse paper (297 mm by 420 mm)
  87. * 68 = A3 extra transverse paper (322 mm by 445 mm)
  88. *
  89. * @since 0.12.0
  90. */
  91. class Paper extends AbstractStyle
  92. {
  93. /**
  94. * Paper sizes
  95. *
  96. * @var array
  97. */
  98. private $sizes = array(
  99. 'A3' => array(297, 420, 'mm'),
  100. 'A4' => array(210, 297, 'mm'),
  101. 'A5' => array(148, 210, 'mm'),
  102. 'B5' => array(176, 250, 'mm'),
  103. 'Folio' => array(8.5, 13, 'in'),
  104. 'Legal' => array(8.5, 14, 'in'),
  105. 'Letter' => array(8.5, 11, 'in'),
  106. );
  107. /**
  108. * Paper size
  109. *
  110. * @var string
  111. */
  112. private $size = 'A4';
  113. /**
  114. * Width
  115. *
  116. * @var float (twip)
  117. */
  118. private $width;
  119. /**
  120. * Height
  121. *
  122. * @var float (twip)
  123. */
  124. private $height;
  125. /**
  126. * Create a new instance
  127. *
  128. * @param string $size
  129. */
  130. public function __construct($size = 'A4')
  131. {
  132. $this->setSize($size);
  133. }
  134. /**
  135. * Get size
  136. *
  137. * @return string
  138. */
  139. public function getSize()
  140. {
  141. return $this->size;
  142. }
  143. /**
  144. * Set size
  145. *
  146. * @param string $size
  147. * @return self
  148. */
  149. public function setSize($size)
  150. {
  151. $this->size = $this->setEnumVal($size, array_keys($this->sizes), $this->size);
  152. list($width, $height, $unit) = $this->sizes[$this->size];
  153. if ($unit == 'mm') {
  154. $this->width = Converter::cmToTwip($width / 10);
  155. $this->height = Converter::cmToTwip($height / 10);
  156. } else {
  157. $this->width = Converter::inchToTwip($width);
  158. $this->height = Converter::inchToTwip($height);
  159. }
  160. return $this;
  161. }
  162. /**
  163. * Get width
  164. *
  165. * @return float
  166. */
  167. public function getWidth()
  168. {
  169. return $this->width;
  170. }
  171. /**
  172. * Get height
  173. *
  174. * @return float
  175. */
  176. public function getHeight()
  177. {
  178. return $this->height;
  179. }
  180. }