abstract-document 5.1.7 → 6.0.3

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 (649) hide show
  1. package/CHANGELOG.md +58 -15
  2. package/LICENSE +21 -0
  3. package/README.md +45 -45
  4. package/lib/{_tests_/abstract-document → abstract-document/__tests__}/hello-world-abstract-doc.d.ts +0 -0
  5. package/lib/abstract-document/__tests__/hello-world-abstract-doc.d.ts.map +1 -0
  6. package/lib/{_tests_/abstract-document → abstract-document/__tests__}/hello-world-abstract-doc.js +0 -0
  7. package/lib/{_tests_/abstract-document → abstract-document/__tests__}/hello-world-abstract-doc.js.map +1 -1
  8. package/lib/abstract-document/__tests__/markdown/export-test-def.d.ts +11 -0
  9. package/lib/abstract-document/__tests__/markdown/export-test-def.d.ts.map +1 -0
  10. package/lib/abstract-document/__tests__/markdown/export-test-def.js +3 -0
  11. package/lib/abstract-document/__tests__/markdown/export-test-def.js.map +1 -0
  12. package/lib/abstract-document/__tests__/markdown/export.test.d.ts +3 -0
  13. package/lib/abstract-document/__tests__/markdown/export.test.d.ts.map +1 -0
  14. package/lib/abstract-document/__tests__/markdown/export.test.js +19 -0
  15. package/lib/abstract-document/__tests__/markdown/export.test.js.map +1 -0
  16. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-bold-italic.d.ts +3 -0
  17. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-bold-italic.d.ts.map +1 -0
  18. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-bold-italic.js +35 -0
  19. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-bold-italic.js.map +1 -0
  20. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-bold.d.ts +3 -0
  21. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-bold.d.ts.map +1 -0
  22. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-bold.js +35 -0
  23. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-bold.js.map +1 -0
  24. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-empty-keepTogether.d.ts +3 -0
  25. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-empty-keepTogether.d.ts.map +1 -0
  26. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-empty-keepTogether.js +48 -0
  27. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-empty-keepTogether.js.map +1 -0
  28. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-header.d.ts +3 -0
  29. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-header.d.ts.map +1 -0
  30. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-header.js +42 -0
  31. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-header.js.map +1 -0
  32. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-italic.d.ts +3 -0
  33. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-italic.d.ts.map +1 -0
  34. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-italic.js +35 -0
  35. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-italic.js.map +1 -0
  36. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-keepTogether.d.ts +3 -0
  37. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-keepTogether.d.ts.map +1 -0
  38. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-keepTogether.js +55 -0
  39. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-keepTogether.js.map +1 -0
  40. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-subscript.d.ts +3 -0
  41. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-subscript.d.ts.map +1 -0
  42. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-subscript.js +49 -0
  43. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-subscript.js.map +1 -0
  44. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-superscript.d.ts +3 -0
  45. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-superscript.d.ts.map +1 -0
  46. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-superscript.js +42 -0
  47. package/lib/abstract-document/__tests__/markdown/test-defs/markdown-superscript.js.map +1 -0
  48. package/lib/{_tests_/abstract-document → abstract-document/__tests__}/model-builder._test.d.ts +0 -0
  49. package/lib/abstract-document/__tests__/model-builder._test.d.ts.map +1 -0
  50. package/lib/{_tests_/abstract-document → abstract-document/__tests__}/model-builder._test.js +0 -0
  51. package/lib/abstract-document/__tests__/model-builder._test.js.map +1 -0
  52. package/lib/abstract-document/markdown/markdown.js +1 -1
  53. package/lib/abstract-document/markdown/markdown.js.map +1 -1
  54. package/lib/abstract-document/resources.js +2 -2
  55. package/lib/abstract-document/resources.js.map +1 -1
  56. package/lib/abstract-document-exporters/__tests__/docx2/export-test-def.d.ts +13 -0
  57. package/lib/abstract-document-exporters/__tests__/docx2/export-test-def.d.ts.map +1 -0
  58. package/lib/abstract-document-exporters/__tests__/docx2/export-test-def.js +3 -0
  59. package/lib/abstract-document-exporters/__tests__/docx2/export-test-def.js.map +1 -0
  60. package/lib/abstract-document-exporters/__tests__/docx2/export.test.d.ts +3 -0
  61. package/lib/abstract-document-exporters/__tests__/docx2/export.test.d.ts.map +1 -0
  62. package/lib/abstract-document-exporters/__tests__/docx2/export.test.js +80 -0
  63. package/lib/abstract-document-exporters/__tests__/docx2/export.test.js.map +1 -0
  64. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/group.d.ts +3 -0
  65. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/group.d.ts.map +1 -0
  66. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/group.js +112 -0
  67. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/group.js.map +1 -0
  68. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/header-and-footer.d.ts +3 -0
  69. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/header-and-footer.d.ts.map +1 -0
  70. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/header-and-footer.js +120 -0
  71. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/header-and-footer.js.map +1 -0
  72. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/hello.d.ts +3 -0
  73. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/hello.d.ts.map +1 -0
  74. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/hello.js +70 -0
  75. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/hello.js.map +1 -0
  76. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/mixed-hyperlink-and-textrun.d.ts +3 -0
  77. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/mixed-hyperlink-and-textrun.d.ts.map +1 -0
  78. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/mixed-hyperlink-and-textrun.js +137 -0
  79. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/mixed-hyperlink-and-textrun.js.map +1 -0
  80. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/mixed-textrun-and-images.d.ts +3 -0
  81. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/mixed-textrun-and-images.d.ts.map +1 -0
  82. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/mixed-textrun-and-images.js +223 -0
  83. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/mixed-textrun-and-images.js.map +1 -0
  84. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-images.d.ts +3 -0
  85. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-images.d.ts.map +1 -0
  86. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-images.js +193 -0
  87. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-images.js.map +1 -0
  88. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-tables.d.ts +3 -0
  89. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-tables.d.ts.map +1 -0
  90. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-tables.js +520 -0
  91. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-tables.js.map +1 -0
  92. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-center-alignment.d.ts +3 -0
  93. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-center-alignment.d.ts.map +1 -0
  94. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-center-alignment.js +138 -0
  95. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-center-alignment.js.map +1 -0
  96. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-end-alignment.d.ts +3 -0
  97. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-end-alignment.d.ts.map +1 -0
  98. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-end-alignment.js +138 -0
  99. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-end-alignment.js.map +1 -0
  100. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-start-alignment-that-linebreaks.d.ts +3 -0
  101. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-start-alignment-that-linebreaks.d.ts.map +1 -0
  102. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-start-alignment-that-linebreaks.js +137 -0
  103. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-start-alignment-that-linebreaks.js.map +1 -0
  104. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-start-alignment.d.ts +3 -0
  105. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-start-alignment.d.ts.map +1 -0
  106. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-start-alignment.js +137 -0
  107. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-start-alignment.js.map +1 -0
  108. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/page-numbering.d.ts +3 -0
  109. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/page-numbering.d.ts.map +1 -0
  110. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/page-numbering.js +123 -0
  111. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/page-numbering.js.map +1 -0
  112. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/simple-table.d.ts +3 -0
  113. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/simple-table.d.ts.map +1 -0
  114. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/simple-table.js +195 -0
  115. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/simple-table.js.map +1 -0
  116. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-hyperlink.d.ts +3 -0
  117. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-hyperlink.d.ts.map +1 -0
  118. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-hyperlink.js +89 -0
  119. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-hyperlink.js.map +1 -0
  120. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-image.d.ts +3 -0
  121. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-image.d.ts.map +1 -0
  122. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-image.js +148 -0
  123. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-image.js.map +1 -0
  124. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-center-alignment-that-linebreaks.d.ts +3 -0
  125. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-center-alignment-that-linebreaks.d.ts.map +1 -0
  126. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-center-alignment-that-linebreaks.js +107 -0
  127. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-center-alignment-that-linebreaks.js.map +1 -0
  128. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-center-alignment.d.ts +3 -0
  129. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-center-alignment.d.ts.map +1 -0
  130. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-center-alignment.js +107 -0
  131. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-center-alignment.js.map +1 -0
  132. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-end-alignment-that-linebreaks.d.ts +3 -0
  133. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-end-alignment-that-linebreaks.d.ts.map +1 -0
  134. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-end-alignment-that-linebreaks.js +107 -0
  135. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-end-alignment-that-linebreaks.js.map +1 -0
  136. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-end-alignment.d.ts +3 -0
  137. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-end-alignment.d.ts.map +1 -0
  138. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-end-alignment.js +107 -0
  139. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-end-alignment.js.map +1 -0
  140. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-start-alignment-that-linebreaks.d.ts +3 -0
  141. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-start-alignment-that-linebreaks.d.ts.map +1 -0
  142. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-start-alignment-that-linebreaks.js +107 -0
  143. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-start-alignment-that-linebreaks.js.map +1 -0
  144. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-start-alignment.d.ts +3 -0
  145. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-start-alignment.d.ts.map +1 -0
  146. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-start-alignment.js +107 -0
  147. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-start-alignment.js.map +1 -0
  148. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun.d.ts +3 -0
  149. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun.d.ts.map +1 -0
  150. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun.js +87 -0
  151. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun.js.map +1 -0
  152. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/world.d.ts +3 -0
  153. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/world.d.ts.map +1 -0
  154. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/world.js +70 -0
  155. package/lib/abstract-document-exporters/__tests__/docx2/test-defs/world.js.map +1 -0
  156. package/lib/abstract-document-exporters/__tests__/pdf/export-test-def.d.ts +11 -0
  157. package/lib/abstract-document-exporters/__tests__/pdf/export-test-def.d.ts.map +1 -0
  158. package/lib/abstract-document-exporters/__tests__/pdf/export-test-def.js +3 -0
  159. package/lib/abstract-document-exporters/__tests__/pdf/export-test-def.js.map +1 -0
  160. package/lib/abstract-document-exporters/__tests__/pdf/export.test.d.ts +3 -0
  161. package/lib/abstract-document-exporters/__tests__/pdf/export.test.d.ts.map +1 -0
  162. package/lib/abstract-document-exporters/__tests__/pdf/export.test.js +67 -0
  163. package/lib/abstract-document-exporters/__tests__/pdf/export.test.js.map +1 -0
  164. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/date.d.ts +3 -0
  165. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/date.d.ts.map +1 -0
  166. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/date.js +65 -0
  167. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/date.js.map +1 -0
  168. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/group-paragraphs.d.ts +3 -0
  169. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/group-paragraphs.d.ts.map +1 -0
  170. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/group-paragraphs.js +1270 -0
  171. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/group-paragraphs.js.map +1 -0
  172. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/group-tables.d.ts +3 -0
  173. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/group-tables.d.ts.map +1 -0
  174. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/group-tables.js +1291 -0
  175. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/group-tables.js.map +1 -0
  176. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/group.d.ts +3 -0
  177. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/group.d.ts.map +1 -0
  178. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/group.js +83 -0
  179. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/group.js.map +1 -0
  180. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/header-and-footer.d.ts +3 -0
  181. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/header-and-footer.d.ts.map +1 -0
  182. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/header-and-footer.js +172 -0
  183. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/header-and-footer.js.map +1 -0
  184. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/hello.d.ts +3 -0
  185. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/hello.d.ts.map +1 -0
  186. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/hello.js +45 -0
  187. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/hello.js.map +1 -0
  188. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/margins-header-body-footer.d.ts +3 -0
  189. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/margins-header-body-footer.d.ts.map +1 -0
  190. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/margins-header-body-footer.js +1014 -0
  191. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/margins-header-body-footer.js.map +1 -0
  192. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/mixed-hyperlink-and-textrun.d.ts +3 -0
  193. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/mixed-hyperlink-and-textrun.d.ts.map +1 -0
  194. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/mixed-hyperlink-and-textrun.js +113 -0
  195. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/mixed-hyperlink-and-textrun.js.map +1 -0
  196. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/mixed-textrun-and-images.d.ts +3 -0
  197. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/mixed-textrun-and-images.d.ts.map +1 -0
  198. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/mixed-textrun-and-images.js +115 -0
  199. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/mixed-textrun-and-images.js.map +1 -0
  200. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-images.d.ts +3 -0
  201. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-images.d.ts.map +1 -0
  202. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-images.js +82 -0
  203. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-images.js.map +1 -0
  204. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-center-alignment.d.ts +3 -0
  205. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-center-alignment.d.ts.map +1 -0
  206. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-center-alignment.js +117 -0
  207. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-center-alignment.js.map +1 -0
  208. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-end-alignment.d.ts +3 -0
  209. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-end-alignment.d.ts.map +1 -0
  210. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-end-alignment.js +117 -0
  211. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-end-alignment.js.map +1 -0
  212. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-start-alignment-that-linebreaks.d.ts +3 -0
  213. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-start-alignment-that-linebreaks.d.ts.map +1 -0
  214. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-start-alignment-that-linebreaks.js +132 -0
  215. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-start-alignment-that-linebreaks.js.map +1 -0
  216. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-start-alignment.d.ts +3 -0
  217. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-start-alignment.d.ts.map +1 -0
  218. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-start-alignment.js +117 -0
  219. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-start-alignment.js.map +1 -0
  220. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/page-numbering.d.ts +3 -0
  221. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/page-numbering.d.ts.map +1 -0
  222. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/page-numbering.js +97 -0
  223. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/page-numbering.js.map +1 -0
  224. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/pagebreak.d.ts +3 -0
  225. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/pagebreak.d.ts.map +1 -0
  226. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/pagebreak.js +101 -0
  227. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/pagebreak.js.map +1 -0
  228. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-all-auto-cell-widths.d.ts +3 -0
  229. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-all-auto-cell-widths.d.ts.map +1 -0
  230. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-all-auto-cell-widths.js +104 -0
  231. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-all-auto-cell-widths.js.map +1 -0
  232. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-all-fixed-cell-widths.d.ts +3 -0
  233. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-all-fixed-cell-widths.d.ts.map +1 -0
  234. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-all-fixed-cell-widths.js +104 -0
  235. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-all-fixed-cell-widths.js.map +1 -0
  236. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-auto-cell-widths.d.ts +3 -0
  237. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-auto-cell-widths.d.ts.map +1 -0
  238. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-auto-cell-widths.js +105 -0
  239. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-auto-cell-widths.js.map +1 -0
  240. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-cell-padding-image.d.ts +3 -0
  241. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-cell-padding-image.d.ts.map +1 -0
  242. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-cell-padding-image.js +197 -0
  243. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-cell-padding-image.js.map +1 -0
  244. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-cell-padding-text.d.ts +3 -0
  245. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-cell-padding-text.d.ts.map +1 -0
  246. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-cell-padding-text.js +331 -0
  247. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-cell-padding-text.js.map +1 -0
  248. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-center-alignment.d.ts +3 -0
  249. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-center-alignment.d.ts.map +1 -0
  250. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-center-alignment.js +119 -0
  251. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-center-alignment.js.map +1 -0
  252. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-fixed-cell-widths.d.ts +3 -0
  253. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-fixed-cell-widths.d.ts.map +1 -0
  254. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-fixed-cell-widths.js +104 -0
  255. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-fixed-cell-widths.js.map +1 -0
  256. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-mix-auto-fix-cell-widths.d.ts +3 -0
  257. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-mix-auto-fix-cell-widths.d.ts.map +1 -0
  258. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-mix-auto-fix-cell-widths.js +104 -0
  259. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-mix-auto-fix-cell-widths.js.map +1 -0
  260. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-padding.d.ts +3 -0
  261. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-padding.d.ts.map +1 -0
  262. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-padding.js +120 -0
  263. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-padding.js.map +1 -0
  264. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-right-alignment.d.ts +3 -0
  265. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-right-alignment.d.ts.map +1 -0
  266. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-right-alignment.js +119 -0
  267. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-right-alignment.js.map +1 -0
  268. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-row-alignment.d.ts +3 -0
  269. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-row-alignment.d.ts.map +1 -0
  270. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-row-alignment.js +292 -0
  271. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-row-alignment.js.map +1 -0
  272. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-text-alignment-in-cell-wrapping.d.ts +3 -0
  273. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-text-alignment-in-cell-wrapping.d.ts.map +1 -0
  274. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-text-alignment-in-cell-wrapping.js +486 -0
  275. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-text-alignment-in-cell-wrapping.js.map +1 -0
  276. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-text-alignment-in-cell.d.ts +3 -0
  277. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-text-alignment-in-cell.d.ts.map +1 -0
  278. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-text-alignment-in-cell.js +246 -0
  279. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-text-alignment-in-cell.js.map +1 -0
  280. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table.d.ts +3 -0
  281. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table.d.ts.map +1 -0
  282. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table.js +104 -0
  283. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/simple-table.js.map +1 -0
  284. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-hyperlink.d.ts +3 -0
  285. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-hyperlink.d.ts.map +1 -0
  286. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-hyperlink.js +65 -0
  287. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-hyperlink.js.map +1 -0
  288. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-image-svg-color-hex.d.ts +3 -0
  289. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-image-svg-color-hex.d.ts.map +1 -0
  290. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-image-svg-color-hex.js +283 -0
  291. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-image-svg-color-hex.js.map +1 -0
  292. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-image-svg-color-name.d.ts +3 -0
  293. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-image-svg-color-name.d.ts.map +1 -0
  294. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-image-svg-color-name.js +283 -0
  295. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-image-svg-color-name.js.map +1 -0
  296. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-image-svg-color-url.d.ts +3 -0
  297. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-image-svg-color-url.d.ts.map +1 -0
  298. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-image-svg-color-url.js +108 -0
  299. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-image-svg-color-url.js.map +1 -0
  300. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-image.d.ts +3 -0
  301. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-image.d.ts.map +1 -0
  302. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-image.js +81 -0
  303. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-image.js.map +1 -0
  304. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-center-alignment-that-linebreaks.d.ts +3 -0
  305. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-center-alignment-that-linebreaks.d.ts.map +1 -0
  306. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-center-alignment-that-linebreaks.js +100 -0
  307. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-center-alignment-that-linebreaks.js.map +1 -0
  308. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-center-alignment.d.ts +3 -0
  309. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-center-alignment.d.ts.map +1 -0
  310. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-center-alignment.js +85 -0
  311. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-center-alignment.js.map +1 -0
  312. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-end-alignment-that-linebreaks.d.ts +3 -0
  313. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-end-alignment-that-linebreaks.d.ts.map +1 -0
  314. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-end-alignment-that-linebreaks.js +100 -0
  315. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-end-alignment-that-linebreaks.js.map +1 -0
  316. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-end-alignment.d.ts +3 -0
  317. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-end-alignment.d.ts.map +1 -0
  318. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-end-alignment.js +85 -0
  319. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-end-alignment.js.map +1 -0
  320. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-start-alignment-that-linebreaks.d.ts +3 -0
  321. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-start-alignment-that-linebreaks.d.ts.map +1 -0
  322. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-start-alignment-that-linebreaks.js +100 -0
  323. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-start-alignment-that-linebreaks.js.map +1 -0
  324. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-start-alignment.d.ts +3 -0
  325. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-start-alignment.d.ts.map +1 -0
  326. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-start-alignment.js +85 -0
  327. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-start-alignment.js.map +1 -0
  328. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun.d.ts +3 -0
  329. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun.d.ts.map +1 -0
  330. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun.js +45 -0
  331. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun.js.map +1 -0
  332. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/table-of-content-separator.d.ts +3 -0
  333. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/table-of-content-separator.d.ts.map +1 -0
  334. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/table-of-content-separator.js +81 -0
  335. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/table-of-content-separator.js.map +1 -0
  336. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/world.d.ts +3 -0
  337. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/world.d.ts.map +1 -0
  338. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/world.js +45 -0
  339. package/lib/abstract-document-exporters/__tests__/pdf/test-defs/world.js.map +1 -0
  340. package/lib/abstract-document-exporters/docx/xml-writer.d.ts.map +1 -1
  341. package/lib/abstract-document-exporters/docx/xml-writer.js +3 -6
  342. package/lib/abstract-document-exporters/docx/xml-writer.js.map +1 -1
  343. package/lib/abstract-document-exporters/docx2/render.js +63 -106
  344. package/lib/abstract-document-exporters/docx2/render.js.map +1 -1
  345. package/lib/abstract-document-exporters/pdf/font.d.ts.map +1 -1
  346. package/lib/abstract-document-exporters/pdf/font.js +6 -31
  347. package/lib/abstract-document-exporters/pdf/font.js.map +1 -1
  348. package/lib/abstract-document-exporters/pdf/measure.js +40 -9
  349. package/lib/abstract-document-exporters/pdf/measure.js.map +1 -1
  350. package/lib/abstract-document-exporters/pdf/paginate.js +2 -2
  351. package/lib/abstract-document-exporters/pdf/paginate.js.map +1 -1
  352. package/lib/abstract-document-exporters/pdf/pre-process.js +2 -2
  353. package/lib/abstract-document-exporters/pdf/pre-process.js.map +1 -1
  354. package/lib/abstract-document-exporters/pdf/render-image.d.ts +1 -1
  355. package/lib/abstract-document-exporters/pdf/render-image.d.ts.map +1 -1
  356. package/lib/abstract-document-exporters/pdf/render-image.js +25 -4
  357. package/lib/abstract-document-exporters/pdf/render-image.js.map +1 -1
  358. package/lib/abstract-document-exporters/pdf/render.d.ts.map +1 -1
  359. package/lib/abstract-document-exporters/pdf/render.js +168 -80
  360. package/lib/abstract-document-exporters/pdf/render.js.map +1 -1
  361. package/lib/abstract-document-exporters/shared/get_resources.js +1 -1
  362. package/lib/abstract-document-exporters/shared/get_resources.js.map +1 -1
  363. package/lib/abstract-document-jsx/index.d.ts +15 -15
  364. package/lib/abstract-document-jsx/index.d.ts.map +1 -1
  365. package/lib/abstract-document-jsx/index.js.map +1 -1
  366. package/package.json +9 -6
  367. package/src/{_tests_/abstract-document → abstract-document/__tests__}/hello-world-abstract-doc.ts +245 -245
  368. package/src/abstract-document/__tests__/markdown/export-test-def.ts +10 -0
  369. package/src/abstract-document/__tests__/markdown/export.test.tsx +15 -0
  370. package/src/abstract-document/__tests__/markdown/test-defs/markdown-bold-italic.tsx +30 -0
  371. package/src/abstract-document/__tests__/markdown/test-defs/markdown-bold.tsx +30 -0
  372. package/src/abstract-document/__tests__/markdown/test-defs/markdown-empty-keepTogether.tsx +43 -0
  373. package/src/abstract-document/__tests__/markdown/test-defs/markdown-header.tsx +37 -0
  374. package/src/abstract-document/__tests__/markdown/test-defs/markdown-italic.tsx +30 -0
  375. package/src/abstract-document/__tests__/markdown/test-defs/markdown-keepTogether.tsx +50 -0
  376. package/src/abstract-document/__tests__/markdown/test-defs/markdown-subscript.tsx +44 -0
  377. package/src/abstract-document/__tests__/markdown/test-defs/markdown-superscript.tsx +37 -0
  378. package/src/{_tests_/abstract-document → abstract-document/__tests__}/model-builder._test.ts +48 -48
  379. package/src/abstract-document/abstract-doc.ts +19 -19
  380. package/src/abstract-document/atoms/atom.ts +14 -14
  381. package/src/abstract-document/atoms/hyper-link.ts +27 -27
  382. package/src/abstract-document/atoms/image.ts +21 -21
  383. package/src/abstract-document/atoms/link-target.ts +15 -15
  384. package/src/abstract-document/atoms/text-field.ts +36 -36
  385. package/src/abstract-document/atoms/text-run.ts +25 -25
  386. package/src/abstract-document/atoms/toc-separator.ts +14 -14
  387. package/src/abstract-document/default-styles.ts +145 -145
  388. package/src/abstract-document/index.ts +83 -83
  389. package/src/abstract-document/markdown/markdown.ts +142 -142
  390. package/src/abstract-document/markdown/types.ts +78 -78
  391. package/src/abstract-document/numberings/numbering-definition.ts +17 -17
  392. package/src/abstract-document/numberings/numbering-format.ts +7 -7
  393. package/src/abstract-document/numberings/numbering-level-definition.ts +42 -42
  394. package/src/abstract-document/numberings/numbering.ts +3 -3
  395. package/src/abstract-document/page/master-page.ts +23 -23
  396. package/src/abstract-document/page/section.ts +27 -27
  397. package/src/abstract-document/primitives/font.ts +37 -37
  398. package/src/abstract-document/primitives/image-resource.ts +27 -27
  399. package/src/abstract-document/primitives/layout-foundation.ts +37 -37
  400. package/src/abstract-document/primitives/length.ts +11 -11
  401. package/src/abstract-document/primitives/point.ts +11 -11
  402. package/src/abstract-document/primitives/rect.ts +15 -15
  403. package/src/abstract-document/primitives/size.ts +13 -13
  404. package/src/abstract-document/resources.ts +101 -101
  405. package/src/abstract-document/section-elements/group.ts +25 -25
  406. package/src/abstract-document/section-elements/page-break.ts +14 -14
  407. package/src/abstract-document/section-elements/paragraph-numbering.ts +6 -6
  408. package/src/abstract-document/section-elements/paragraph.ts +30 -30
  409. package/src/abstract-document/section-elements/section-element.ts +6 -6
  410. package/src/abstract-document/section-elements/table.ts +37 -37
  411. package/src/abstract-document/styles/page-style.ts +76 -76
  412. package/src/abstract-document/styles/paragraph-style.ts +45 -45
  413. package/src/abstract-document/styles/style-key.ts +5 -5
  414. package/src/abstract-document/styles/style.ts +44 -44
  415. package/src/abstract-document/styles/table-cell-style.ts +54 -54
  416. package/src/abstract-document/styles/table-style.ts +45 -45
  417. package/src/abstract-document/styles/text-style.ts +73 -73
  418. package/src/abstract-document/table/table-cell.ts +29 -29
  419. package/src/abstract-document/table/table-row.ts +17 -17
  420. package/src/abstract-document/types.ts +3 -3
  421. package/src/abstract-document-exporters/__tests__/docx2/export-test-def.ts +10 -0
  422. package/src/abstract-document-exporters/__tests__/docx2/export.test.tsx +67 -0
  423. package/src/abstract-document-exporters/__tests__/docx2/test-defs/group.tsx +114 -0
  424. package/src/abstract-document-exporters/__tests__/docx2/test-defs/header-and-footer.tsx +110 -0
  425. package/src/abstract-document-exporters/__tests__/docx2/test-defs/hello.tsx +70 -0
  426. package/src/abstract-document-exporters/__tests__/docx2/test-defs/mixed-hyperlink-and-textrun.tsx +137 -0
  427. package/src/abstract-document-exporters/__tests__/docx2/test-defs/mixed-textrun-and-images.tsx +212 -0
  428. package/src/abstract-document-exporters/__tests__/docx2/test-defs/multiple-images.tsx +182 -0
  429. package/src/abstract-document-exporters/__tests__/docx2/test-defs/multiple-tables.tsx +553 -0
  430. package/src/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-center-alignment.tsx +119 -0
  431. package/src/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-end-alignment.tsx +119 -0
  432. package/src/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-start-alignment-that-linebreaks.tsx +121 -0
  433. package/src/abstract-document-exporters/__tests__/docx2/test-defs/multiple-textrun-with-start-alignment.tsx +118 -0
  434. package/src/abstract-document-exporters/__tests__/docx2/test-defs/page-numbering.tsx +123 -0
  435. package/src/abstract-document-exporters/__tests__/docx2/test-defs/simple-table.tsx +210 -0
  436. package/src/abstract-document-exporters/__tests__/docx2/test-defs/single-hyperlink.tsx +89 -0
  437. package/src/abstract-document-exporters/__tests__/docx2/test-defs/single-image.tsx +137 -0
  438. package/src/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-center-alignment-that-linebreaks.tsx +88 -0
  439. package/src/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-center-alignment.tsx +88 -0
  440. package/src/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-end-alignment-that-linebreaks.tsx +88 -0
  441. package/src/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-end-alignment.tsx +88 -0
  442. package/src/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-start-alignment-that-linebreaks.tsx +88 -0
  443. package/src/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun-with-start-alignment.tsx +88 -0
  444. package/src/abstract-document-exporters/__tests__/docx2/test-defs/single-textrun.tsx +87 -0
  445. package/src/abstract-document-exporters/__tests__/docx2/test-defs/world.tsx +70 -0
  446. package/src/abstract-document-exporters/__tests__/docx2/tmp/Group.docx +0 -0
  447. footer.docx +0 -0
  448. textrun.docx +0 -0
  449. images.docx +0 -0
  450. package/src/abstract-document-exporters/__tests__/docx2/tmp/Multiple images.docx +0 -0
  451. package/src/abstract-document-exporters/__tests__/docx2/tmp/Multiple tables.docx +0 -0
  452. package/src/abstract-document-exporters/__tests__/docx2/tmp/Multiple textrun with Center alignment.docx +0 -0
  453. package/src/abstract-document-exporters/__tests__/docx2/tmp/Multiple textrun with End alignment.docx +0 -0
  454. package/src/abstract-document-exporters/__tests__/docx2/tmp/Multiple textrun with Start alignment that linebreaks.docx +0 -0
  455. package/src/abstract-document-exporters/__tests__/docx2/tmp/Multiple textrun with Start alignment.docx +0 -0
  456. package/src/abstract-document-exporters/__tests__/docx2/tmp/Page numbering.docx +0 -0
  457. package/src/abstract-document-exporters/__tests__/docx2/tmp/Simple table.docx +0 -0
  458. package/src/abstract-document-exporters/__tests__/docx2/tmp/Single hyperlink.docx +0 -0
  459. package/src/abstract-document-exporters/__tests__/docx2/tmp/Single image.docx +0 -0
  460. package/src/abstract-document-exporters/__tests__/docx2/tmp/Single textrun with Center alignment that linebreaks.docx +0 -0
  461. package/src/abstract-document-exporters/__tests__/docx2/tmp/Single textrun with Center alignment.docx +0 -0
  462. package/src/abstract-document-exporters/__tests__/docx2/tmp/Single textrun with End alignment that linebreaks.docx +0 -0
  463. package/src/abstract-document-exporters/__tests__/docx2/tmp/Single textrun with End alignment.docx +0 -0
  464. package/src/abstract-document-exporters/__tests__/docx2/tmp/Single textrun with Start alignment that linebreaks.docx +0 -0
  465. package/src/abstract-document-exporters/__tests__/docx2/tmp/Single textrun with Start alignment.docx +0 -0
  466. package/src/abstract-document-exporters/__tests__/docx2/tmp/Single textrun.docx +0 -0
  467. package/src/abstract-document-exporters/__tests__/docx2/tmp/hello.docx +0 -0
  468. package/src/abstract-document-exporters/__tests__/docx2/tmp/world.docx +0 -0
  469. package/src/abstract-document-exporters/__tests__/pdf/export-test-def.ts +10 -0
  470. package/src/abstract-document-exporters/__tests__/pdf/export.test.tsx +46 -0
  471. package/src/abstract-document-exporters/__tests__/pdf/test-defs/date.tsx +66 -0
  472. package/src/abstract-document-exporters/__tests__/pdf/test-defs/group-paragraphs.tsx +1291 -0
  473. package/src/abstract-document-exporters/__tests__/pdf/test-defs/group-tables.tsx +1314 -0
  474. package/src/abstract-document-exporters/__tests__/pdf/test-defs/header-and-footer.tsx +162 -0
  475. package/src/abstract-document-exporters/__tests__/pdf/test-defs/hello.tsx +45 -0
  476. package/src/abstract-document-exporters/__tests__/pdf/test-defs/margins-header-body-footer.tsx +1008 -0
  477. package/src/abstract-document-exporters/__tests__/pdf/test-defs/mixed-hyperlink-and-textrun.tsx +113 -0
  478. package/src/abstract-document-exporters/__tests__/pdf/test-defs/mixed-textrun-and-images.tsx +104 -0
  479. package/src/abstract-document-exporters/__tests__/pdf/test-defs/multiple-images.tsx +71 -0
  480. package/src/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-center-alignment.tsx +98 -0
  481. package/src/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-end-alignment.tsx +98 -0
  482. package/src/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-start-alignment-that-linebreaks.tsx +116 -0
  483. package/src/abstract-document-exporters/__tests__/pdf/test-defs/multiple-textrun-with-start-alignment.tsx +98 -0
  484. package/src/abstract-document-exporters/__tests__/pdf/test-defs/page-numbering.tsx +97 -0
  485. package/src/abstract-document-exporters/__tests__/pdf/test-defs/pagebreak.tsx +102 -0
  486. package/src/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-all-auto-cell-widths.tsx +119 -0
  487. package/src/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-all-fixed-cell-widths.tsx +119 -0
  488. package/src/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-cell-padding-image.tsx +200 -0
  489. package/src/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-cell-padding-text.tsx +338 -0
  490. package/src/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-center-alignment.tsx +114 -0
  491. package/src/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-mix-auto-fix-cell-widths.tsx +119 -0
  492. package/src/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-padding.tsx +115 -0
  493. package/src/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-right-alignment.tsx +115 -0
  494. package/src/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-row-alignment.tsx +297 -0
  495. package/src/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-text-alignment-in-cell-wrapping.tsx +491 -0
  496. package/src/abstract-document-exporters/__tests__/pdf/test-defs/simple-table-text-alignment-in-cell.tsx +248 -0
  497. package/src/abstract-document-exporters/__tests__/pdf/test-defs/single-hyperlink.tsx +65 -0
  498. package/src/abstract-document-exporters/__tests__/pdf/test-defs/single-image-svg-color-hex.tsx +272 -0
  499. package/src/abstract-document-exporters/__tests__/pdf/test-defs/single-image-svg-color-name.tsx +272 -0
  500. package/src/abstract-document-exporters/__tests__/pdf/test-defs/single-image-svg-color-url.tsx +97 -0
  501. package/src/abstract-document-exporters/__tests__/pdf/test-defs/single-image.tsx +70 -0
  502. package/src/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-center-alignment-that-linebreaks.tsx +81 -0
  503. package/src/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-center-alignment.tsx +66 -0
  504. package/src/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-end-alignment-that-linebreaks.tsx +81 -0
  505. package/src/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-end-alignment.tsx +66 -0
  506. package/src/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-start-alignment-that-linebreaks.tsx +81 -0
  507. package/src/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun-with-start-alignment.tsx +66 -0
  508. package/src/abstract-document-exporters/__tests__/pdf/test-defs/single-textrun.tsx +45 -0
  509. package/src/abstract-document-exporters/__tests__/pdf/test-defs/table-of-content-separator.tsx +81 -0
  510. package/src/abstract-document-exporters/__tests__/pdf/test-defs/world.tsx +45 -0
  511. package/src/abstract-document-exporters/__tests__/pdf/tmp/Group Paragraphs.pdf +912 -0
  512. package/src/abstract-document-exporters/__tests__/pdf/tmp/Group Paratraphs.pdf +912 -0
  513. package/src/abstract-document-exporters/__tests__/pdf/tmp/Group Tables.pdf +932 -0
  514. package/src/abstract-document-exporters/__tests__/pdf/tmp/Group.pdf +123 -0
  515. package/src/abstract-document-exporters/__tests__/pdf/tmp/Header and footer.pdf +163 -0
  516. package/src/abstract-document-exporters/__tests__/pdf/tmp/Margins header body footer.pdf +678 -0
  517. package/src/abstract-document-exporters/__tests__/pdf/tmp/Margins header body footer1.pdf +640 -0
  518. package/src/abstract-document-exporters/__tests__/pdf/tmp/Margins header body footer2.pdf +609 -0
  519. package/src/abstract-document-exporters/__tests__/pdf/tmp/Margins header body footer3.pdf +1188 -0
  520. package/src/abstract-document-exporters/__tests__/pdf/tmp/Margins header body footer4.pdf +1188 -0
  521. package/src/abstract-document-exporters/__tests__/pdf/tmp/Mixed hyperlink and textrun.pdf +206 -0
  522. images.pdf +0 -0
  523. package/src/abstract-document-exporters/__tests__/pdf/tmp/Multiple images.pdf +0 -0
  524. package/src/abstract-document-exporters/__tests__/pdf/tmp/Multiple textrun with Center alignment.pdf +133 -0
  525. package/src/abstract-document-exporters/__tests__/pdf/tmp/Multiple textrun with End alignment.pdf +133 -0
  526. package/src/abstract-document-exporters/__tests__/pdf/tmp/Multiple textrun with Start alignment that linebreaks.pdf +141 -0
  527. package/src/abstract-document-exporters/__tests__/pdf/tmp/Multiple textrun with Start alignment.pdf +133 -0
  528. package/src/abstract-document-exporters/__tests__/pdf/tmp/Page numbering.pdf +133 -0
  529. package/src/abstract-document-exporters/__tests__/pdf/tmp/Simple table all auto.pdf +133 -0
  530. package/src/abstract-document-exporters/__tests__/pdf/tmp/Simple table all fix.pdf +133 -0
  531. package/src/abstract-document-exporters/__tests__/pdf/tmp/Simple table auto.pdf +133 -0
  532. package/src/abstract-document-exporters/__tests__/pdf/tmp/Simple table cell padding of image.pdf +0 -0
  533. package/src/abstract-document-exporters/__tests__/pdf/tmp/Simple table cell padding of text.pdf +283 -0
  534. package/src/abstract-document-exporters/__tests__/pdf/tmp/Simple table center alignment.pdf +133 -0
  535. package/src/abstract-document-exporters/__tests__/pdf/tmp/Simple table mix auto fix.pdf +133 -0
  536. package/src/abstract-document-exporters/__tests__/pdf/tmp/Simple table one auto.pdf +133 -0
  537. package/src/abstract-document-exporters/__tests__/pdf/tmp/Simple table padding.pdf +133 -0
  538. package/src/abstract-document-exporters/__tests__/pdf/tmp/Simple table padding1.pdf +133 -0
  539. package/src/abstract-document-exporters/__tests__/pdf/tmp/Simple table right alignment.pdf +133 -0
  540. package/src/abstract-document-exporters/__tests__/pdf/tmp/Simple table row alignment.pdf +247 -0
  541. package/src/abstract-document-exporters/__tests__/pdf/tmp/Simple table text alignment in cell with wrapping.pdf +295 -0
  542. package/src/abstract-document-exporters/__tests__/pdf/tmp/Simple table text alignment in cell.pdf +223 -0
  543. package/src/abstract-document-exporters/__tests__/pdf/tmp/Simple table.pdf +133 -0
  544. package/src/abstract-document-exporters/__tests__/pdf/tmp/Single date.pdf +113 -0
  545. package/src/abstract-document-exporters/__tests__/pdf/tmp/Single hyperlink.pdf +146 -0
  546. package/src/abstract-document-exporters/__tests__/pdf/tmp/Single image svg color hex.pdf +179 -0
  547. package/src/abstract-document-exporters/__tests__/pdf/tmp/Single image svg color name.pdf +179 -0
  548. package/src/abstract-document-exporters/__tests__/pdf/tmp/Single image svg color url.pdf +222 -0
  549. package/src/abstract-document-exporters/__tests__/pdf/tmp/Single image svg color.pdf +179 -0
  550. package/src/abstract-document-exporters/__tests__/pdf/tmp/Single image.pdf +0 -0
  551. package/src/abstract-document-exporters/__tests__/pdf/tmp/Single textrun with Center alignment that linebreaks.pdf +121 -0
  552. package/src/abstract-document-exporters/__tests__/pdf/tmp/Single textrun with Center alignment.pdf +113 -0
  553. package/src/abstract-document-exporters/__tests__/pdf/tmp/Single textrun with End alignment that linebreaks.pdf +121 -0
  554. package/src/abstract-document-exporters/__tests__/pdf/tmp/Single textrun with End alignment.pdf +113 -0
  555. package/src/abstract-document-exporters/__tests__/pdf/tmp/Single textrun with Start alignment that linebreaks.pdf +121 -0
  556. package/src/abstract-document-exporters/__tests__/pdf/tmp/Single textrun with Start alignment.pdf +113 -0
  557. package/src/abstract-document-exporters/__tests__/pdf/tmp/Single textrun.pdf +113 -0
  558. package/src/abstract-document-exporters/__tests__/pdf/tmp/Table of content separator.pdf +157 -0
  559. package/src/abstract-document-exporters/__tests__/pdf/tmp/hello.pdf +152 -0
  560. package/src/abstract-document-exporters/__tests__/pdf/tmp/world.pdf +113 -0
  561. package/src/abstract-document-exporters/docx/document-container.ts +18 -18
  562. package/src/abstract-document-exporters/docx/docx-constants.ts +46 -46
  563. package/src/abstract-document-exporters/docx/docx-document-renderer.ts +1084 -1084
  564. package/src/abstract-document-exporters/docx/ref-container.ts +53 -53
  565. package/src/abstract-document-exporters/docx/string-utils.ts +39 -39
  566. package/src/abstract-document-exporters/docx/xml-writer.ts +333 -388
  567. package/src/abstract-document-exporters/docx2/render-image.ts +159 -159
  568. package/src/abstract-document-exporters/docx2/render.ts +476 -554
  569. package/src/abstract-document-exporters/index.ts +5 -5
  570. package/src/abstract-document-exporters/pdf/font.ts +67 -88
  571. package/src/abstract-document-exporters/pdf/measure.ts +410 -364
  572. package/src/abstract-document-exporters/pdf/paginate.ts +337 -337
  573. package/src/abstract-document-exporters/pdf/pre-process.ts +363 -363
  574. package/src/abstract-document-exporters/pdf/render-image.ts +189 -166
  575. package/src/abstract-document-exporters/pdf/render.ts +752 -621
  576. package/src/abstract-document-exporters/pdf/update-refs.ts +163 -163
  577. package/src/abstract-document-exporters/shared/get_resources.ts +71 -71
  578. package/src/abstract-document-jsx/index.ts +86 -94
  579. package/src/index.ts +5 -5
  580. package/lib/_tests_/abstract-document/hello-world-abstract-doc.d.ts.map +0 -1
  581. package/lib/_tests_/abstract-document/model-builder._test.d.ts.map +0 -1
  582. package/lib/_tests_/abstract-document/model-builder._test.js.map +0 -1
  583. package/lib/_tests_/abstract-document-exporters/docx/docx-exporter._test.d.ts +0 -1
  584. package/lib/_tests_/abstract-document-exporters/docx/docx-exporter._test.d.ts.map +0 -1
  585. package/lib/_tests_/abstract-document-exporters/docx/docx-exporter._test.js +0 -385
  586. package/lib/_tests_/abstract-document-exporters/docx/docx-exporter._test.js.map +0 -1
  587. package/lib/_tests_/abstract-document-exporters/docx/docx.test.d.ts +0 -2
  588. package/lib/_tests_/abstract-document-exporters/docx/docx.test.d.ts.map +0 -1
  589. package/lib/_tests_/abstract-document-exporters/docx/docx.test.js +0 -96
  590. package/lib/_tests_/abstract-document-exporters/docx/docx.test.js.map +0 -1
  591. package/lib/_tests_/abstract-document-exporters/docx/hello-world-docx.d.ts +0 -6
  592. package/lib/_tests_/abstract-document-exporters/docx/hello-world-docx.d.ts.map +0 -1
  593. package/lib/_tests_/abstract-document-exporters/docx/hello-world-docx.js +0 -83
  594. package/lib/_tests_/abstract-document-exporters/docx/hello-world-docx.js.map +0 -1
  595. package/lib/_tests_/abstract-document-exporters/docx/xml-writer.test.d.ts +0 -2
  596. package/lib/_tests_/abstract-document-exporters/docx/xml-writer.test.d.ts.map +0 -1
  597. package/lib/_tests_/abstract-document-exporters/docx/xml-writer.test.js +0 -88
  598. package/lib/_tests_/abstract-document-exporters/docx/xml-writer.test.js.map +0 -1
  599. package/lib/_tests_/abstract-document-exporters/pdf/diaq._test.d.ts +0 -1
  600. package/lib/_tests_/abstract-document-exporters/pdf/diaq._test.d.ts.map +0 -1
  601. package/lib/_tests_/abstract-document-exporters/pdf/diaq._test.js +0 -92
  602. package/lib/_tests_/abstract-document-exporters/pdf/diaq._test.js.map +0 -1
  603. package/lib/_tests_/abstract-document-exporters/pdf/pdf-exporter.test.d.ts +0 -2
  604. package/lib/_tests_/abstract-document-exporters/pdf/pdf-exporter.test.d.ts.map +0 -1
  605. package/lib/_tests_/abstract-document-exporters/pdf/pdf-exporter.test.js +0 -717
  606. package/lib/_tests_/abstract-document-exporters/pdf/pdf-exporter.test.js.map +0 -1
  607. package/lib/_tests_/abstract-document-exporters/test-utils/diaq-reports/common.d.ts +0 -34
  608. package/lib/_tests_/abstract-document-exporters/test-utils/diaq-reports/common.d.ts.map +0 -1
  609. package/lib/_tests_/abstract-document-exporters/test-utils/diaq-reports/common.js +0 -43
  610. package/lib/_tests_/abstract-document-exporters/test-utils/diaq-reports/common.js.map +0 -1
  611. package/lib/_tests_/abstract-document-exporters/test-utils/diaq-reports/product-description.d.ts +0 -1
  612. package/lib/_tests_/abstract-document-exporters/test-utils/diaq-reports/product-description.d.ts.map +0 -1
  613. package/lib/_tests_/abstract-document-exporters/test-utils/diaq-reports/product-description.js +0 -108
  614. package/lib/_tests_/abstract-document-exporters/test-utils/diaq-reports/product-description.js.map +0 -1
  615. package/lib/_tests_/abstract-document-exporters/test-utils/example-document.d.ts +0 -1
  616. package/lib/_tests_/abstract-document-exporters/test-utils/example-document.d.ts.map +0 -1
  617. package/lib/_tests_/abstract-document-exporters/test-utils/example-document.js +0 -233
  618. package/lib/_tests_/abstract-document-exporters/test-utils/example-document.js.map +0 -1
  619. package/lib/_tests_/abstract-document-exporters/test-utils/textrun.d.ts +0 -1
  620. package/lib/_tests_/abstract-document-exporters/test-utils/textrun.d.ts.map +0 -1
  621. package/lib/_tests_/abstract-document-exporters/test-utils/textrun.js +0 -194
  622. package/lib/_tests_/abstract-document-exporters/test-utils/textrun.js.map +0 -1
  623. package/src/_tests_/abstract-document-exporters/docx/docx-exporter._test.ts +0 -385
  624. package/src/_tests_/abstract-document-exporters/docx/docx.test.ts +0 -84
  625. package/src/_tests_/abstract-document-exporters/docx/hello-world-docx.ts +0 -83
  626. package/src/_tests_/abstract-document-exporters/docx/xml-writer.test.ts +0 -101
  627. package/src/_tests_/abstract-document-exporters/pdf/diaq._test.ts +0 -91
  628. package/src/_tests_/abstract-document-exporters/pdf/pdf-exporter.test.ts +0 -795
  629. package/src/_tests_/abstract-document-exporters/test-utils/diaq-reports/common.ts +0 -84
  630. package/src/_tests_/abstract-document-exporters/test-utils/diaq-reports/company-logo.png +0 -0
  631. package/src/_tests_/abstract-document-exporters/test-utils/diaq-reports/product-description.ts +0 -108
  632. package/src/_tests_/abstract-document-exporters/test-utils/diaq-reports/product-image.jpeg +0 -0
  633. package/src/_tests_/abstract-document-exporters/test-utils/example-document.ts +0 -232
  634. package/src/_tests_/abstract-document-exporters/test-utils/googlelogo.png +0 -0
  635. package/src/_tests_/abstract-document-exporters/test-utils/textrun.ts +0 -194
  636. package/src/_tests_/fonts/ARIALN.TTF +0 -0
  637. package/src/_tests_/fonts/ARIALNB.TTF +0 -0
  638. package/src/_tests_/fonts/ARIALNBI.TTF +0 -0
  639. package/src/_tests_/fonts/ARIALNI.TTF +0 -0
  640. package/src/_tests_/fonts/Arial-Bold.ttf +0 -0
  641. package/src/_tests_/fonts/Arial-BoldOblique.ttf +0 -0
  642. package/src/_tests_/fonts/Arial-Oblique.ttf +0 -0
  643. package/src/_tests_/fonts/DaxlinePro-Regular_13131.ttf +0 -0
  644. package/src/_tests_/fonts/arial.ttf +0 -0
  645. package/src/_tests_/fonts/arialbd.ttf +0 -0
  646. package/src/_tests_/fonts/arialbi.ttf +0 -0
  647. package/src/_tests_/fonts/ariali.ttf +0 -0
  648. package/src/_tests_/fonts/ariblk.ttf +0 -0
  649. package/src/_tests_/images/diffusers.png +0 -0
