xfa_fonts.js 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. /**
  2. * @licstart The following is the entire license notice for the
  3. * Javascript code in this page
  4. *
  5. * Copyright 2022 Mozilla Foundation
  6. *
  7. * Licensed under the Apache License, Version 2.0 (the "License");
  8. * you may not use this file except in compliance with the License.
  9. * You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  12. *
  13. * Unless required by applicable law or agreed to in writing, software
  14. * distributed under the License is distributed on an "AS IS" BASIS,
  15. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  16. * See the License for the specific language governing permissions and
  17. * limitations under the License.
  18. *
  19. * @licend The above is the entire license notice for the
  20. * Javascript code in this page
  21. */
  22. "use strict";
  23. Object.defineProperty(exports, "__esModule", {
  24. value: true
  25. });
  26. exports.getXfaFontDict = getXfaFontDict;
  27. exports.getXfaFontName = getXfaFontName;
  28. var _calibri_factors = require("./calibri_factors.js");
  29. var _primitives = require("./primitives.js");
  30. var _helvetica_factors = require("./helvetica_factors.js");
  31. var _liberationsans_widths = require("./liberationsans_widths.js");
  32. var _myriadpro_factors = require("./myriadpro_factors.js");
  33. var _segoeui_factors = require("./segoeui_factors.js");
  34. var _core_utils = require("./core_utils.js");
  35. var _fonts_utils = require("./fonts_utils.js");
  36. const getXFAFontMap = (0, _core_utils.getLookupTableFactory)(function (t) {
  37. t["MyriadPro-Regular"] = t["PdfJS-Fallback-Regular"] = {
  38. name: "LiberationSans-Regular",
  39. factors: _myriadpro_factors.MyriadProRegularFactors,
  40. baseWidths: _liberationsans_widths.LiberationSansRegularWidths,
  41. baseMapping: _liberationsans_widths.LiberationSansRegularMapping,
  42. metrics: _myriadpro_factors.MyriadProRegularMetrics
  43. };
  44. t["MyriadPro-Bold"] = t["PdfJS-Fallback-Bold"] = {
  45. name: "LiberationSans-Bold",
  46. factors: _myriadpro_factors.MyriadProBoldFactors,
  47. baseWidths: _liberationsans_widths.LiberationSansBoldWidths,
  48. baseMapping: _liberationsans_widths.LiberationSansBoldMapping,
  49. metrics: _myriadpro_factors.MyriadProBoldMetrics
  50. };
  51. t["MyriadPro-It"] = t["MyriadPro-Italic"] = t["PdfJS-Fallback-Italic"] = {
  52. name: "LiberationSans-Italic",
  53. factors: _myriadpro_factors.MyriadProItalicFactors,
  54. baseWidths: _liberationsans_widths.LiberationSansItalicWidths,
  55. baseMapping: _liberationsans_widths.LiberationSansItalicMapping,
  56. metrics: _myriadpro_factors.MyriadProItalicMetrics
  57. };
  58. t["MyriadPro-BoldIt"] = t["MyriadPro-BoldItalic"] = t["PdfJS-Fallback-BoldItalic"] = {
  59. name: "LiberationSans-BoldItalic",
  60. factors: _myriadpro_factors.MyriadProBoldItalicFactors,
  61. baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths,
  62. baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping,
  63. metrics: _myriadpro_factors.MyriadProBoldItalicMetrics
  64. };
  65. t.ArialMT = t.Arial = t["Arial-Regular"] = {
  66. name: "LiberationSans-Regular",
  67. baseWidths: _liberationsans_widths.LiberationSansRegularWidths,
  68. baseMapping: _liberationsans_widths.LiberationSansRegularMapping
  69. };
  70. t["Arial-BoldMT"] = t["Arial-Bold"] = {
  71. name: "LiberationSans-Bold",
  72. baseWidths: _liberationsans_widths.LiberationSansBoldWidths,
  73. baseMapping: _liberationsans_widths.LiberationSansBoldMapping
  74. };
  75. t["Arial-ItalicMT"] = t["Arial-Italic"] = {
  76. name: "LiberationSans-Italic",
  77. baseWidths: _liberationsans_widths.LiberationSansItalicWidths,
  78. baseMapping: _liberationsans_widths.LiberationSansItalicMapping
  79. };
  80. t["Arial-BoldItalicMT"] = t["Arial-BoldItalic"] = {
  81. name: "LiberationSans-BoldItalic",
  82. baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths,
  83. baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping
  84. };
  85. t["Calibri-Regular"] = {
  86. name: "LiberationSans-Regular",
  87. factors: _calibri_factors.CalibriRegularFactors,
  88. baseWidths: _liberationsans_widths.LiberationSansRegularWidths,
  89. baseMapping: _liberationsans_widths.LiberationSansRegularMapping,
  90. metrics: _calibri_factors.CalibriRegularMetrics
  91. };
  92. t["Calibri-Bold"] = {
  93. name: "LiberationSans-Bold",
  94. factors: _calibri_factors.CalibriBoldFactors,
  95. baseWidths: _liberationsans_widths.LiberationSansBoldWidths,
  96. baseMapping: _liberationsans_widths.LiberationSansBoldMapping,
  97. metrics: _calibri_factors.CalibriBoldMetrics
  98. };
  99. t["Calibri-Italic"] = {
  100. name: "LiberationSans-Italic",
  101. factors: _calibri_factors.CalibriItalicFactors,
  102. baseWidths: _liberationsans_widths.LiberationSansItalicWidths,
  103. baseMapping: _liberationsans_widths.LiberationSansItalicMapping,
  104. metrics: _calibri_factors.CalibriItalicMetrics
  105. };
  106. t["Calibri-BoldItalic"] = {
  107. name: "LiberationSans-BoldItalic",
  108. factors: _calibri_factors.CalibriBoldItalicFactors,
  109. baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths,
  110. baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping,
  111. metrics: _calibri_factors.CalibriBoldItalicMetrics
  112. };
  113. t["Segoeui-Regular"] = {
  114. name: "LiberationSans-Regular",
  115. factors: _segoeui_factors.SegoeuiRegularFactors,
  116. baseWidths: _liberationsans_widths.LiberationSansRegularWidths,
  117. baseMapping: _liberationsans_widths.LiberationSansRegularMapping,
  118. metrics: _segoeui_factors.SegoeuiRegularMetrics
  119. };
  120. t["Segoeui-Bold"] = {
  121. name: "LiberationSans-Bold",
  122. factors: _segoeui_factors.SegoeuiBoldFactors,
  123. baseWidths: _liberationsans_widths.LiberationSansBoldWidths,
  124. baseMapping: _liberationsans_widths.LiberationSansBoldMapping,
  125. metrics: _segoeui_factors.SegoeuiBoldMetrics
  126. };
  127. t["Segoeui-Italic"] = {
  128. name: "LiberationSans-Italic",
  129. factors: _segoeui_factors.SegoeuiItalicFactors,
  130. baseWidths: _liberationsans_widths.LiberationSansItalicWidths,
  131. baseMapping: _liberationsans_widths.LiberationSansItalicMapping,
  132. metrics: _segoeui_factors.SegoeuiItalicMetrics
  133. };
  134. t["Segoeui-BoldItalic"] = {
  135. name: "LiberationSans-BoldItalic",
  136. factors: _segoeui_factors.SegoeuiBoldItalicFactors,
  137. baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths,
  138. baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping,
  139. metrics: _segoeui_factors.SegoeuiBoldItalicMetrics
  140. };
  141. t["Helvetica-Regular"] = t.Helvetica = {
  142. name: "LiberationSans-Regular",
  143. factors: _helvetica_factors.HelveticaRegularFactors,
  144. baseWidths: _liberationsans_widths.LiberationSansRegularWidths,
  145. baseMapping: _liberationsans_widths.LiberationSansRegularMapping,
  146. metrics: _helvetica_factors.HelveticaRegularMetrics
  147. };
  148. t["Helvetica-Bold"] = {
  149. name: "LiberationSans-Bold",
  150. factors: _helvetica_factors.HelveticaBoldFactors,
  151. baseWidths: _liberationsans_widths.LiberationSansBoldWidths,
  152. baseMapping: _liberationsans_widths.LiberationSansBoldMapping,
  153. metrics: _helvetica_factors.HelveticaBoldMetrics
  154. };
  155. t["Helvetica-Italic"] = {
  156. name: "LiberationSans-Italic",
  157. factors: _helvetica_factors.HelveticaItalicFactors,
  158. baseWidths: _liberationsans_widths.LiberationSansItalicWidths,
  159. baseMapping: _liberationsans_widths.LiberationSansItalicMapping,
  160. metrics: _helvetica_factors.HelveticaItalicMetrics
  161. };
  162. t["Helvetica-BoldItalic"] = {
  163. name: "LiberationSans-BoldItalic",
  164. factors: _helvetica_factors.HelveticaBoldItalicFactors,
  165. baseWidths: _liberationsans_widths.LiberationSansBoldItalicWidths,
  166. baseMapping: _liberationsans_widths.LiberationSansBoldItalicMapping,
  167. metrics: _helvetica_factors.HelveticaBoldItalicMetrics
  168. };
  169. });
  170. function getXfaFontName(name) {
  171. const fontName = (0, _fonts_utils.normalizeFontName)(name);
  172. const fontMap = getXFAFontMap();
  173. return fontMap[fontName];
  174. }
  175. function getXfaFontWidths(name) {
  176. const info = getXfaFontName(name);
  177. if (!info) {
  178. return null;
  179. }
  180. const {
  181. baseWidths,
  182. baseMapping,
  183. factors
  184. } = info;
  185. let rescaledBaseWidths;
  186. if (!factors) {
  187. rescaledBaseWidths = baseWidths;
  188. } else {
  189. rescaledBaseWidths = baseWidths.map((w, i) => w * factors[i]);
  190. }
  191. let currentCode = -2;
  192. let currentArray;
  193. const newWidths = [];
  194. for (const [unicode, glyphIndex] of baseMapping.map((charUnicode, index) => [charUnicode, index]).sort(([unicode1], [unicode2]) => unicode1 - unicode2)) {
  195. if (unicode === -1) {
  196. continue;
  197. }
  198. if (unicode === currentCode + 1) {
  199. currentArray.push(rescaledBaseWidths[glyphIndex]);
  200. currentCode += 1;
  201. } else {
  202. currentCode = unicode;
  203. currentArray = [rescaledBaseWidths[glyphIndex]];
  204. newWidths.push(unicode, currentArray);
  205. }
  206. }
  207. return newWidths;
  208. }
  209. function getXfaFontDict(name) {
  210. const widths = getXfaFontWidths(name);
  211. const dict = new _primitives.Dict(null);
  212. dict.set("BaseFont", _primitives.Name.get(name));
  213. dict.set("Type", _primitives.Name.get("Font"));
  214. dict.set("Subtype", _primitives.Name.get("CIDFontType2"));
  215. dict.set("Encoding", _primitives.Name.get("Identity-H"));
  216. dict.set("CIDToGIDMap", _primitives.Name.get("Identity"));
  217. dict.set("W", widths);
  218. dict.set("FirstChar", widths[0]);
  219. dict.set("LastChar", widths[widths.length - 2] + widths[widths.length - 1].length - 1);
  220. const descriptor = new _primitives.Dict(null);
  221. dict.set("FontDescriptor", descriptor);
  222. const systemInfo = new _primitives.Dict(null);
  223. systemInfo.set("Ordering", "Identity");
  224. systemInfo.set("Registry", "Adobe");
  225. systemInfo.set("Supplement", 0);
  226. dict.set("CIDSystemInfo", systemInfo);
  227. return dict;
  228. }