@@ -1,621 +1,752 @@
1
- import * as AD from "../../abstract-document/index";
2
- import { preProcess } from "./pre-process";
3
- import { measure, measurePages } from "./measure";
4
- import { paginate, Page } from "./paginate";
5
- import { updatePageRefs } from "./update-refs";
6
- import BlobStream from "blob-stream";
7
- import { renderImage } from "./render-image";
8
- import { registerFonts, getFontName } from "./font";
9
-
10
- //tslint:disable
11
-
12
- export function exportToHTML5Blob(
13
- // tslint:disable-next-line:no-any
14
- pdfKit: any,
15
- doc: AD.AbstractDoc.AbstractDoc
16
- ): Promise<Blob> {
17
- return new Promise((resolve) => {
18
- const stream = BlobStream();
19
- exportToStream(pdfKit, stream, doc);
20
- stream.on("finish", () => {
21
- const blob = stream.toBlob("application/pdf");
22
- resolve(blob);
23
- });
24
- });
25
- }
26
-
27
- /**
28
- * On the client side the stream can be a BlobStream from the blob-stream package.
29
- * On the server-side the stream can be a file stream from the fs package.
30
- * @param pdfKit
31
- * @param blobStream
32
- * @param doc
33
- */
34
- export function exportToStream(pdfKit: any, blobStream: {}, doc: AD.AbstractDoc.AbstractDoc): void {
35
- const PDFDocument = pdfKit;
36
- const document = preProcess(doc);
37
-
38
- let pdf = new PDFDocument({
39
- compress: false,
40
- autoFirstPage: false,
41
- bufferPages: true,
42
- }) as any;
43
-
44
- registerFonts((fontName: string, fontSource: AD.Font.FontSource) => pdf.registerFont(fontName, fontSource), document);
45
-
46
- const desiredSizes = measure(pdfKit, document);
47
- const pages = paginate(pdfKit, document, desiredSizes);
48
- const updatedPages = updatePageRefs(pages);
49
- const pageDesiredSizes = measurePages(pdfKit, document, updatedPages);
50
-
51
- for (let page of updatedPages) {
52
- renderPage(document, pdf, pageDesiredSizes, page);
53
- }
54
-
55
- pdf.pipe(blobStream);
56
- pdf.end();
57
- }
58
-
59
- // // Can only be used on the server-side
60
- // export function exportToNodeStream(pdfKit: any, doc: AD.AbstractDoc.AbstractDoc, stream: any): void {
61
- // const PDFDocument = pdfKit;
62
- // const document = preProcess(doc);
63
- // const desiredSizes = measure(pdfKit, document);
64
- // let pdf = new PDFDocument({compress: false, autoFirstPage: false}) as any;
65
- // registerFonts(
66
- // (fontName: string, fontSource: AD.Font.FontSource) =>
67
- // pdf.registerFont(fontName, fontSource),
68
- // document
69
- // );
70
- // let pageNo = 0;
71
- // for (let section of document.children){
72
- // pageNo = renderSection(document, pdf, desiredSizes, section, pageNo);
73
- // }
74
- // pdf.pipe(stream);
75
- // pdf.end();
76
- // }
77
-
78
- function renderPage(
79
- parentResources: AD.Resources.Resources,
80
- pdf: any,
81
- desiredSizes: Map<{}, AD.Size.Size>,
82
- page: Page
83
- ): void {
84
- const section = page.section;
85
- const style = section.page.style;
86
- const resources = AD.Resources.mergeResources([parentResources, section]);
87
- const pageHeight = AD.PageStyle.getHeight(style);
88
- const contentRect = addPage(pdf, page);
89
-
90
- page.namedDestionations.forEach((dest) => {
91
- if (pdf.addNamedDestination) {
92
- pdf.addNamedDestination(dest);
93
- }
94
- });
95
-
96
- const headerX = style.headerMargins.left;
97
- let headerY = style.headerMargins.top;
98
- for (let element of page.header) {
99
- const elementSize = getDesiredSize(element, desiredSizes);
100
- renderSectionElement(
101
- resources,
102
- pdf,
103
- desiredSizes,
104
- AD.Rect.create(headerX, headerY, elementSize.width, elementSize.height),
105
- element
106
- );
107
- headerY += elementSize.height;
108
- }
109
- headerY += style.headerMargins.bottom;
110
-
111
- const footerHeight = page.footer.reduce(
112
- (a, b) => a + getDesiredSize(b, desiredSizes).height,
113
- style.footerMargins.top + style.footerMargins.bottom
114
- );
115
- const footerX = style.footerMargins.left;
116
- let footerY = pageHeight - (footerHeight - style.footerMargins.top);
117
- for (let element of page.footer) {
118
- const elementSize = getDesiredSize(element, desiredSizes);
119
- renderSectionElement(
120
- resources,
121
- pdf,
122
- desiredSizes,
123
- AD.Rect.create(footerX, footerY, elementSize.width, elementSize.height),
124
- element
125
- );
126
- footerY += elementSize.height;
127
- }
128
-
129
- let y = contentRect.y;
130
- for (const element of page.elements) {
131
- const elementSize = getDesiredSize(element, desiredSizes);
132
- renderSectionElement(
133
- resources,
134
- pdf,
135
- desiredSizes,
136
- AD.Rect.create(contentRect.x, y, elementSize.width, elementSize.height),
137
- element
138
- );
139
- y += elementSize.height;
140
- }
141
- }
142
-
143
- function addPage(pdf: any, page: Page): AD.Rect.Rect {
144
- const section = page.section;
145
- const style = section.page.style;
146
- // This is rotated later depending on the orientation.
147
- const pageWidth = AD.PageStyle.getPaperWidth(style.paperSize);
148
- const pageHeight = AD.PageStyle.getPaperHeight(style.paperSize);
149
- const layout = style.orientation === "Landscape" ? "landscape" : "portrait";
150
- const pageOptions = {
151
- size: [pageWidth, pageHeight],
152
- layout: layout,
153
- margins: {
154
- top: 0,
155
- left: 0,
156
- right: 0,
157
- bottom: 0,
158
- },
159
- };
160
- pdf.addPage(pageOptions);
161
- return page.contentRect;
162
- }
163
-
164
- function renderSectionElement(
165
- parentResources: AD.Resources.Resources,
166
- pdf: {},
167
- desiredSizes: Map<{}, AD.Size.Size>,
168
- finalRect: AD.Rect.Rect,
169
- element: AD.SectionElement.SectionElement
170
- ) {
171
- const resources = AD.Resources.mergeResources([parentResources, element]);
172
- switch (element.type) {
173
- case "Paragraph":
174
- renderParagraph(resources, pdf, desiredSizes, finalRect, element);
175
- return;
176
- case "Table":
177
- renderTable(resources, pdf, desiredSizes, finalRect, element);
178
- return;
179
- case "Group":
180
- renderGroup(resources, pdf, desiredSizes, finalRect, element);
181
- return;
182
- }
183
- }
184
-
185
- function renderParagraph(
186
- resources: AD.Resources.Resources,
187
- pdf: {},
188
- desiredSizes: Map<{}, AD.Size.Size>,
189
- finalRect: AD.Rect.Rect,
190
- paragraph: AD.Paragraph.Paragraph
191
- ) {
192
- const style = AD.Resources.getStyle(
193
- undefined,
194
- paragraph.style,
195
- "ParagraphStyle",
196
- paragraph.styleName,
197
- resources
198
- ) as AD.ParagraphStyle.ParagraphStyle;
199
- const availableWidth = finalRect.width - (style.margins.left + style.margins.right);
200
-
201
- let rows: Array<Array<AD.Atom.Atom>> = [];
202
- let currentRow: Array<AD.Atom.Atom> = [];
203
- let currentWidth = 0;
204
- for (const atom of paragraph.children) {
205
- const atomSize = getDesiredSize(atom, desiredSizes);
206
- currentRow.push(atom);
207
- currentWidth += atomSize.width;
208
- if (currentWidth + atomSize.width >= availableWidth) {
209
- rows.push(currentRow);
210
- currentRow = [];
211
- currentWidth = 0;
212
- }
213
- }
214
- if (currentRow.length > 0)
215
- // Add any remaning children to a new row.
216
- rows.push(currentRow);
217
-
218
- let y = finalRect.y + style.margins.top;
219
-
220
- for (let row of rows) {
221
- if (row.length === 0) {
222
- continue;
223
- }
224
- const rowWidth = row.reduce((a, b) => a + getDesiredSize(b, desiredSizes).width, 0);
225
- const startX = finalRect.x + style.margins.left;
226
-
227
- const atomSize = getDesiredSize(row[0], desiredSizes);
228
- //We need to use pdfKits alignment if theres only one atom in the row, because then theres a risk of it linebreaking. If there are multiple lines we need to center each line
229
- if (atomSize?.availableWidth !== undefined && row.length === 1) {
230
- renderAtom(
231
- resources,
232
- pdf,
233
- AD.Rect.create(startX, y, availableWidth, atomSize.height),
234
- style.textStyle,
235
- row[0],
236
- parseAlignment(style.alignment),
237
- atomSize.width
238
- );
239
- y += atomSize.height;
240
- } else {
241
- let x = startX;
242
- if (style.alignment === "Center") x += 0.5 * (availableWidth - rowWidth);
243
- else if (style.alignment === "End") x += availableWidth - rowWidth;
244
- let rowHeight = 0;
245
- for (const atom of row) {
246
- const atomSize = getDesiredSize(atom, desiredSizes);
247
- renderAtom(
248
- resources,
249
- pdf,
250
- AD.Rect.create(x, y, atomSize.availableWidth ?? atomSize.width, atomSize.height),
251
- style.textStyle,
252
- atom,
253
- "left",
254
- atomSize.width
255
- );
256
- x += atomSize.width;
257
- rowHeight = Math.max(rowHeight, atomSize.height);
258
- }
259
-
260
- y += rowHeight;
261
- }
262
- }
263
- }
264
-
265
- function parseAlignment(paragraphAlignment: AD.ParagraphStyle.TextAlignment | undefined): AD.TextStyle.TextAlignment {
266
- switch (paragraphAlignment) {
267
- case "Start":
268
- return "left";
269
- case "Center":
270
- return "center";
271
- case "End":
272
- return "right";
273
- case "Justify":
274
- return "justify";
275
- default:
276
- return "left";
277
- }
278
- }
279
-
280
- function renderGroup(
281
- resources: AD.Resources.Resources,
282
- pdf: {},
283
- desiredSizes: Map<{}, AD.Size.Size>,
284
- finalRect: AD.Rect.Rect,
285
- group: AD.Group.Group
286
- ) {
287
- let y = finalRect.y;
288
- for (const element of group.children) {
289
- const elementSize = getDesiredSize(element, desiredSizes);
290
- renderSectionElement(
291
- resources,
292
- pdf,
293
- desiredSizes,
294
- AD.Rect.create(finalRect.x, y, elementSize.width, elementSize.height),
295
- element
296
- );
297
- y += elementSize.height;
298
- }
299
- }
300
-
301
- function renderAtom(
302
- resources: AD.Resources.Resources,
303
- pdf: {},
304
- finalRect: AD.Rect.Rect,
305
- textStyle: AD.TextStyle.TextStyle,
306
- atom: AD.Atom.Atom,
307
- alignment: AD.TextStyle.TextAlignment,
308
- measureTextWidth: number
309
- ): void {
310
- switch (atom.type) {
311
- case "TextField":
312
- renderTextField(resources, pdf, finalRect, textStyle, atom, "left");
313
- return;
314
- case "TextRun":
315
- renderTextRun(resources, pdf, finalRect, textStyle, atom, alignment);
316
- return;
317
- case "Image":
318
- renderImage(resources, pdf, finalRect, atom, textStyle);
319
- return;
320
- case "HyperLink":
321
- renderHyperLink(resources, pdf, finalRect, textStyle, atom, alignment, measureTextWidth);
322
- return;
323
- case "TocSeparator":
324
- renderTocSeparator(pdf, finalRect, textStyle);
325
- return;
326
- case "LinkTarget":
327
- return;
328
- }
329
- }
330
-
331
- function renderTextField(
332
- resources: AD.Resources.Resources,
333
- pdf: {},
334
- finalRect: AD.Rect.Rect,
335
- textStyle: AD.TextStyle.TextStyle,
336
- textField: AD.TextField.TextField,
337
- alignment: AD.TextStyle.TextAlignment
338
- ): void {
339
- const style = AD.Resources.getStyle(
340
- textStyle,
341
- textField.style,
342
- "TextStyle",
343
- textField.styleName,
344
- resources
345
- ) as AD.TextStyle.TextStyle;
346
- switch (textField.fieldType) {
347
- case "Date":
348
- drawText(pdf, finalRect, style, new Date(Date.now()).toDateString(), alignment);
349
- return;
350
- case "PageNumber":
351
- case "TotalPages":
352
- case "PageNumberOf":
353
- if (textField.text) {
354
- drawText(pdf, finalRect, style, textField.text, alignment);
355
- }
356
- return;
357
- }
358
- }
359
-
360
- function renderTextRun(
361
- resources: AD.Resources.Resources,
362
- pdf: {},
363
- finalRect: AD.Rect.Rect,
364
- textStyle: AD.TextStyle.TextStyle,
365
- textRun: AD.TextRun.TextRun,
366
- alignment: AD.TextStyle.TextAlignment
367
- ) {
368
- const style = AD.Resources.getNestedStyle(
369
- textStyle,
370
- textRun.style,
371
- "TextStyle",
372
- textRun.styleName,
373
- resources,
374
- textRun.nestedStyleNames || []
375
- ) as AD.TextStyle.TextStyle;
376
- const textAlignment = style.alignment ? style.alignment : alignment;
377
- drawText(pdf, finalRect, style, textRun.text, textAlignment);
378
- }
379
-
380
- function renderHyperLink(
381
- resources: AD.Resources.Resources,
382
- pdf: {},
383
- finalRect: AD.Rect.Rect,
384
- textStyle: AD.TextStyle.TextStyle,
385
- hyperLink: AD.HyperLink.HyperLink,
386
- alignment: AD.TextStyle.TextAlignment,
387
- measureTextWidth: number
388
- ) {
389
- const style = AD.Resources.getStyle(
390
- textStyle,
391
- hyperLink.style,
392
- "TextStyle",
393
- hyperLink.styleName,
394
- resources
395
- ) as AD.TextStyle.TextStyle;
396
- const textAlignment = style.alignment ? style.alignment : alignment;
397
- drawHyperLink(pdf, finalRect, style, hyperLink, textAlignment, measureTextWidth);
398
- }
399
-
400
- function renderTocSeparator(pdf: {}, finalRect: AD.Rect.Rect, textStyle: AD.TextStyle.TextStyle) {
401
- drawDottedLine(pdf, finalRect, textStyle);
402
- }
403
-
404
- function drawHyperLink(
405
- pdf: any,
406
- finalRect: AD.Rect.Rect,
407
- textStyle: AD.TextStyle.TextStyle,
408
- hyperLink: AD.HyperLink.HyperLink,
409
- alignment: AD.TextStyle.TextAlignment,
410
- measureTextWidth: number
411
- ) {
412
- const font = getFontName(textStyle);
413
- const isInternalLink = hyperLink.target.startsWith("#") && !hyperLink.target.startsWith("#page=");
414
- const fontSize = AD.TextStyle.calculateFontSize(textStyle, 10);
415
- const offset = calculateTextOffset(textStyle, fontSize);
416
-
417
- //the + 2 is compensation that's needed as pdfKit's widthOfString may return a slightly
418
- //lower value than the actual size due to loss of precision
419
- pdf
420
- .font(font)
421
- .fontSize(fontSize)
422
- .fillColor(textStyle.color || "blue")
423
- .text(hyperLink.text, finalRect.x, finalRect.y + offset, {
424
- width: finalRect.width,
425
- height: finalRect.height + 2,
426
- underline: textStyle.underline || false,
427
- align: alignment,
428
- goTo: isInternalLink ? hyperLink.target.substr(1) : undefined,
429
- indent: textStyle.indent || 0,
430
- ...(textStyle.lineGap !== undefined ? { lineGap: textStyle.lineGap } : {}),
431
- })
432
- .underline(finalRect.x, finalRect.y + 2, measureTextWidth, finalRect.height, {
433
- color: "blue",
434
- });
435
- if (!isInternalLink) {
436
- pdf.link(finalRect.x, finalRect.y, measureTextWidth, finalRect.height, hyperLink.target);
437
- }
438
- }
439
-
440
- function drawText(
441
- pdf: any,
442
- finalRect: AD.Rect.Rect,
443
- textStyle: AD.TextStyle.TextStyle,
444
- text: string,
445
- alignment: AD.TextStyle.TextAlignment
446
- ) {
447
- const font = getFontName(textStyle);
448
- const fontSize = AD.TextStyle.calculateFontSize(textStyle, 10);
449
- const offset = calculateTextOffset(textStyle, fontSize);
450
-
451
- //the + 2 is compensation that's needed as pdfKit's widthOfString may return a slightly
452
- //lower value than the actual size due to loss of precision
453
- pdf
454
- .font(font)
455
- .fontSize(fontSize)
456
- .fillColor(textStyle.color || "black")
457
- .text(text, finalRect.x, finalRect.y + offset, {
458
- width: finalRect.width,
459
- height: finalRect.height + 2,
460
- underline: textStyle.underline || false,
461
- align: alignment,
462
- indent: textStyle.indent || 0,
463
- ...(textStyle.lineGap !== undefined ? { lineGap: textStyle.lineGap } : {}),
464
- });
465
- }
466
-
467
- function drawDottedLine(pdf: any, finalRect: AD.Rect.Rect, textStyle: AD.TextStyle.TextStyle) {
468
- const font = getFontName(textStyle);
469
- const fontSize = AD.TextStyle.calculateFontSize(textStyle, 10);
470
- const offset = calculateTextOffset(textStyle, fontSize);
471
-
472
- const oneDotW = pdf.widthOfString(".", {
473
- width: finalRect.width,
474
- height: finalRect.height,
475
- characterSpacing: 5,
476
- });
477
- const twoDotsW = pdf.widthOfString("..", {
478
- width: finalRect.width,
479
- height: finalRect.height,
480
- characterSpacing: 5,
481
- });
482
- const numberOfDots = Math.floor((finalRect.width - oneDotW) / (twoDotsW - oneDotW)) + 1;
483
- if (twoDotsW - oneDotW === 0 || numberOfDots < 1) {
484
- return;
485
- }
486
-
487
- const dotsText = ".".repeat(numberOfDots);
488
- pdf
489
- .font(font)
490
- .fontSize(fontSize)
491
- .fillColor(textStyle.color || "black")
492
- .text(dotsText, finalRect.x, finalRect.y + offset, {
493
- width: finalRect.width,
494
- height: finalRect.height,
495
- align: "right",
496
- characterSpacing: 5,
497
- });
498
- }
499
-
500
- function renderTable(
501
- resources: AD.Resources.Resources,
502
- pdf: any,
503
- desiredSizes: Map<{}, AD.Size.Size>,
504
- finalRect: AD.Rect.Rect,
505
- table: AD.Table.Table
506
- ) {
507
- const style = AD.Resources.getStyle(
508
- undefined,
509
- table.style,
510
- "TableStyle",
511
- table.styleName,
512
- resources
513
- ) as AD.TableStyle.TableStyle;
514
- const availableWidth = finalRect.width;
515
- let y = finalRect.y + style.margins.top;
516
- for (let row of table.children) {
517
- const rowSize = getDesiredSize(row, desiredSizes);
518
- let x = finalRect.x + style.margins.left;
519
- if (style.alignment === "Center") x += 0.5 * (availableWidth - rowSize.width);
520
- else if (style.alignment === "Right") x += availableWidth - rowSize.width;
521
- const rowRect = AD.Rect.create(x, y, rowSize.width, rowSize.height);
522
- renderRow(resources, pdf, desiredSizes, rowRect, style.cellStyle, row);
523
- y += rowSize.height;
524
- }
525
- }
526
-
527
- function renderRow(
528
- resources: AD.Resources.Resources,
529
- pdf: {},
530
- desiredSizes: Map<{}, AD.Size.Size>,
531
- finalRect: AD.Rect.Rect,
532
- tableCellStyle: AD.TableCellStyle.TableCellStyle,
533
- row: AD.TableRow.TableRow
534
- ): void {
535
- let x = finalRect.x;
536
- const rowSize = getDesiredSize(row, desiredSizes);
537
- for (const cell of row.children) {
538
- const cellSize = getDesiredSize(cell, desiredSizes);
539
- const cellRect = AD.Rect.create(x, finalRect.y, cellSize.width, rowSize.height);
540
- renderCell(resources, pdf, desiredSizes, cellRect, tableCellStyle, cell);
541
- x += cellSize.width;
542
- }
543
- }
544
-
545
- function renderCell(
546
- resources: AD.Resources.Resources,
547
- pdf: any,
548
- desiredSizes: Map<{}, AD.Size.Size>,
549
- finalRect: AD.Rect.Rect,
550
- tableCellStyle: AD.TableCellStyle.TableCellStyle,
551
- cell: AD.TableCell.TableCell
552
- ): void {
553
- const style = AD.Resources.getStyle(
554
- tableCellStyle,
555
- cell.style,
556
- "TableCellStyle",
557
- cell.styleName,
558
- resources
559
- ) as AD.TableCellStyle.TableCellStyle;
560
- if (style.background) {
561
- pdf.rect(finalRect.x, finalRect.y, finalRect.width, finalRect.height).fill(style.background);
562
- }
563
-
564
- let x = finalRect.x + style.padding.left;
565
- const availableHeight = finalRect.height;
566
- let contentHeight = cell.children.map((c) => getDesiredSize(c, desiredSizes).height).reduce((a, b) => a + b, 0);
567
- let y = finalRect.y + style.padding.top;
568
- if (style.verticalAlignment === "Middle")
569
- y += 0.5 * (availableHeight - contentHeight - style.padding.top - style.padding.bottom);
570
- else if (style.verticalAlignment === "Bottom")
571
- y += availableHeight - contentHeight - style.padding.top - style.padding.bottom;
572
-
573
- for (const element of cell.children) {
574
- const elementSize = getDesiredSize(element, desiredSizes);
575
- const elementRect = AD.Rect.create(x, y, elementSize.width, elementSize.height);
576
- renderSectionElement(resources, pdf, desiredSizes, elementRect, element);
577
- y += elementSize.height;
578
- }
579
-
580
- if (style.borderColor) {
581
- if (style.borders.top) {
582
- pdf
583
- .moveTo(finalRect.x, finalRect.y)
584
- .lineTo(finalRect.x + finalRect.width, finalRect.y)
585
- .stroke(style.borderColor);
586
- }
587
- if (style.borders.bottom) {
588
- pdf
589
- .moveTo(finalRect.x, finalRect.y + finalRect.height)
590
- .lineTo(finalRect.x + finalRect.width, finalRect.y + finalRect.height)
591
- .stroke(style.borderColor);
592
- }
593
- if (style.borders.left) {
594
- pdf
595
- .moveTo(finalRect.x, finalRect.y)
596
- .lineTo(finalRect.x, finalRect.y + finalRect.height)
597
- .stroke(style.borderColor);
598
- }
599
- if (style.borders.right) {
600
- pdf
601
- .moveTo(finalRect.x + finalRect.width, finalRect.y)
602
- .lineTo(finalRect.x + finalRect.width, finalRect.y + finalRect.height)
603
- .stroke(style.borderColor);
604
- }
605
- }
606
- }
607
-
608
- function getDesiredSize(element: {}, desiredSizes: Map<{}, AD.Size.Size>): AD.Size.Size {
609
- const size = desiredSizes.get(element);
610
- if (size) {
611
- return size;
612
- }
613
- throw new Error("Could not find size for element!");
614
- }
615
-
616
- function calculateTextOffset(textStyle: AD.TextStyle.TextStyle, defaultFontSize: number): number {
617
- const defaultPosition = textStyle.superScript ? -0.5 : textStyle.subScript ? 0.5 : 0;
618
- const position = textStyle.verticalPosition !== undefined ? textStyle.verticalPosition : defaultPosition;
619
- const fontSize = AD.TextStyle.calculateFontSize(textStyle, defaultFontSize);
620
- return fontSize * position;
621
- }
1
+ import * as AD from "../../abstract-document/index";
2
+ import { preProcess } from "./pre-process";
3
+ import { measure, measurePages } from "./measure";
4
+ import { paginate, Page } from "./paginate";
5
+ import { updatePageRefs } from "./update-refs";
6
+ import BlobStream from "blob-stream";
7
+ import { renderImage } from "./render-image";
8
+ import { registerFonts, getFontName } from "./font";
9
+
10
+ export function exportToHTML5Blob(
11
+ // tslint:disable-next-line:no-any
12
+ pdfKit: any,
13
+ doc: AD.AbstractDoc.AbstractDoc
14
+ ): Promise<Blob> {
15
+ return new Promise((resolve) => {
16
+ const stream = BlobStream();
17
+ exportToStream(pdfKit, stream, doc);
18
+ stream.on("finish", () => {
19
+ const blob = stream.toBlob("application/pdf");
20
+ resolve(blob);
21
+ });
22
+ });
23
+ }
24
+
25
+ /**
26
+ * On the client side the stream can be a BlobStream from the blob-stream package.
27
+ * On the server-side the stream can be a file stream from the fs package.
28
+ * @param pdfKit
29
+ * @param blobStream
30
+ * @param doc
31
+ */
32
+ export function exportToStream(pdfKit: any, blobStream: {}, doc: AD.AbstractDoc.AbstractDoc): void {
33
+ const PDFDocument = pdfKit;
34
+ const document = preProcess(doc);
35
+
36
+ let pdf = new PDFDocument({
37
+ compress: false,
38
+ autoFirstPage: false,
39
+ bufferPages: true,
40
+ }) as any;
41
+
42
+ registerFonts((fontName: string, fontSource: AD.Font.FontSource) => pdf.registerFont(fontName, fontSource), document);
43
+
44
+ const desiredSizes = measure(pdfKit, document);
45
+ const pages = paginate(pdfKit, document, desiredSizes);
46
+ const updatedPages = updatePageRefs(pages);
47
+ const pageDesiredSizes = measurePages(pdfKit, document, updatedPages);
48
+
49
+ for (let page of updatedPages) {
50
+ renderPage(document, pdf, pageDesiredSizes, page);
51
+ }
52
+
53
+ pdf.pipe(blobStream);
54
+ pdf.end();
55
+ }
56
+
57
+ // // Can only be used on the server-side
58
+ // export function exportToNodeStream(pdfKit: any, doc: AD.AbstractDoc.AbstractDoc, stream: any): void {
59
+ // const PDFDocument = pdfKit;
60
+ // const document = preProcess(doc);
61
+ // const desiredSizes = measure(pdfKit, document);
62
+ // let pdf = new PDFDocument({compress: false, autoFirstPage: false}) as any;
63
+ // registerFonts(
64
+ // (fontName: string, fontSource: AD.Font.FontSource) =>
65
+ // pdf.registerFont(fontName, fontSource),
66
+ // document
67
+ // );
68
+ // let pageNo = 0;
69
+ // for (let section of document.children){
70
+ // pageNo = renderSection(document, pdf, desiredSizes, section, pageNo);
71
+ // }
72
+ // pdf.pipe(stream);
73
+ // pdf.end();
74
+ // }
75
+
76
+ function renderPage(
77
+ parentResources: AD.Resources.Resources,
78
+ pdf: any,
79
+ desiredSizes: Map<{}, AD.Size.Size>,
80
+ page: Page
81
+ ): void {
82
+ const section = page.section;
83
+ const style = section.page.style;
84
+ const resources = AD.Resources.mergeResources([parentResources, section]);
85
+ const pageHeight = AD.PageStyle.getHeight(style);
86
+ const contentRect = addPage(pdf, page);
87
+
88
+ page.namedDestionations.forEach((dest) => {
89
+ if (pdf.addNamedDestination) {
90
+ pdf.addNamedDestination(dest);
91
+ }
92
+ });
93
+
94
+ const headerX = style.headerMargins.left;
95
+ let headerY = style.headerMargins.top;
96
+ for (let element of page.header) {
97
+ const elementSize = getDesiredSize(element, desiredSizes);
98
+ renderSectionElement(
99
+ resources,
100
+ pdf,
101
+ desiredSizes,
102
+ AD.Rect.create(headerX, headerY, elementSize.width, elementSize.height),
103
+ element
104
+ );
105
+ headerY += elementSize.height;
106
+ }
107
+ headerY += style.headerMargins.bottom;
108
+
109
+ const footerHeight = page.footer.reduce(
110
+ (a, b) => a + getDesiredSize(b, desiredSizes).height,
111
+ style.footerMargins.top + style.footerMargins.bottom
112
+ );
113
+ const footerX = style.footerMargins.left;
114
+ let footerY = pageHeight - (footerHeight - style.footerMargins.top);
115
+ for (let element of page.footer) {
116
+ const elementSize = getDesiredSize(element, desiredSizes);
117
+ renderSectionElement(
118
+ resources,
119
+ pdf,
120
+ desiredSizes,
121
+ AD.Rect.create(footerX, footerY, elementSize.width, elementSize.height),
122
+ element
123
+ );
124
+ footerY += elementSize.height;
125
+ }
126
+
127
+ let y = contentRect.y;
128
+ for (const element of page.elements) {
129
+ const elementSize = getDesiredSize(element, desiredSizes);
130
+ renderSectionElement(
131
+ resources,
132
+ pdf,
133
+ desiredSizes,
134
+ AD.Rect.create(contentRect.x, y, elementSize.width, elementSize.height),
135
+ element
136
+ );
137
+ y += elementSize.height;
138
+ }
139
+ }
140
+
141
+ function addPage(pdf: any, page: Page): AD.Rect.Rect {
142
+ const section = page.section;
143
+ const style = section.page.style;
144
+ // This is rotated later depending on the orientation.
145
+ const pageWidth = AD.PageStyle.getPaperWidth(style.paperSize);
146
+ const pageHeight = AD.PageStyle.getPaperHeight(style.paperSize);
147
+ const layout = style.orientation === "Landscape" ? "landscape" : "portrait";
148
+ const pageOptions = {
149
+ size: [pageWidth, pageHeight],
150
+ layout: layout,
151
+ margins: {
152
+ top: 0,
153
+ left: 0,
154
+ right: 0,
155
+ bottom: 0,
156
+ },
157
+ };
158
+ pdf.addPage(pageOptions);
159
+ return page.contentRect;
160
+ }
161
+
162
+ function renderSectionElement(
163
+ parentResources: AD.Resources.Resources,
164
+ pdf: {},
165
+ desiredSizes: Map<{}, AD.Size.Size>,
166
+ finalRect: AD.Rect.Rect,
167
+ element: AD.SectionElement.SectionElement
168
+ ): void {
169
+ const resources = AD.Resources.mergeResources([parentResources, element]);
170
+ switch (element.type) {
171
+ case "Paragraph":
172
+ renderParagraph(resources, pdf, desiredSizes, finalRect, element);
173
+ return;
174
+ case "Table":
175
+ renderTable(resources, pdf, desiredSizes, finalRect, element);
176
+ return;
177
+ case "Group":
178
+ renderGroup(resources, pdf, desiredSizes, finalRect, element);
179
+ return;
180
+ }
181
+ }
182
+
183
+ function renderGroup(
184
+ resources: AD.Resources.Resources,
185
+ pdf: {},
186
+ desiredSizes: Map<{}, AD.Size.Size>,
187
+ finalRect: AD.Rect.Rect,
188
+ group: AD.Group.Group
189
+ ): void {
190
+ let y = finalRect.y;
191
+ for (const element of group.children) {
192
+ const elementSize = getDesiredSize(element, desiredSizes);
193
+ renderSectionElement(
194
+ resources,
195
+ pdf,
196
+ desiredSizes,
197
+ AD.Rect.create(finalRect.x, y, elementSize.width, elementSize.height),
198
+ element
199
+ );
200
+ y += elementSize.height;
201
+ }
202
+ }
203
+
204
+ function renderParagraph(
205
+ resources: AD.Resources.Resources,
206
+ pdf: {},
207
+ desiredSizes: Map<{}, AD.Size.Size>,
208
+ finalRect: AD.Rect.Rect,
209
+ paragraph: AD.Paragraph.Paragraph
210
+ ): void {
211
+ const style = AD.Resources.getStyle(
212
+ undefined,
213
+ paragraph.style,
214
+ "ParagraphStyle",
215
+ paragraph.styleName,
216
+ resources
217
+ ) as AD.ParagraphStyle.ParagraphStyle;
218
+ const availableWidth = finalRect.width - (style.margins.left + style.margins.right);
219
+
220
+ let rows: Array<Array<AD.Atom.Atom>> = [];
221
+ let currentRow: Array<AD.Atom.Atom> = [];
222
+ let currentWidth = 0;
223
+ let previousAtomType: string | undefined;
224
+ for (const atom of paragraph.children) {
225
+ if (!previousAtomType) {
226
+ // First atom
227
+ previousAtomType = atom.type;
228
+ currentRow.push(atom);
229
+ const atomSize = getDesiredSize(atom, desiredSizes);
230
+ currentWidth = atomSize.width;
231
+ continue;
232
+ }
233
+
234
+ if (atom.type !== "Image") {
235
+ // Atom is Text
236
+ if (previousAtomType === "Image") {
237
+ // Previous was image
238
+ rows.push(currentRow);
239
+ currentRow = [];
240
+ currentWidth = 0;
241
+ previousAtomType = atom.type;
242
+ }
243
+ currentRow.push(atom);
244
+ continue;
245
+ }
246
+
247
+ if (atom.type === "Image") {
248
+ // Atom is Image
249
+ if (previousAtomType !== "Image") {
250
+ // Previous was not image
251
+ rows.push(currentRow);
252
+ currentRow = [];
253
+ currentWidth = 0;
254
+ previousAtomType = atom.type;
255
+ }
256
+ const atomSize = getDesiredSize(atom, desiredSizes);
257
+ if (currentWidth + atomSize.width < availableWidth || currentRow.length === 0) {
258
+ // Image fits in current row/current row is empty
259
+ currentRow.push(atom);
260
+ currentWidth += atomSize.width;
261
+ } else {
262
+ // Image does not fit in current row
263
+ rows.push(currentRow);
264
+ currentRow = [atom];
265
+ currentWidth = atomSize.width;
266
+ }
267
+ }
268
+ }
269
+ if (currentRow.length > 0) {
270
+ // Add any remaning children to a new row.
271
+ rows.push(currentRow);
272
+ }
273
+
274
+ let y = finalRect.y + style.margins.top;
275
+
276
+ for (let row of rows) {
277
+ if (row.length === 0) {
278
+ continue;
279
+ }
280
+
281
+ const rowWidth = row.reduce((a, b) => a + getDesiredSize(b, desiredSizes).width, 0);
282
+ let x = finalRect.x;
283
+
284
+ if (row.length > 1 || row[0].type === "Image") {
285
+ // Using continued with alignment "center" or "right" is broken:
286
+ // https://github.com/foliojs/pdfkit/issues/240
287
+ // Therefore we have to position it ourself
288
+ // NOTE: Texts with multiple atoms with width over the available width are not supported.
289
+ if (style.alignment === "Center") {
290
+ x += 0.5 * (availableWidth - rowWidth);
291
+ } else if (style.alignment === "End") {
292
+ x += availableWidth - rowWidth;
293
+ }
294
+ }
295
+
296
+ let rowHeight = 0;
297
+
298
+ const lastIndex = row.length - 1;
299
+ for (const [i, atom] of row.entries()) {
300
+ const atomSize = getDesiredSize(atom, desiredSizes);
301
+ renderAtom(
302
+ resources,
303
+ pdf,
304
+ AD.Rect.create(x, y, atomSize.width, atomSize.height),
305
+ style.textStyle,
306
+ atom,
307
+ parseAlignment(style.alignment),
308
+ availableWidth,
309
+ i === 0,
310
+ i === lastIndex
311
+ );
312
+
313
+ x += atomSize.width;
314
+ rowHeight = Math.max(rowHeight, atomSize.height);
315
+ }
316
+
317
+ y += rowHeight;
318
+ }
319
+ }
320
+
321
+ function parseAlignment(paragraphAlignment: AD.ParagraphStyle.TextAlignment | undefined): AD.TextStyle.TextAlignment {
322
+ switch (paragraphAlignment) {
323
+ case "Start":
324
+ return "left";
325
+ case "Center":
326
+ return "center";
327
+ case "End":
328
+ return "right";
329
+ case "Justify":
330
+ return "justify";
331
+ default:
332
+ return "left";
333
+ }
334
+ }
335
+
336
+ function renderAtom(
337
+ resources: AD.Resources.Resources,
338
+ pdf: {},
339
+ finalRect: AD.Rect.Rect,
340
+ textStyle: AD.TextStyle.TextStyle,
341
+ atom: AD.Atom.Atom,
342
+ alignment: AD.TextStyle.TextAlignment,
343
+ availableWidth: number,
344
+ isFirstAtom: boolean,
345
+ isLastAtom: boolean
346
+ ): void {
347
+ switch (atom.type) {
348
+ case "TextField":
349
+ renderTextField(resources, pdf, finalRect, textStyle, atom, alignment, isFirstAtom, isLastAtom, availableWidth);
350
+ return;
351
+ case "TextRun":
352
+ renderTextRun(resources, pdf, finalRect, textStyle, atom, alignment, isFirstAtom, isLastAtom, availableWidth);
353
+ return;
354
+ case "Image":
355
+ renderImage(resources, pdf, finalRect, textStyle, atom);
356
+ return;
357
+ case "HyperLink":
358
+ renderHyperLink(resources, pdf, finalRect, textStyle, atom, alignment, isFirstAtom, isLastAtom, availableWidth);
359
+ return;
360
+ case "TocSeparator":
361
+ renderTocSeparator(pdf, finalRect, textStyle);
362
+ return;
363
+ case "LinkTarget":
364
+ return;
365
+ }
366
+ }
367
+
368
+ function renderTextField(
369
+ resources: AD.Resources.Resources,
370
+ pdf: {},
371
+ finalRect: AD.Rect.Rect,
372
+ textStyle: AD.TextStyle.TextStyle,
373
+ textField: AD.TextField.TextField,
374
+ alignment: AD.TextStyle.TextAlignment,
375
+ isFirstAtom: boolean,
376
+ isLastAtom: boolean,
377
+ availableWidth: number
378
+ ): void {
379
+ const style = AD.Resources.getStyle(
380
+ textStyle,
381
+ textField.style,
382
+ "TextStyle",
383
+ textField.styleName,
384
+ resources
385
+ ) as AD.TextStyle.TextStyle;
386
+ switch (textField.fieldType) {
387
+ case "Date":
388
+ drawText(
389
+ pdf,
390
+ finalRect,
391
+ style,
392
+ new Date(Date.now()).toDateString(),
393
+ alignment,
394
+ isFirstAtom,
395
+ isLastAtom,
396
+ availableWidth
397
+ );
398
+ return;
399
+ case "PageNumber":
400
+ case "TotalPages":
401
+ case "PageNumberOf":
402
+ if (textField.text) {
403
+ drawText(pdf, finalRect, style, textField.text, alignment, isFirstAtom, isLastAtom, availableWidth);
404
+ }
405
+ return;
406
+ }
407
+ }
408
+
409
+ function renderTextRun(
410
+ resources: AD.Resources.Resources,
411
+ pdf: {},
412
+ finalRect: AD.Rect.Rect,
413
+ textStyle: AD.TextStyle.TextStyle,
414
+ textRun: AD.TextRun.TextRun,
415
+ alignment: AD.TextStyle.TextAlignment,
416
+ isFirstAtom: boolean,
417
+ isLastAtom: boolean,
418
+ availableWidth: number
419
+ ): void {
420
+ const style = AD.Resources.getNestedStyle(
421
+ textStyle,
422
+ textRun.style,
423
+ "TextStyle",
424
+ textRun.styleName,
425
+ resources,
426
+ textRun.nestedStyleNames || []
427
+ ) as AD.TextStyle.TextStyle;
428
+ const textAlignment = style.alignment ? style.alignment : alignment;
429
+ drawText(pdf, finalRect, style, textRun.text, textAlignment, isFirstAtom, isLastAtom, availableWidth);
430
+ }
431
+
432
+ function renderHyperLink(
433
+ resources: AD.Resources.Resources,
434
+ pdf: {},
435
+ finalRect: AD.Rect.Rect,
436
+ textStyle: AD.TextStyle.TextStyle,
437
+ hyperLink: AD.HyperLink.HyperLink,
438
+ alignment: AD.TextStyle.TextAlignment,
439
+ isFirstAtom: boolean,
440
+ isLastAtom: boolean,
441
+ availableWidth: number
442
+ ): void {
443
+ const style = AD.Resources.getStyle(
444
+ textStyle,
445
+ hyperLink.style,
446
+ "TextStyle",
447
+ hyperLink.styleName,
448
+ resources
449
+ ) as AD.TextStyle.TextStyle;
450
+ const textAlignment = style.alignment ? style.alignment : alignment;
451
+ drawHyperLink(pdf, finalRect, style, hyperLink, textAlignment, isFirstAtom, isLastAtom, availableWidth);
452
+ }
453
+
454
+ function renderTocSeparator(pdf: {}, finalRect: AD.Rect.Rect, textStyle: AD.TextStyle.TextStyle): void {
455
+ drawDottedLine(pdf, finalRect, textStyle);
456
+ }
457
+
458
+ function drawHyperLink(
459
+ pdf: any,
460
+ finalRect: AD.Rect.Rect,
461
+ textStyle: AD.TextStyle.TextStyle,
462
+ hyperLink: AD.HyperLink.HyperLink,
463
+ alignment: AD.TextStyle.TextAlignment,
464
+ isFirstAtom: boolean,
465
+ isLastAtom: boolean,
466
+ availableWidth: number
467
+ ): void {
468
+ const font = getFontName(textStyle);
469
+ const isInternalLink = hyperLink.target.startsWith("#") && !hyperLink.target.startsWith("#page=");
470
+ const fontSize = AD.TextStyle.calculateFontSize(textStyle, 10);
471
+ const isSingleAtom = isFirstAtom && isLastAtom;
472
+ let xUnderline = finalRect.x;
473
+ if (alignment === "center") {
474
+ xUnderline += 0.5 * (availableWidth - finalRect.width);
475
+ } else if (alignment === "right") {
476
+ xUnderline += availableWidth - finalRect.width;
477
+ }
478
+
479
+ pdf
480
+ .font(font)
481
+ .fontSize(fontSize)
482
+ .fillColor(textStyle.color || "blue");
483
+
484
+ applyTextOffset(pdf, textStyle);
485
+
486
+ // Using continued with alignment "center" or "right" is broken:
487
+ // https://github.com/foliojs/pdfkit/issues/240
488
+ // so always set alignment to left and handle it through an x offset
489
+ // if its just a single atom then we can use its alignment to partially support multi-line texts for other alignments
490
+ if (isFirstAtom || alignment !== "left") {
491
+ pdf
492
+ .text(hyperLink.text, finalRect.x, finalRect.y, {
493
+ width: availableWidth,
494
+ underline: textStyle.underline || false,
495
+ align: isSingleAtom ? alignment : "left",
496
+ goTo: isInternalLink ? hyperLink.target.substr(1) : undefined,
497
+ indent: textStyle.indent || 0,
498
+ continued: alignment !== "left" ? false : !isLastAtom,
499
+ ...(textStyle.lineGap !== undefined ? { lineGap: textStyle.lineGap } : {}),
500
+ })
501
+ .underline(xUnderline, finalRect.y + 2, finalRect.width, finalRect.height, {
502
+ align: isSingleAtom ? alignment : "left",
503
+ color: "blue",
504
+ });
505
+ } else {
506
+ pdf
507
+ .text(hyperLink.text, {
508
+ underline: textStyle.underline || false,
509
+ align: "left",
510
+ goTo: isInternalLink ? hyperLink.target.substr(1) : undefined,
511
+ indent: textStyle.indent || 0,
512
+ continued: !isLastAtom,
513
+ ...(textStyle.lineGap !== undefined ? { lineGap: textStyle.lineGap } : {}),
514
+ })
515
+ .underline(xUnderline, finalRect.y + 2, finalRect.width, finalRect.height, {
516
+ color: "blue",
517
+ });
518
+ }
519
+
520
+ resetTextOffset(pdf, textStyle);
521
+
522
+ if (!isInternalLink) {
523
+ pdf.link(xUnderline, finalRect.y, finalRect.width, finalRect.height, hyperLink.target);
524
+ }
525
+ }
526
+
527
+ function drawText(
528
+ pdf: any,
529
+ finalRect: AD.Rect.Rect,
530
+ textStyle: AD.TextStyle.TextStyle,
531
+ text: string,
532
+ alignment: AD.TextStyle.TextAlignment,
533
+ isFirstAtom: boolean,
534
+ isLastAtom: boolean,
535
+ availableWidth: number
536
+ ): void {
537
+ const font = getFontName(textStyle);
538
+ const fontSize = AD.TextStyle.calculateFontSize(textStyle, 10);
539
+ const isSingleAtom = isFirstAtom && isLastAtom;
540
+ pdf
541
+ .font(font)
542
+ .fontSize(fontSize)
543
+ .fillColor(textStyle.color || "black");
544
+
545
+ applyTextOffset(pdf, textStyle);
546
+
547
+ // Using continued with alignment "center" or "right" is broken:
548
+ // https://github.com/foliojs/pdfkit/issues/240
549
+ // so always set alignment to left and handle it through an x offset
550
+ // if its just a single atom then we can use its alignment to partially support multi-line texts for other alignments
551
+ if (isFirstAtom || alignment !== "left") {
552
+ pdf.text(text, finalRect.x, finalRect.y, {
553
+ width: availableWidth,
554
+ underline: textStyle.underline || false,
555
+ align: isSingleAtom ? alignment : "left",
556
+ indent: textStyle.indent || 0,
557
+ continued: alignment !== "left" ? false : !isLastAtom,
558
+ ...(textStyle.lineGap !== undefined ? { lineGap: textStyle.lineGap } : {}),
559
+ });
560
+ } else {
561
+ pdf.text(text, {
562
+ underline: textStyle.underline || false,
563
+ align: "left",
564
+ indent: textStyle.indent || 0,
565
+ continued: !isLastAtom,
566
+ ...(textStyle.lineGap !== undefined ? { lineGap: textStyle.lineGap } : {}),
567
+ });
568
+ }
569
+
570
+ resetTextOffset(pdf, textStyle);
571
+ }
572
+
573
+ function drawDottedLine(pdf: any, finalRect: AD.Rect.Rect, textStyle: AD.TextStyle.TextStyle): void {
574
+ const font = getFontName(textStyle);
575
+ const fontSize = AD.TextStyle.calculateFontSize(textStyle, 10);
576
+
577
+ const oneDotW = pdf.widthOfString(".", {
578
+ width: finalRect.width,
579
+ height: finalRect.height,
580
+ characterSpacing: 5,
581
+ });
582
+ const twoDotsW = pdf.widthOfString("..", {
583
+ width: finalRect.width,
584
+ height: finalRect.height,
585
+ characterSpacing: 5,
586
+ });
587
+ const numberOfDots = Math.floor((finalRect.width - oneDotW) / (twoDotsW - oneDotW)) + 1;
588
+ if (twoDotsW - oneDotW === 0 || numberOfDots < 1) {
589
+ return;
590
+ }
591
+
592
+ const dotsText = ".".repeat(numberOfDots);
593
+ pdf
594
+ .font(font)
595
+ .fontSize(fontSize)
596
+ .fillColor(textStyle.color || "black");
597
+
598
+ applyTextOffset(pdf, textStyle);
599
+
600
+ // Disable continued for the dotted line to get the positioning right
601
+ pdf.text("", {
602
+ continued: false,
603
+ goTo: undefined,
604
+ });
605
+ pdf.text(dotsText, finalRect.x, finalRect.y, {
606
+ width: finalRect.width,
607
+ height: finalRect.height,
608
+ align: "right",
609
+ characterSpacing: 5,
610
+ });
611
+ resetTextOffset(pdf, textStyle);
612
+ }
613
+
614
+ function renderTable(
615
+ resources: AD.Resources.Resources,
616
+ pdf: any,
617
+ desiredSizes: Map<{}, AD.Size.Size>,
618
+ finalRect: AD.Rect.Rect,
619
+ table: AD.Table.Table
620
+ ): void {
621
+ const style = AD.Resources.getStyle(
622
+ undefined,
623
+ table.style,
624
+ "TableStyle",
625
+ table.styleName,
626
+ resources
627
+ ) as AD.TableStyle.TableStyle;
628
+ const availableWidth = finalRect.width;
629
+ let y = finalRect.y + style.margins.top;
630
+ for (let row of table.children) {
631
+ const rowSize = getDesiredSize(row, desiredSizes);
632
+ let x = finalRect.x + style.margins.left;
633
+ if (style.alignment === "Center") x += 0.5 * (availableWidth - rowSize.width);
634
+ else if (style.alignment === "Right") x += availableWidth - rowSize.width;
635
+ const rowRect = AD.Rect.create(x, y, rowSize.width, rowSize.height);
636
+ renderRow(resources, pdf, desiredSizes, rowRect, style.cellStyle, row);
637
+ y += rowSize.height;
638
+ }
639
+ }
640
+
641
+ function renderRow(
642
+ resources: AD.Resources.Resources,
643
+ pdf: {},
644
+ desiredSizes: Map<{}, AD.Size.Size>,
645
+ finalRect: AD.Rect.Rect,
646
+ tableCellStyle: AD.TableCellStyle.TableCellStyle,
647
+ row: AD.TableRow.TableRow
648
+ ): void {
649
+ let x = finalRect.x;
650
+ const rowSize = getDesiredSize(row, desiredSizes);
651
+ for (const cell of row.children) {
652
+ const cellSize = getDesiredSize(cell, desiredSizes);
653
+ const cellRect = AD.Rect.create(x, finalRect.y, cellSize.width, rowSize.height);
654
+ renderCell(resources, pdf, desiredSizes, cellRect, tableCellStyle, cell);
655
+ x += cellSize.width;
656
+ }
657
+ }
658
+
659
+ function renderCell(
660
+ resources: AD.Resources.Resources,
661
+ pdf: any,
662
+ desiredSizes: Map<{}, AD.Size.Size>,
663
+ finalRect: AD.Rect.Rect,
664
+ tableCellStyle: AD.TableCellStyle.TableCellStyle,
665
+ cell: AD.TableCell.TableCell
666
+ ): void {
667
+ const style = AD.Resources.getStyle(
668
+ tableCellStyle,
669
+ cell.style,
670
+ "TableCellStyle",
671
+ cell.styleName,
672
+ resources
673
+ ) as AD.TableCellStyle.TableCellStyle;
674
+ if (style.background) {
675
+ pdf.rect(finalRect.x, finalRect.y, finalRect.width, finalRect.height).fill(style.background);
676
+ }
677
+
678
+ let x = finalRect.x + style.padding.left;
679
+ const availableHeight = finalRect.height;
680
+ let contentHeight = cell.children.map((c) => getDesiredSize(c, desiredSizes).height).reduce((a, b) => a + b, 0);
681
+ let y = finalRect.y + style.padding.top;
682
+ if (style.verticalAlignment === "Middle")
683
+ y += 0.5 * (availableHeight - contentHeight - style.padding.top - style.padding.bottom);
684
+ else if (style.verticalAlignment === "Bottom")
685
+ y += availableHeight - contentHeight - style.padding.top - style.padding.bottom;
686
+
687
+ for (const element of cell.children) {
688
+ const elementSize = getDesiredSize(element, desiredSizes);
689
+ const elementRect = AD.Rect.create(x, y, elementSize.width, elementSize.height);
690
+ renderSectionElement(resources, pdf, desiredSizes, elementRect, element);
691
+ y += elementSize.height;
692
+ }
693
+
694
+ if (style.borderColor) {
695
+ if (style.borders.top) {
696
+ pdf
697
+ .moveTo(finalRect.x, finalRect.y)
698
+ .lineTo(finalRect.x + finalRect.width, finalRect.y)
699
+ .stroke(style.borderColor);
700
+ }
701
+ if (style.borders.bottom) {
702
+ pdf
703
+ .moveTo(finalRect.x, finalRect.y + finalRect.height)
704
+ .lineTo(finalRect.x + finalRect.width, finalRect.y + finalRect.height)
705
+ .stroke(style.borderColor);
706
+ }
707
+ if (style.borders.left) {
708
+ pdf
709
+ .moveTo(finalRect.x, finalRect.y)
710
+ .lineTo(finalRect.x, finalRect.y + finalRect.height)
711
+ .stroke(style.borderColor);
712
+ }
713
+ if (style.borders.right) {
714
+ pdf
715
+ .moveTo(finalRect.x + finalRect.width, finalRect.y)
716
+ .lineTo(finalRect.x + finalRect.width, finalRect.y + finalRect.height)
717
+ .stroke(style.borderColor);
718
+ }
719
+ }
720
+ }
721
+
722
+ function getDesiredSize(element: {}, desiredSizes: Map<{}, AD.Size.Size>): AD.Size.Size {
723
+ const size = desiredSizes.get(element);
724
+ if (size) {
725
+ return size;
726
+ }
727
+ throw new Error("Could not find size for element!");
728
+ }
729
+
730
+ function applyTextOffset(pdf: any, textStyle: AD.TextStyle.TextStyle): void {
731
+ const offset = calculateTextOffset(textStyle);
732
+ if (offset < 0) {
733
+ pdf.moveDown(Math.abs(offset));
734
+ } else {
735
+ pdf.moveUp(offset);
736
+ }
737
+ }
738
+
739
+ function resetTextOffset(pdf: any, textStyle: AD.TextStyle.TextStyle): void {
740
+ const offset = calculateTextOffset(textStyle);
741
+ if (offset < 0) {
742
+ pdf.moveUp(Math.abs(offset));
743
+ } else {
744
+ pdf.moveDown(offset);
745
+ }
746
+ }
747
+
748
+ function calculateTextOffset(textStyle: AD.TextStyle.TextStyle): number {
749
+ const defaultPosition = textStyle.superScript ? -0.5 : textStyle.subScript ? 0.5 : 0;
750
+ const position = textStyle.verticalPosition !== undefined ? textStyle.verticalPosition : defaultPosition;
751
+ return position;
752
+ }