dompdf.js 1.1.1 → 1.2.0

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 (427) hide show
  1. package/.versionrc +8 -0
  2. package/CHANGELOG.md +32 -543
  3. package/README.md +172 -160
  4. package/README_CN.md +233 -238
  5. package/dist/dompdf.esm.js +124 -124
  6. package/dist/dompdf.esm.js.map +1 -1
  7. package/dist/dompdf.js +124 -124
  8. package/dist/dompdf.js.map +1 -1
  9. package/dist/dompdf.min.js +67 -0
  10. package/dist/index.d.ts +2 -1
  11. package/dist/lib/__tests__/index.js +144 -0
  12. package/dist/lib/__tests__/index.js.map +1 -0
  13. package/dist/lib/core/__mocks__/cache-storage.js +10 -0
  14. package/dist/lib/core/__mocks__/cache-storage.js.map +1 -0
  15. package/dist/lib/core/__mocks__/context.js +22 -0
  16. package/dist/lib/core/__mocks__/context.js.map +1 -0
  17. package/dist/lib/core/__mocks__/features.js +12 -0
  18. package/dist/lib/core/__mocks__/features.js.map +1 -0
  19. package/dist/lib/core/__mocks__/logger.js +24 -0
  20. package/dist/lib/core/__mocks__/logger.js.map +1 -0
  21. package/dist/lib/core/__tests__/cache-storage.js +420 -0
  22. package/dist/lib/core/__tests__/cache-storage.js.map +1 -0
  23. package/dist/lib/core/__tests__/logger.js +28 -0
  24. package/dist/lib/core/__tests__/logger.js.map +1 -0
  25. package/dist/lib/core/bitwise.js +6 -0
  26. package/dist/lib/core/bitwise.js.map +1 -0
  27. package/dist/lib/core/cache-storage.js +198 -0
  28. package/dist/lib/core/cache-storage.js.map +1 -0
  29. package/dist/lib/core/context.js +18 -0
  30. package/dist/lib/core/context.js.map +1 -0
  31. package/dist/lib/core/debugger.js +25 -0
  32. package/dist/lib/core/debugger.js.map +1 -0
  33. package/dist/lib/core/features.js +193 -0
  34. package/dist/lib/core/features.js.map +1 -0
  35. package/dist/lib/core/logger.js +92 -0
  36. package/dist/lib/core/logger.js.map +1 -0
  37. package/dist/lib/core/util.js +5 -0
  38. package/dist/lib/core/util.js.map +1 -0
  39. package/dist/lib/css/IPropertyDescriptor.js +3 -0
  40. package/dist/lib/css/IPropertyDescriptor.js.map +1 -0
  41. package/dist/lib/css/ITypeDescriptor.js +3 -0
  42. package/dist/lib/css/ITypeDescriptor.js.map +1 -0
  43. package/dist/lib/css/index.js +216 -0
  44. package/dist/lib/css/index.js.map +1 -0
  45. package/dist/lib/css/layout/__mocks__/bounds.js +9 -0
  46. package/dist/lib/css/layout/__mocks__/bounds.js.map +1 -0
  47. package/dist/lib/css/layout/bounds.js +42 -0
  48. package/dist/lib/css/layout/bounds.js.map +1 -0
  49. package/dist/lib/css/layout/text.js +137 -0
  50. package/dist/lib/css/layout/text.js.map +1 -0
  51. package/dist/lib/css/property-descriptors/__tests__/background-tests.js +48 -0
  52. package/dist/lib/css/property-descriptors/__tests__/background-tests.js.map +1 -0
  53. package/dist/lib/css/property-descriptors/__tests__/font-family.js +25 -0
  54. package/dist/lib/css/property-descriptors/__tests__/font-family.js.map +1 -0
  55. package/dist/lib/css/property-descriptors/__tests__/paint-order.js +88 -0
  56. package/dist/lib/css/property-descriptors/__tests__/paint-order.js.map +1 -0
  57. package/dist/lib/css/property-descriptors/__tests__/text-shadow.js +94 -0
  58. package/dist/lib/css/property-descriptors/__tests__/text-shadow.js.map +1 -0
  59. package/dist/lib/css/property-descriptors/__tests__/transform-tests.js +18 -0
  60. package/dist/lib/css/property-descriptors/__tests__/transform-tests.js.map +1 -0
  61. package/dist/lib/css/property-descriptors/background-clip.js +24 -0
  62. package/dist/lib/css/property-descriptors/background-clip.js.map +1 -0
  63. package/dist/lib/css/property-descriptors/background-color.js +11 -0
  64. package/dist/lib/css/property-descriptors/background-color.js.map +1 -0
  65. package/dist/lib/css/property-descriptors/background-image.js +24 -0
  66. package/dist/lib/css/property-descriptors/background-image.js.map +1 -0
  67. package/dist/lib/css/property-descriptors/background-origin.js +24 -0
  68. package/dist/lib/css/property-descriptors/background-origin.js.map +1 -0
  69. package/dist/lib/css/property-descriptors/background-position.js +17 -0
  70. package/dist/lib/css/property-descriptors/background-position.js.map +1 -0
  71. package/dist/lib/css/property-descriptors/background-repeat.js +36 -0
  72. package/dist/lib/css/property-descriptors/background-repeat.js.map +1 -0
  73. package/dist/lib/css/property-descriptors/background-size.js +24 -0
  74. package/dist/lib/css/property-descriptors/background-size.js.map +1 -0
  75. package/dist/lib/css/property-descriptors/border-color.js +15 -0
  76. package/dist/lib/css/property-descriptors/border-color.js.map +1 -0
  77. package/dist/lib/css/property-descriptors/border-radius.js +18 -0
  78. package/dist/lib/css/property-descriptors/border-radius.js.map +1 -0
  79. package/dist/lib/css/property-descriptors/border-style.js +30 -0
  80. package/dist/lib/css/property-descriptors/border-style.js.map +1 -0
  81. package/dist/lib/css/property-descriptors/border-width.js +21 -0
  82. package/dist/lib/css/property-descriptors/border-width.js.map +1 -0
  83. package/dist/lib/css/property-descriptors/box-shadow.js +55 -0
  84. package/dist/lib/css/property-descriptors/box-shadow.js.map +1 -0
  85. package/dist/lib/css/property-descriptors/color.js +11 -0
  86. package/dist/lib/css/property-descriptors/color.js.map +1 -0
  87. package/dist/lib/css/property-descriptors/content.js +20 -0
  88. package/dist/lib/css/property-descriptors/content.js.map +1 -0
  89. package/dist/lib/css/property-descriptors/counter-increment.js +31 -0
  90. package/dist/lib/css/property-descriptors/counter-increment.js.map +1 -0
  91. package/dist/lib/css/property-descriptors/counter-reset.js +27 -0
  92. package/dist/lib/css/property-descriptors/counter-reset.js.map +1 -0
  93. package/dist/lib/css/property-descriptors/direction.js +19 -0
  94. package/dist/lib/css/property-descriptors/direction.js.map +1 -0
  95. package/dist/lib/css/property-descriptors/display.js +82 -0
  96. package/dist/lib/css/property-descriptors/display.js.map +1 -0
  97. package/dist/lib/css/property-descriptors/duration.js +15 -0
  98. package/dist/lib/css/property-descriptors/duration.js.map +1 -0
  99. package/dist/lib/css/property-descriptors/float.js +23 -0
  100. package/dist/lib/css/property-descriptors/float.js.map +1 -0
  101. package/dist/lib/css/property-descriptors/font-family.js +33 -0
  102. package/dist/lib/css/property-descriptors/font-family.js.map +1 -0
  103. package/dist/lib/css/property-descriptors/font-size.js +11 -0
  104. package/dist/lib/css/property-descriptors/font-size.js.map +1 -0
  105. package/dist/lib/css/property-descriptors/font-style.js +21 -0
  106. package/dist/lib/css/property-descriptors/font-style.js.map +1 -0
  107. package/dist/lib/css/property-descriptors/font-variant.js +14 -0
  108. package/dist/lib/css/property-descriptors/font-variant.js.map +1 -0
  109. package/dist/lib/css/property-descriptors/font-weight.js +26 -0
  110. package/dist/lib/css/property-descriptors/font-weight.js.map +1 -0
  111. package/dist/lib/css/property-descriptors/letter-spacing.js +22 -0
  112. package/dist/lib/css/property-descriptors/letter-spacing.js.map +1 -0
  113. package/dist/lib/css/property-descriptors/line-break.js +24 -0
  114. package/dist/lib/css/property-descriptors/line-break.js.map +1 -0
  115. package/dist/lib/css/property-descriptors/line-height.js +25 -0
  116. package/dist/lib/css/property-descriptors/line-height.js.map +1 -0
  117. package/dist/lib/css/property-descriptors/list-style-image.js +17 -0
  118. package/dist/lib/css/property-descriptors/list-style-image.js.map +1 -0
  119. package/dist/lib/css/property-descriptors/list-style-position.js +19 -0
  120. package/dist/lib/css/property-descriptors/list-style-position.js.map +1 -0
  121. package/dist/lib/css/property-descriptors/list-style-type.js +123 -0
  122. package/dist/lib/css/property-descriptors/list-style-type.js.map +1 -0
  123. package/dist/lib/css/property-descriptors/margin.js +14 -0
  124. package/dist/lib/css/property-descriptors/margin.js.map +1 -0
  125. package/dist/lib/css/property-descriptors/opacity.js +17 -0
  126. package/dist/lib/css/property-descriptors/opacity.js.map +1 -0
  127. package/dist/lib/css/property-descriptors/overflow-wrap.js +19 -0
  128. package/dist/lib/css/property-descriptors/overflow-wrap.js.map +1 -0
  129. package/dist/lib/css/property-descriptors/overflow.js +28 -0
  130. package/dist/lib/css/property-descriptors/overflow.js.map +1 -0
  131. package/dist/lib/css/property-descriptors/padding.js +15 -0
  132. package/dist/lib/css/property-descriptors/padding.js.map +1 -0
  133. package/dist/lib/css/property-descriptors/paint-order.js +34 -0
  134. package/dist/lib/css/property-descriptors/paint-order.js.map +1 -0
  135. package/dist/lib/css/property-descriptors/position.js +23 -0
  136. package/dist/lib/css/property-descriptors/position.js.map +1 -0
  137. package/dist/lib/css/property-descriptors/quotes.js +42 -0
  138. package/dist/lib/css/property-descriptors/quotes.js.map +1 -0
  139. package/dist/lib/css/property-descriptors/text-align.js +22 -0
  140. package/dist/lib/css/property-descriptors/text-align.js.map +1 -0
  141. package/dist/lib/css/property-descriptors/text-decoration-color.js +11 -0
  142. package/dist/lib/css/property-descriptors/text-decoration-color.js.map +1 -0
  143. package/dist/lib/css/property-descriptors/text-decoration-line.js +29 -0
  144. package/dist/lib/css/property-descriptors/text-decoration-line.js.map +1 -0
  145. package/dist/lib/css/property-descriptors/text-shadow.js +47 -0
  146. package/dist/lib/css/property-descriptors/text-shadow.js.map +1 -0
  147. package/dist/lib/css/property-descriptors/text-transform.js +21 -0
  148. package/dist/lib/css/property-descriptors/text-transform.js.map +1 -0
  149. package/dist/lib/css/property-descriptors/transform-origin.js +25 -0
  150. package/dist/lib/css/property-descriptors/transform-origin.js.map +1 -0
  151. package/dist/lib/css/property-descriptors/transform.js +37 -0
  152. package/dist/lib/css/property-descriptors/transform.js.map +1 -0
  153. package/dist/lib/css/property-descriptors/visibility.js +21 -0
  154. package/dist/lib/css/property-descriptors/visibility.js.map +1 -0
  155. package/dist/lib/css/property-descriptors/webkit-text-stroke-color.js +11 -0
  156. package/dist/lib/css/property-descriptors/webkit-text-stroke-color.js.map +1 -0
  157. package/dist/lib/css/property-descriptors/webkit-text-stroke-width.js +17 -0
  158. package/dist/lib/css/property-descriptors/webkit-text-stroke-width.js.map +1 -0
  159. package/dist/lib/css/property-descriptors/word-break.js +27 -0
  160. package/dist/lib/css/property-descriptors/word-break.js.map +1 -0
  161. package/dist/lib/css/property-descriptors/z-index.js +20 -0
  162. package/dist/lib/css/property-descriptors/z-index.js.map +1 -0
  163. package/dist/lib/css/syntax/__tests__/tokernizer-tests.js +34 -0
  164. package/dist/lib/css/syntax/__tests__/tokernizer-tests.js.map +1 -0
  165. package/dist/lib/css/syntax/parser.js +147 -0
  166. package/dist/lib/css/syntax/parser.js.map +1 -0
  167. package/dist/lib/css/syntax/tokenizer.js +630 -0
  168. package/dist/lib/css/syntax/tokenizer.js.map +1 -0
  169. package/dist/lib/css/types/__tests__/color-tests.js +66 -0
  170. package/dist/lib/css/types/__tests__/color-tests.js.map +1 -0
  171. package/dist/lib/css/types/__tests__/image-tests.js +233 -0
  172. package/dist/lib/css/types/__tests__/image-tests.js.map +1 -0
  173. package/dist/lib/css/types/angle.js +81 -0
  174. package/dist/lib/css/types/angle.js.map +1 -0
  175. package/dist/lib/css/types/color.js +311 -0
  176. package/dist/lib/css/types/color.js.map +1 -0
  177. package/dist/lib/css/types/functions/-prefix-linear-gradient.js +33 -0
  178. package/dist/lib/css/types/functions/-prefix-linear-gradient.js.map +1 -0
  179. package/dist/lib/css/types/functions/-prefix-radial-gradient.js +84 -0
  180. package/dist/lib/css/types/functions/-prefix-radial-gradient.js.map +1 -0
  181. package/dist/lib/css/types/functions/-webkit-gradient.js +60 -0
  182. package/dist/lib/css/types/functions/-webkit-gradient.js.map +1 -0
  183. package/dist/lib/css/types/functions/__tests__/radial-gradient.js +68 -0
  184. package/dist/lib/css/types/functions/__tests__/radial-gradient.js.map +1 -0
  185. package/dist/lib/css/types/functions/counter.js +374 -0
  186. package/dist/lib/css/types/functions/counter.js.map +1 -0
  187. package/dist/lib/css/types/functions/gradient.js +165 -0
  188. package/dist/lib/css/types/functions/gradient.js.map +1 -0
  189. package/dist/lib/css/types/functions/linear-gradient.js +28 -0
  190. package/dist/lib/css/types/functions/linear-gradient.js.map +1 -0
  191. package/dist/lib/css/types/functions/radial-gradient.js +91 -0
  192. package/dist/lib/css/types/functions/radial-gradient.js.map +1 -0
  193. package/dist/lib/css/types/image.js +53 -0
  194. package/dist/lib/css/types/image.js.map +1 -0
  195. package/dist/lib/css/types/index.js +3 -0
  196. package/dist/lib/css/types/index.js.map +1 -0
  197. package/dist/lib/css/types/length-percentage.js +52 -0
  198. package/dist/lib/css/types/length-percentage.js.map +1 -0
  199. package/dist/lib/css/types/length.js +8 -0
  200. package/dist/lib/css/types/length.js.map +1 -0
  201. package/dist/lib/css/types/time.js +18 -0
  202. package/dist/lib/css/types/time.js.map +1 -0
  203. package/dist/lib/dom/__mocks__/document-cloner.js +24 -0
  204. package/dist/lib/dom/__mocks__/document-cloner.js.map +1 -0
  205. package/dist/lib/dom/document-cloner.js +530 -0
  206. package/dist/lib/dom/document-cloner.js.map +1 -0
  207. package/dist/lib/dom/element-container.js +39 -0
  208. package/dist/lib/dom/element-container.js.map +1 -0
  209. package/dist/lib/dom/elements/li-element-container.js +30 -0
  210. package/dist/lib/dom/elements/li-element-container.js.map +1 -0
  211. package/dist/lib/dom/elements/ol-element-container.js +31 -0
  212. package/dist/lib/dom/elements/ol-element-container.js.map +1 -0
  213. package/dist/lib/dom/elements/select-element-container.js +31 -0
  214. package/dist/lib/dom/elements/select-element-container.js.map +1 -0
  215. package/dist/lib/dom/elements/textarea-element-container.js +30 -0
  216. package/dist/lib/dom/elements/textarea-element-container.js.map +1 -0
  217. package/dist/lib/dom/node-parser.js +306 -0
  218. package/dist/lib/dom/node-parser.js.map +1 -0
  219. package/dist/lib/dom/replaced-elements/canvas-element-container.js +32 -0
  220. package/dist/lib/dom/replaced-elements/canvas-element-container.js.map +1 -0
  221. package/dist/lib/dom/replaced-elements/iframe-element-container.js +54 -0
  222. package/dist/lib/dom/replaced-elements/iframe-element-container.js.map +1 -0
  223. package/dist/lib/dom/replaced-elements/image-element-container.js +33 -0
  224. package/dist/lib/dom/replaced-elements/image-element-container.js.map +1 -0
  225. package/dist/lib/dom/replaced-elements/index.js +3 -0
  226. package/dist/lib/dom/replaced-elements/index.js.map +1 -0
  227. package/dist/lib/dom/replaced-elements/input-element-container.js +102 -0
  228. package/dist/lib/dom/replaced-elements/input-element-container.js.map +1 -0
  229. package/dist/lib/dom/replaced-elements/pseudo-elements.js +1 -0
  230. package/dist/lib/dom/replaced-elements/pseudo-elements.js.map +1 -0
  231. package/dist/lib/dom/replaced-elements/svg-element-container.js +38 -0
  232. package/dist/lib/dom/replaced-elements/svg-element-container.js.map +1 -0
  233. package/dist/lib/dom/text-container.js +32 -0
  234. package/dist/lib/dom/text-container.js.map +1 -0
  235. package/dist/lib/index.js +274 -0
  236. package/dist/lib/index.js.map +1 -0
  237. package/dist/lib/invariant.js +10 -0
  238. package/dist/lib/invariant.js.map +1 -0
  239. package/dist/lib/render/background.js +187 -0
  240. package/dist/lib/render/background.js.map +1 -0
  241. package/dist/lib/render/bezier-curve.js +36 -0
  242. package/dist/lib/render/bezier-curve.js.map +1 -0
  243. package/dist/lib/render/border.js +105 -0
  244. package/dist/lib/render/border.js.map +1 -0
  245. package/dist/lib/render/bound-curves.js +190 -0
  246. package/dist/lib/render/bound-curves.js.map +1 -0
  247. package/dist/lib/render/box-sizing.js +21 -0
  248. package/dist/lib/render/box-sizing.js.map +1 -0
  249. package/dist/lib/render/canvas/foreignobject-renderer.js +108 -0
  250. package/dist/lib/render/canvas/foreignobject-renderer.js.map +1 -0
  251. package/dist/lib/render/canvas/pdf-renderer.js +1340 -0
  252. package/dist/lib/render/canvas/pdf-renderer.js.map +1 -0
  253. package/dist/lib/render/effects.js +41 -0
  254. package/dist/lib/render/effects.js.map +1 -0
  255. package/dist/lib/render/font-metrics.js +55 -0
  256. package/dist/lib/render/font-metrics.js.map +1 -0
  257. package/dist/lib/render/page-format-map.js +54 -0
  258. package/dist/lib/render/page-format-map.js.map +1 -0
  259. package/dist/lib/render/paginate copy 2.js +178 -0
  260. package/dist/lib/render/paginate copy 2.js.map +1 -0
  261. package/dist/lib/render/paginate.js +211 -0
  262. package/dist/lib/render/paginate.js.map +1 -0
  263. package/dist/lib/render/path.js +27 -0
  264. package/dist/lib/render/path.js.map +1 -0
  265. package/dist/lib/render/renderer.js +12 -0
  266. package/dist/lib/render/renderer.js.map +1 -0
  267. package/dist/lib/render/stacking-context.js +172 -0
  268. package/dist/lib/render/stacking-context.js.map +1 -0
  269. package/dist/lib/render/vector.js +18 -0
  270. package/dist/lib/render/vector.js.map +1 -0
  271. package/dist/lib/utils/css-utils.js +19 -0
  272. package/dist/lib/utils/css-utils.js.map +1 -0
  273. package/dist/lib/utils/element-utils.js +25 -0
  274. package/dist/lib/utils/element-utils.js.map +1 -0
  275. package/dist/lib/utils/font-utils.js +70 -0
  276. package/dist/lib/utils/font-utils.js.map +1 -0
  277. package/dist/lib/utils/index.js +22 -0
  278. package/dist/lib/utils/index.js.map +1 -0
  279. package/dist/lib/utils/type-utils.js +40 -0
  280. package/dist/lib/utils/type-utils.js.map +1 -0
  281. package/dist/lib/utils/url-path.js +22 -0
  282. package/dist/lib/utils/url-path.js.map +1 -0
  283. package/dist/render/canvas/pdf-renderer.d.ts +2 -2
  284. package/dist/render/paginate copy 2.d.ts +3 -0
  285. package/dist/render/paginate.d.ts +1 -1
  286. package/dist/types/__tests__/index.d.ts +1 -0
  287. package/dist/types/core/__mocks__/cache-storage.d.ts +2 -0
  288. package/dist/types/core/__mocks__/context.d.ts +9 -0
  289. package/dist/types/core/__mocks__/features.d.ts +8 -0
  290. package/dist/types/core/__mocks__/logger.d.ts +9 -0
  291. package/dist/types/core/__tests__/cache-storage.d.ts +1 -0
  292. package/dist/types/core/__tests__/logger.d.ts +1 -0
  293. package/dist/types/core/bitwise.d.ts +1 -0
  294. package/dist/types/core/cache-storage.d.ts +26 -0
  295. package/dist/types/core/context.d.ts +15 -0
  296. package/dist/types/core/debugger.d.ts +8 -0
  297. package/dist/types/core/features.d.ts +12 -0
  298. package/dist/types/core/logger.d.ts +18 -0
  299. package/dist/types/core/util.d.ts +1 -0
  300. package/dist/types/css/IPropertyDescriptor.d.ts +36 -0
  301. package/dist/types/css/ITypeDescriptor.d.ts +6 -0
  302. package/dist/types/css/index.d.ts +132 -0
  303. package/dist/types/css/layout/__mocks__/bounds.d.ts +2 -0
  304. package/dist/types/css/layout/bounds.d.ts +14 -0
  305. package/dist/types/css/layout/text.d.ts +10 -0
  306. package/dist/types/css/property-descriptors/__tests__/background-tests.d.ts +1 -0
  307. package/dist/types/css/property-descriptors/__tests__/font-family.d.ts +1 -0
  308. package/dist/types/css/property-descriptors/__tests__/paint-order.d.ts +1 -0
  309. package/dist/types/css/property-descriptors/__tests__/text-shadow.d.ts +1 -0
  310. package/dist/types/css/property-descriptors/__tests__/transform-tests.d.ts +1 -0
  311. package/dist/types/css/property-descriptors/background-clip.d.ts +8 -0
  312. package/dist/types/css/property-descriptors/background-color.d.ts +2 -0
  313. package/dist/types/css/property-descriptors/background-image.d.ts +3 -0
  314. package/dist/types/css/property-descriptors/background-origin.d.ts +8 -0
  315. package/dist/types/css/property-descriptors/background-position.d.ts +5 -0
  316. package/dist/types/css/property-descriptors/background-repeat.d.ts +9 -0
  317. package/dist/types/css/property-descriptors/background-size.d.ts +11 -0
  318. package/dist/types/css/property-descriptors/border-color.d.ts +5 -0
  319. package/dist/types/css/property-descriptors/border-radius.d.ts +7 -0
  320. package/dist/types/css/property-descriptors/border-style.d.ts +12 -0
  321. package/dist/types/css/property-descriptors/border-width.d.ts +5 -0
  322. package/dist/types/css/property-descriptors/box-shadow.d.ts +14 -0
  323. package/dist/types/css/property-descriptors/color.d.ts +2 -0
  324. package/dist/types/css/property-descriptors/content.d.ts +4 -0
  325. package/dist/types/css/property-descriptors/counter-increment.d.ts +7 -0
  326. package/dist/types/css/property-descriptors/counter-reset.d.ts +7 -0
  327. package/dist/types/css/property-descriptors/direction.d.ts +6 -0
  328. package/dist/types/css/property-descriptors/display.d.ts +35 -0
  329. package/dist/types/css/property-descriptors/duration.d.ts +2 -0
  330. package/dist/types/css/property-descriptors/float.d.ts +9 -0
  331. package/dist/types/css/property-descriptors/font-family.d.ts +4 -0
  332. package/dist/types/css/property-descriptors/font-size.d.ts +2 -0
  333. package/dist/types/css/property-descriptors/font-style.d.ts +7 -0
  334. package/dist/types/css/property-descriptors/font-variant.d.ts +2 -0
  335. package/dist/types/css/property-descriptors/font-weight.d.ts +2 -0
  336. package/dist/types/css/property-descriptors/letter-spacing.d.ts +2 -0
  337. package/dist/types/css/property-descriptors/line-break.d.ts +6 -0
  338. package/dist/types/css/property-descriptors/line-height.d.ts +4 -0
  339. package/dist/types/css/property-descriptors/list-style-image.d.ts +3 -0
  340. package/dist/types/css/property-descriptors/list-style-position.d.ts +6 -0
  341. package/dist/types/css/property-descriptors/list-style-type.d.ts +58 -0
  342. package/dist/types/css/property-descriptors/margin.d.ts +5 -0
  343. package/dist/types/css/property-descriptors/opacity.d.ts +2 -0
  344. package/dist/types/css/property-descriptors/overflow-wrap.d.ts +6 -0
  345. package/dist/types/css/property-descriptors/overflow.d.ts +9 -0
  346. package/dist/types/css/property-descriptors/padding.d.ts +5 -0
  347. package/dist/types/css/property-descriptors/paint-order.d.ts +8 -0
  348. package/dist/types/css/property-descriptors/position.d.ts +9 -0
  349. package/dist/types/css/property-descriptors/quotes.d.ts +8 -0
  350. package/dist/types/css/property-descriptors/text-align.d.ts +7 -0
  351. package/dist/types/css/property-descriptors/text-decoration-color.d.ts +2 -0
  352. package/dist/types/css/property-descriptors/text-decoration-line.d.ts +10 -0
  353. package/dist/types/css/property-descriptors/text-shadow.d.ts +12 -0
  354. package/dist/types/css/property-descriptors/text-transform.d.ts +8 -0
  355. package/dist/types/css/property-descriptors/transform-origin.d.ts +4 -0
  356. package/dist/types/css/property-descriptors/transform.d.ts +4 -0
  357. package/dist/types/css/property-descriptors/visibility.d.ts +7 -0
  358. package/dist/types/css/property-descriptors/webkit-text-stroke-color.d.ts +2 -0
  359. package/dist/types/css/property-descriptors/webkit-text-stroke-width.d.ts +2 -0
  360. package/dist/types/css/property-descriptors/word-break.d.ts +7 -0
  361. package/dist/types/css/property-descriptors/z-index.d.ts +7 -0
  362. package/dist/types/css/syntax/__tests__/tokernizer-tests.d.ts +1 -0
  363. package/dist/types/css/syntax/parser.d.ts +34 -0
  364. package/dist/types/css/syntax/tokenizer.d.ts +94 -0
  365. package/dist/types/css/types/__tests__/color-tests.d.ts +1 -0
  366. package/dist/types/css/types/__tests__/image-tests.d.ts +1 -0
  367. package/dist/types/css/types/angle.d.ts +7 -0
  368. package/dist/types/css/types/color.d.ts +11 -0
  369. package/dist/types/css/types/functions/-prefix-linear-gradient.d.ts +4 -0
  370. package/dist/types/css/types/functions/-prefix-radial-gradient.d.ts +4 -0
  371. package/dist/types/css/types/functions/-webkit-gradient.d.ts +4 -0
  372. package/dist/types/css/types/functions/__tests__/radial-gradient.d.ts +1 -0
  373. package/dist/types/css/types/functions/counter.d.ts +10 -0
  374. package/dist/types/css/types/functions/gradient.d.ts +7 -0
  375. package/dist/types/css/types/functions/linear-gradient.d.ts +4 -0
  376. package/dist/types/css/types/functions/radial-gradient.d.ts +12 -0
  377. package/dist/types/css/types/image.d.ts +54 -0
  378. package/dist/types/css/types/index.d.ts +1 -0
  379. package/dist/types/css/types/length-percentage.d.ts +11 -0
  380. package/dist/types/css/types/length.d.ts +4 -0
  381. package/dist/types/css/types/time.d.ts +2 -0
  382. package/dist/types/dom/__mocks__/document-cloner.d.ts +6 -0
  383. package/dist/types/dom/document-cloner.d.ts +45 -0
  384. package/dist/types/dom/element-container.d.ts +23 -0
  385. package/dist/types/dom/elements/li-element-container.d.ts +6 -0
  386. package/dist/types/dom/elements/ol-element-container.d.ts +7 -0
  387. package/dist/types/dom/elements/select-element-container.d.ts +6 -0
  388. package/dist/types/dom/elements/textarea-element-container.d.ts +6 -0
  389. package/dist/types/dom/node-parser.d.ts +23 -0
  390. package/dist/types/dom/replaced-elements/canvas-element-container.d.ts +8 -0
  391. package/dist/types/dom/replaced-elements/iframe-element-container.d.ts +11 -0
  392. package/dist/types/dom/replaced-elements/image-element-container.d.ts +8 -0
  393. package/dist/types/dom/replaced-elements/index.d.ts +4 -0
  394. package/dist/types/dom/replaced-elements/input-element-container.d.ts +12 -0
  395. package/dist/types/dom/replaced-elements/pseudo-elements.d.ts +0 -0
  396. package/dist/types/dom/replaced-elements/svg-element-container.d.ts +8 -0
  397. package/dist/types/dom/text-container.d.ts +8 -0
  398. package/dist/types/index.d.ts +17 -0
  399. package/dist/types/invariant.d.ts +1 -0
  400. package/dist/types/render/background.d.ts +16 -0
  401. package/dist/types/render/bezier-curve.d.ts +14 -0
  402. package/dist/types/render/border.d.ts +6 -0
  403. package/dist/types/render/bound-curves.d.ts +32 -0
  404. package/dist/types/render/box-sizing.d.ts +4 -0
  405. package/dist/types/render/canvas/foreignobject-renderer.d.ts +11 -0
  406. package/dist/types/render/canvas/pdf-renderer.d.ts +110 -0
  407. package/dist/types/render/effects.d.ts +38 -0
  408. package/dist/types/render/font-metrics.d.ts +11 -0
  409. package/dist/types/render/page-format-map.d.ts +4 -0
  410. package/dist/types/render/paginate copy 2.d.ts +3 -0
  411. package/dist/types/render/paginate.d.ts +3 -0
  412. package/dist/types/render/path.d.ts +13 -0
  413. package/dist/types/render/renderer.d.ts +7 -0
  414. package/dist/types/render/stacking-context.d.ts +24 -0
  415. package/dist/types/render/vector.d.ts +9 -0
  416. package/dist/types/utils/css-utils.d.ts +2 -0
  417. package/dist/types/utils/element-utils.d.ts +7 -0
  418. package/dist/types/utils/font-utils.d.ts +9 -0
  419. package/dist/types/utils/index.d.ts +5 -0
  420. package/dist/types/utils/type-utils.d.ts +4 -0
  421. package/dist/types/utils/url-path.d.ts +7 -0
  422. package/dist/utils/font-utils.d.ts +2 -0
  423. package/fontconverter/fontconverter.html +2 -2
  424. package/package.json +135 -135
  425. package/page_sizes.md +50 -0
  426. package/.vscode/settings.json +0 -5
  427. package/html2pdf-userscript.js +0 -936
@@ -1,936 +0,0 @@
1
- // ==UserScript==
2
- // @name HTML2PDF 网页元素转PDF
3
- // @namespace http://tampermonkey.net/
4
- // @version 1.0
5
- // @description 在任意网站添加按钮,选择页面元素并生成PDF
6
- // @author You
7
- // @match *://*/*
8
- // @grant none
9
- // @require file:///D:/project-code/html2pdf/dist/html2pdf.js
10
- // @require file:///D:/project-code/html2pdf/examples/SourceHanSansSC-Normal-Min-normal.js
11
- // ==/UserScript==
12
-
13
- (function () {
14
- 'use strict';
15
-
16
- // 全局变量
17
- let isSelecting = false;
18
- let selectedElement = null;
19
- let overlay = null;
20
- let controlPanel = null;
21
-
22
- // 创建控制面板
23
- function createControlPanel() {
24
- const panel = document.createElement('div');
25
- panel.id = 'html2pdf-control-panel';
26
- panel.style.cssText = `
27
- position: fixed;
28
- top: 20px;
29
- right: 20px;
30
- z-index: 10000;
31
- font-family: 'Arial', sans-serif;
32
- transition: all 0.3s ease;
33
- display: flex;
34
- flex-direction: column;
35
- align-items: flex-end;
36
- `;
37
-
38
- // 创建主面板内容(默认隐藏)
39
- const panelContent = document.createElement('div');
40
- panelContent.id = 'html2pdf-panel-content';
41
- panelContent.style.cssText = `
42
- background: linear-gradient(145deg, #0F1C2E, #1E2A45);
43
- border: 1px solid #3A86FF;
44
- border-radius: 10px;
45
- padding: 15px;
46
- box-shadow: 0 4px 20px rgba(0,0,0,0.4), 0 0 15px rgba(58, 134, 255, 0.4);
47
- color: #e1e1e1;
48
- min-width: 220px;
49
- display: none;
50
- backdrop-filter: blur(5px);
51
- margin-top: 10px;
52
- `;
53
-
54
- panelContent.innerHTML = `
55
- <div style="
56
- margin-bottom: 15px;
57
- font-weight: bold;
58
- color: #5EEAD4;
59
- font-size: 16px;
60
- display: flex;
61
- align-items: center;
62
- justify-content: space-between;
63
- ">
64
- <span>HTML2PDF 工具</span>
65
- <div style="
66
- width: 40px;
67
- height: 4px;
68
- background: linear-gradient(90deg, #5EEAD4, #3A86FF);
69
- border-radius: 2px;
70
- box-shadow: 0 0 8px rgba(94, 234, 212, 0.6);
71
- "></div>
72
- </div>
73
- <button id="select-element-btn" style="
74
- width: 100%;
75
- padding: 8px 12px;
76
- margin-bottom: 10px;
77
- background: linear-gradient(90deg, #3A86FF, #5E60CE);
78
- color: white;
79
- border: none;
80
- border-radius: 6px;
81
- cursor: pointer;
82
- font-size: 14px;
83
- box-shadow: 0 2px 10px rgba(58, 134, 255, 0.4);
84
- transition: all 0.2s ease;
85
- ">选择元素</button>
86
- <button id="generate-pdf-btn" style="
87
- width: 100%;
88
- padding: 8px 12px;
89
- margin-bottom: 10px;
90
- background: linear-gradient(90deg, #5EEAD4, #38BDF8);
91
- color: white;
92
- border: none;
93
- border-radius: 6px;
94
- cursor: pointer;
95
- font-size: 14px;
96
- box-shadow: 0 2px 10px rgba(94, 234, 212, 0.4);
97
- opacity: 0.5;
98
- transition: all 0.2s ease;
99
- margin-left:0;
100
- text-shadow: 0 1px 2px rgba(0,0,0,0.3);
101
- " disabled>生成PDF</button>
102
- <button id="close-panel-btn" style="
103
- width: 100%;
104
- padding: 6px 12px;
105
- background: linear-gradient(90deg, #F72585, #7209B7);
106
- color: white;
107
- border: none;
108
- border-radius: 6px;
109
- cursor: pointer;
110
- font-size: 12px;
111
- box-shadow: 0 2px 10px rgba(247, 37, 133, 0.4);
112
- transition: all 0.2s ease;
113
- margin-left: 0;
114
- text-shadow: 0 1px 2px rgba(0,0,0,0.3);
115
- ">关闭</button>
116
- <div id="selected-info" style="
117
- margin-top: 10px;
118
- padding: 10px;
119
- background: rgba(14, 23, 38, 0.6);
120
- border-radius: 6px;
121
- font-size: 12px;
122
- color: #e1e1e1;
123
- display: none;
124
- border-left: 3px solid #5EEAD4;
125
- box-shadow: 0 2px 8px rgba(0,0,0,0.2) inset;
126
- "></div>
127
- `;
128
-
129
- // 创建触发按钮(默认显示)
130
- const triggerButton = document.createElement('div');
131
- triggerButton.id = 'html2pdf-trigger-button';
132
- triggerButton.style.cssText = `
133
- width: 50px;
134
- height: 50px;
135
- border-radius: 50%;
136
- background: linear-gradient(145deg, #3A86FF, #5E60CE);
137
- box-shadow: 0 4px 15px rgba(58, 134, 255, 0.5), 0 0 20px rgba(58, 134, 255, 0.3);
138
- cursor: pointer;
139
- display: flex;
140
- align-items: center;
141
- justify-content: center;
142
- transition: all 0.3s ease;
143
- position: relative;
144
- overflow: hidden;
145
- `;
146
-
147
- // 添加PDF图标
148
- triggerButton.innerHTML = `
149
- <div style="
150
- color: white;
151
- font-size: 20px;
152
- font-weight: bold;
153
- text-shadow: 0 1px 2px rgba(0,0,0,0.3);
154
- ">PDF</div>
155
- <div style="
156
- position: absolute;
157
- width: 100%;
158
- height: 100%;
159
- border-radius: 50%;
160
- border: 2px solid rgba(94, 234, 212, 0.4);
161
- animation: pulse 2s infinite;
162
- "></div>
163
- `;
164
-
165
- // 添加脉冲动画样式
166
- const style = document.createElement('style');
167
- style.textContent = `
168
- @keyframes pulse {
169
- 0% {
170
- transform: scale(1);
171
- opacity: 0.8;
172
- }
173
- 70% {
174
- transform: scale(1.1);
175
- opacity: 0;
176
- }
177
- 100% {
178
- transform: scale(1);
179
- opacity: 0;
180
- }
181
- }
182
- #select-element-btn:hover, #generate-pdf-btn:not([disabled]):hover, #close-panel-btn:hover {
183
- transform: translateY(-2px);
184
- box-shadow: 0 4px 15px rgba(0,0,0,0.3);
185
- filter: brightness(1.1);
186
- }
187
- #html2pdf-trigger-button:hover {
188
- transform: scale(1.05);
189
- box-shadow: 0 4px 20px rgba(58, 134, 255, 0.6), 0 0 30px rgba(58, 134, 255, 0.4);
190
- }
191
- .html2pdf-highlight {
192
- outline: 3px solid #5EEAD4 !important;
193
- outline-offset: 2px !important;
194
- box-shadow: 0 0 15px rgba(94, 234, 212, 0.4) !important;
195
- }
196
- `;
197
- document.head.appendChild(style);
198
-
199
- // 将触发按钮和面板内容添加到主面板
200
- panel.appendChild(triggerButton);
201
- panel.appendChild(panelContent);
202
- document.body.appendChild(panel);
203
-
204
- // 添加触发按钮点击事件
205
- triggerButton.addEventListener('click', () => {
206
- const content = document.getElementById('html2pdf-panel-content');
207
- if (content.style.display === 'none') {
208
- content.style.display = 'block';
209
- triggerButton.style.transform = 'scale(0.9)';
210
- } else {
211
- content.style.display = 'none';
212
- triggerButton.style.transform = 'scale(1)';
213
- }
214
- });
215
-
216
- return panel;
217
- }
218
-
219
- // 创建选择覆盖层
220
- function createOverlay() {
221
- const overlay = document.createElement('div');
222
- overlay.id = 'html2pdf-overlay';
223
- overlay.style.cssText = `
224
- position: fixed;
225
- top: 0;
226
- left: 0;
227
- width: 100%;
228
- height: 100%;
229
- background: rgba(0, 123, 186, 0.1);
230
- z-index: 9999;
231
- cursor: crosshair;
232
- pointer-events: none;
233
- `;
234
- document.body.appendChild(overlay);
235
- return overlay;
236
- }
237
-
238
- // 高亮元素
239
- function highlightElement(element) {
240
- // 移除之前的高亮
241
- const prevHighlight = document.querySelector('.html2pdf-highlight');
242
- if (prevHighlight) {
243
- prevHighlight.classList.remove('html2pdf-highlight');
244
- }
245
-
246
- // 添加高亮样式
247
- if (element && element !== document.body) {
248
- element.classList.add('html2pdf-highlight');
249
-
250
- // 添加高亮CSS
251
- if (!document.querySelector('#html2pdf-highlight-style')) {
252
- const style = document.createElement('style');
253
- style.id = 'html2pdf-highlight-style';
254
- // style.textContent = `
255
- // .html2pdf-highlight {
256
- // outline: 3px solid #007cba !important;
257
- // outline-offset: 2px !important;
258
- // }
259
- // `;
260
- document.head.appendChild(style);
261
- }
262
- }
263
- }
264
-
265
- // 高亮元素
266
- function highlightElement(element) {
267
- // 移除之前的高亮
268
- const prevHighlight = document.querySelector('.html2pdf-highlight');
269
- if (prevHighlight) {
270
- prevHighlight.classList.remove('html2pdf-highlight');
271
- }
272
-
273
- // 添加高亮样式
274
- if (element && element !== document.body) {
275
- element.classList.add('html2pdf-highlight');
276
-
277
- // 添加高亮CSS
278
- if (!document.querySelector('#html2pdf-highlight-style')) {
279
- const style = document.createElement('style');
280
- style.id = 'html2pdf-highlight-style';
281
- style.textContent = `
282
- .html2pdf-highlight {
283
- outline: 3px solid #007cba !important;
284
- outline-offset: 2px !important;
285
-
286
- }
287
- `;
288
- document.head.appendChild(style);
289
- }
290
- }
291
- }
292
-
293
- // 开始选择模式
294
- function startSelection() {
295
- isSelecting = true;
296
- overlay = createOverlay();
297
- document.body.style.cursor = 'crosshair';
298
-
299
- // 更新按钮状态
300
- const selectBtn = document.getElementById('select-element-btn');
301
- selectBtn.textContent = '取消选择';
302
- selectBtn.style.background = '#dc3545';
303
-
304
- // 添加事件监听
305
- document.addEventListener('mouseover', onMouseOver);
306
- document.addEventListener('click', onElementClick);
307
- document.addEventListener('keydown', onKeyDown);
308
- }
309
-
310
- // 停止选择模式
311
- function stopSelection() {
312
- isSelecting = false;
313
- document.body.style.cursor = '';
314
-
315
- if (overlay) {
316
- overlay.remove();
317
- overlay = null;
318
- }
319
-
320
- // 更新按钮状态
321
- const selectBtn = document.getElementById('select-element-btn');
322
- selectBtn.textContent = '选择元素';
323
- selectBtn.style.background = 'linear-gradient(90deg, #4cc9f0, #4361ee)';
324
-
325
- // 移除事件监听
326
- document.removeEventListener('mouseover', onMouseOver);
327
- document.removeEventListener('click', onElementClick);
328
- document.removeEventListener('keydown', onKeyDown);
329
- }
330
-
331
- // 鼠标悬停事件
332
- function onMouseOver(e) {
333
- if (!isSelecting) return;
334
- e.preventDefault();
335
-
336
- const element = e.target;
337
- if (element !== controlPanel && !controlPanel.contains(element)) {
338
- highlightElement(element);
339
- }
340
- }
341
-
342
- // 元素点击事件
343
- function onElementClick(e) {
344
- if (!isSelecting) return;
345
- e.preventDefault();
346
- e.stopPropagation();
347
-
348
- const element = e.target;
349
- if (element !== controlPanel && !controlPanel.contains(element)) {
350
- selectedElement = element;
351
- stopSelection();
352
- updateSelectedInfo(element);
353
- enablePdfGeneration();
354
- }
355
- }
356
-
357
- // 键盘事件(ESC取消选择)
358
- function onKeyDown(e) {
359
- if (e.key === 'Escape' && isSelecting) {
360
- stopSelection();
361
- }
362
- }
363
-
364
- // 更新选中元素信息
365
- function updateSelectedInfo(element) {
366
- const info = document.getElementById('selected-info');
367
- const tagName = element.tagName.toLowerCase();
368
- const className = element.className ? `.${element.className.split(' ').join('.')}` : '';
369
- const id = element.id ? `#${element.id}` : '';
370
-
371
- // info.innerHTML = `
372
- // <strong>已选择元素:</strong><br>
373
- // 标签: ${tagName}${id}${className}<br>
374
- // 尺寸: ${element.offsetWidth} × ${element.offsetHeight}px
375
- // ${element.parentElement && element.parentElement !== document.body ?
376
- // `<button id="select-parent-btn" style="
377
- // margin-top: 8px;
378
- // padding: 4px 8px;
379
- // background: linear-gradient(90deg, #5E60CE, #7209B7);
380
- // color: white;
381
- // border: none;
382
- // border-radius: 4px;
383
- // cursor: pointer;
384
- // font-size: 12px;
385
- // box-shadow: 0 2px 6px rgba(94, 96, 206, 0.4);
386
- // transition: all 0.2s ease;
387
- // display: block;
388
- // width: 100%;
389
- // ">选择父元素</button>` :
390
- // ''
391
- // }
392
- // `;
393
- info.style.display = 'block';
394
-
395
- // 如果有父元素且不是body,添加选择父元素按钮事件
396
- // if (element.parentElement && element.parentElement !== document.body) {
397
- // document.getElementById('select-parent-btn').addEventListener('click', () => {
398
- // selectParentElement(element);
399
- // });
400
- // }
401
- }
402
-
403
- // 选择父元素
404
- // function selectParentElement(element) {
405
- // if (element && element.parentElement && element.parentElement !== document.body) {
406
- // // 更新选中元素为父元素
407
- // selectedElement = element.parentElement;
408
-
409
- // // 高亮显示父元素
410
- // highlightElement(selectedElement);
411
-
412
- // // 更新选中信息
413
- // updateSelectedInfo(selectedElement);
414
- // }
415
- // }
416
-
417
- // 启用PDF生成按钮
418
- function enablePdfGeneration() {
419
- const pdfBtn = document.getElementById('generate-pdf-btn');
420
- pdfBtn.disabled = false;
421
- pdfBtn.style.opacity = '1';
422
- }
423
-
424
- // 生成PDF
425
- async function generatePDF() {
426
- if (!selectedElement) {
427
- alert('请先选择要转换的元素');
428
- return;
429
- }
430
-
431
- try {
432
- // 显示加载状态
433
- const pdfBtn = document.getElementById('generate-pdf-btn');
434
- const originalText = pdfBtn.textContent;
435
- pdfBtn.textContent = '生成中...';
436
- pdfBtn.disabled = true;
437
-
438
- // 使用html2canvas截图
439
- html2pdf(selectedElement, {
440
- useCORS: true,
441
- scale: 1,
442
- fontConfig: {
443
- fontFamily: 'SourceHanSansCN-Medium',
444
- fontBase64: window.fontBase64, //
445
- fontUrl: '',
446
- fontWeight: 400,
447
- fontStyle: 'normal'
448
- },
449
- }).then(function (canvas) {
450
- const link = document.createElement('a');
451
- link.download = 'output.png';
452
- link.href = canvas.toDataURL('image/png');
453
- link.click();
454
- // 恢复按钮状态
455
- pdfBtn.textContent = originalText;
456
- pdfBtn.disabled = false;
457
-
458
- alert('PDF生成成功!');
459
- }).catch(function (err) {
460
- console.log('creacterr', err);
461
-
462
- });;
463
-
464
-
465
-
466
-
467
-
468
- } catch (error) {
469
- console.error('PDF生成失败:', error);
470
- alert('PDF生成失败,请检查控制台错误信息');
471
-
472
- // 恢复按钮状态
473
- const pdfBtn = document.getElementById('generate-pdf-btn');
474
- pdfBtn.textContent = '生成PDF';
475
- pdfBtn.disabled = false;
476
- }
477
- }
478
-
479
-
480
- // 关闭面板
481
- function closePanel() {
482
- if (isSelecting) {
483
- stopSelection();
484
- }
485
-
486
- // 移除高亮
487
- const highlight = document.querySelector('.html2pdf-highlight');
488
- if (highlight) {
489
- highlight.classList.remove('html2pdf-highlight');
490
- }
491
-
492
- // 移除样式
493
- const style = document.querySelector('#html2pdf-highlight-style');
494
- if (style) {
495
- style.remove();
496
- }
497
-
498
- // 移除面板
499
- if (controlPanel) {
500
- controlPanel.remove();
501
- controlPanel = null;
502
- }
503
-
504
- selectedElement = null;
505
- }
506
-
507
- // 初始化
508
- function init() {
509
- // 等待页面加载完成
510
- if (document.readyState === 'loading') {
511
- document.addEventListener('DOMContentLoaded', init);
512
- return;
513
- }
514
-
515
- // 创建控制面板
516
- controlPanel = createControlPanel();
517
-
518
- // 绑定事件
519
- document.getElementById('select-element-btn').addEventListener('click', () => {
520
- if (isSelecting) {
521
- stopSelection();
522
- } else {
523
- startSelection();
524
- }
525
- });
526
-
527
- document.getElementById('generate-pdf-btn').addEventListener('click', generatePDF);
528
- document.getElementById('close-panel-btn').addEventListener('click', closePanel);
529
-
530
- // 让面板可拖拽
531
- let isDragging = false;
532
- let dragOffset = {
533
- x: 0,
534
- y: 0
535
- };
536
-
537
- controlPanel.addEventListener('mousedown', (e) => {
538
- if (e.target.tagName !== 'BUTTON') {
539
- isDragging = true;
540
- dragOffset.x = e.clientX - controlPanel.offsetLeft;
541
- dragOffset.y = e.clientY - controlPanel.offsetTop;
542
- controlPanel.style.cursor = 'move';
543
- }
544
- });
545
-
546
- document.addEventListener('mousemove', (e) => {
547
- if (isDragging) {
548
- controlPanel.style.left = (e.clientX - dragOffset.x) + 'px';
549
- controlPanel.style.top = (e.clientY - dragOffset.y) + 'px';
550
- controlPanel.style.right = 'auto';
551
- }
552
- });
553
-
554
- document.addEventListener('mouseup', () => {
555
- isDragging = false;
556
- controlPanel.style.cursor = '';
557
- });
558
-
559
- console.log('HTML2PDF 用户脚本已加载');
560
- }
561
-
562
- // 启动脚本
563
- init();
564
-
565
- })();
566
-
567
-
568
-
569
- // (function () {
570
- // 'use strict';
571
-
572
- // // 全局变量
573
- // let isSelecting = false;
574
- // let selectedElement = null;
575
- // let overlay = null;
576
- // let controlPanel = null;
577
-
578
- // // 创建控制面板
579
- // function createControlPanel() {
580
- // const panel = document.createElement('div');
581
- // panel.id = 'dompdf-control-panel';
582
- // panel.style.cssText = `
583
- // position: fixed;
584
- // top: 20px;
585
- // right: 20px;
586
- // z-index: 10000;
587
- // background: #fff;
588
- // border: 2px solid #007cba;
589
- // border-radius: 8px;
590
- // padding: 15px;
591
- // box-shadow: 0 4px 12px rgba(0,0,0,0.15);
592
- // font-family: Arial, sans-serif;
593
- // min-width: 200px;
594
- // `;
595
-
596
- // panel.innerHTML = `
597
- // <div style="margin-bottom: 10px; font-weight: bold; color: #333;">dompdf 工具</div>
598
- // <button id="select-element-btn" style="
599
- // width: 100%;
600
- // padding: 8px 12px;
601
- // margin-bottom: 8px;
602
- // background: #007cba;
603
- // color: white;
604
- // border: none;
605
- // border-radius: 4px;
606
- // cursor: pointer;
607
- // font-size: 14px;
608
- // ">选择元素</button>
609
- // <button id="generate-pdf-btn" style="
610
- // width: 100%;
611
- // padding: 8px 12px;
612
- // margin-bottom: 8px;
613
- // background: #28a745;
614
- // color: white;
615
- // border: none;
616
- // border-radius: 4px;
617
- // cursor: pointer;
618
- // font-size: 14px;
619
- // opacity: 0.5;
620
- // margin-left:0
621
- // " disabled>生成PDF</button>
622
- // <button id="close-panel-btn" style="
623
- // width: 100%;
624
- // padding: 6px 12px;
625
- // background: #dc3545;
626
- // color: white;
627
- // border: none;
628
- // border-radius: 4px;
629
- // cursor: pointer;
630
- // font-size: 12px;
631
- // margin - left: 0
632
- // ">关闭</button>
633
- // <div id="selected-info" style="
634
- // margin-top: 10px;
635
- // padding: 8px;
636
- // background: #f8f9fa;
637
- // border-radius: 4px;
638
- // font-size: 12px;
639
- // color: #666;
640
- // display: none;
641
- // "></div>
642
- // `;
643
-
644
- // document.body.appendChild(panel);
645
- // return panel;
646
- // }
647
-
648
- // // 创建选择覆盖层
649
- // function createOverlay() {
650
- // const overlay = document.createElement('div');
651
- // overlay.id = 'dompdf-overlay';
652
- // overlay.style.cssText = `
653
- // position: fixed;
654
- // top: 0;
655
- // left: 0;
656
- // width: 100%;
657
- // height: 100%;
658
- // background: rgba(0, 123, 186, 0.1);
659
- // z-index: 9999;
660
- // cursor: crosshair;
661
- // pointer-events: none;
662
- // `;
663
- // document.body.appendChild(overlay);
664
- // return overlay;
665
- // }
666
-
667
- // // 高亮元素
668
- // function highlightElement(element) {
669
- // // 移除之前的高亮
670
- // const prevHighlight = document.querySelector('.dompdf-highlight');
671
- // if (prevHighlight) {
672
- // prevHighlight.classList.remove('dompdf-highlight');
673
- // }
674
-
675
- // // 添加高亮样式
676
- // if (element && element !== document.body) {
677
- // element.classList.add('dompdf-highlight');
678
-
679
- // // 添加高亮CSS
680
- // if (!document.querySelector('#dompdf-highlight-style')) {
681
- // const style = document.createElement('style');
682
- // style.id = 'dompdf-highlight-style';
683
- // style.textContent = `
684
- // .dompdf-highlight {
685
- // outline: 3px solid #007cba !important;
686
- // outline-offset: 2px !important;
687
-
688
- // }
689
- // `;
690
- // document.head.appendChild(style);
691
- // }
692
- // }
693
- // }
694
-
695
- // // 开始选择模式
696
- // function startSelection() {
697
- // isSelecting = true;
698
- // overlay = createOverlay();
699
- // document.body.style.cursor = 'crosshair';
700
-
701
- // // 更新按钮状态
702
- // const selectBtn = document.getElementById('select-element-btn');
703
- // selectBtn.textContent = '取消选择';
704
- // selectBtn.style.background = '#dc3545';
705
-
706
- // // 添加事件监听
707
- // document.addEventListener('mouseover', onMouseOver);
708
- // document.addEventListener('click', onElementClick);
709
- // document.addEventListener('keydown', onKeyDown);
710
- // }
711
-
712
- // // 停止选择模式
713
- // function stopSelection() {
714
- // isSelecting = false;
715
- // document.body.style.cursor = '';
716
-
717
- // if (overlay) {
718
- // overlay.remove();
719
- // overlay = null;
720
- // }
721
-
722
- // // 更新按钮状态
723
- // const selectBtn = document.getElementById('select-element-btn');
724
- // selectBtn.textContent = '选择元素';
725
- // selectBtn.style.background = '#007cba';
726
-
727
- // // 移除事件监听
728
- // document.removeEventListener('mouseover', onMouseOver);
729
- // document.removeEventListener('click', onElementClick);
730
- // document.removeEventListener('keydown', onKeyDown);
731
- // }
732
-
733
- // // 鼠标悬停事件
734
- // function onMouseOver(e) {
735
- // if (!isSelecting) return;
736
- // e.preventDefault();
737
-
738
- // const element = e.target;
739
- // if (element !== controlPanel && !controlPanel.contains(element)) {
740
- // highlightElement(element);
741
- // }
742
- // }
743
-
744
- // // 元素点击事件
745
- // function onElementClick(e) {
746
- // if (!isSelecting) return;
747
- // e.preventDefault();
748
- // e.stopPropagation();
749
-
750
- // const element = e.target;
751
- // if (element !== controlPanel && !controlPanel.contains(element)) {
752
- // selectedElement = element;
753
- // stopSelection();
754
- // updateSelectedInfo(element);
755
- // enablePdfGeneration();
756
- // }
757
- // }
758
-
759
- // // 键盘事件(ESC取消选择)
760
- // function onKeyDown(e) {
761
- // if (e.key === 'Escape' && isSelecting) {
762
- // stopSelection();
763
- // }
764
- // }
765
-
766
- // // 更新选中元素信息
767
- // function updateSelectedInfo(element) {
768
- // const info = document.getElementById('selected-info');
769
- // const tagName = element.tagName.toLowerCase();
770
- // const className = element.className ? `.${element.className.split(' ').join('.')}` : '';
771
- // const id = element.id ? `#${element.id}` : '';
772
-
773
- // info.innerHTML = `
774
- // <strong>已选择元素:</strong><br>
775
- // 标签: ${tagName}${id}${className}<br>
776
- // 尺寸: ${element.offsetWidth} × ${element.offsetHeight}px
777
- // `;
778
- // info.style.display = 'block';
779
- // }
780
-
781
- // // 启用PDF生成按钮
782
- // function enablePdfGeneration() {
783
- // const pdfBtn = document.getElementById('generate-pdf-btn');
784
- // pdfBtn.disabled = false;
785
- // pdfBtn.style.opacity = '1';
786
- // }
787
-
788
- // // 生成PDF
789
- // async function generatePDF() {
790
- // if (!selectedElement) {
791
- // alert('请先选择要转换的元素');
792
- // return;
793
- // }
794
-
795
- // try {
796
- // // 显示加载状态
797
- // const pdfBtn = document.getElementById('generate-pdf-btn');
798
- // const originalText = pdfBtn.textContent;
799
- // pdfBtn.textContent = '生成中...';
800
- // pdfBtn.disabled = true;
801
-
802
- // // 使用html2canvas截图
803
- // dompdf(selectedElement, {
804
- // useCORS: true,
805
- // scale: 1,
806
- // fontConfig: {
807
- // fontFamily: 'SourceHanSansCN-Medium',
808
- // fontBase64: window.fontBase64, //
809
- // fontUrl: '',
810
- // fontWeight: 400,
811
- // fontStyle: 'normal'
812
- // },
813
- // }).then(function (blob) {
814
- // const url = URL.createObjectURL(blob);
815
- // const a = document.createElement('a');
816
- // a.href = url;
817
- // a.download = "example.pdf";
818
- // document.body.appendChild(a);
819
- // a.click();
820
-
821
- // // 清理
822
- // setTimeout(() => {
823
- // document.body.removeChild(a);
824
- // URL.revokeObjectURL(url);
825
- // }, 100);
826
- // // 恢复按钮状态
827
- // pdfBtn.textContent = originalText;
828
- // pdfBtn.disabled = false;
829
-
830
- // alert('PDF生成成功!');
831
- // }).catch(function (err) {
832
- // console.log('creacterr', err);
833
-
834
- // });;
835
-
836
-
837
-
838
-
839
-
840
- // } catch (error) {
841
- // console.error('PDF生成失败:', error);
842
- // alert('PDF生成失败,请检查控制台错误信息');
843
-
844
- // // 恢复按钮状态
845
- // const pdfBtn = document.getElementById('generate-pdf-btn');
846
- // pdfBtn.textContent = '生成PDF';
847
- // pdfBtn.disabled = false;
848
- // }
849
- // }
850
-
851
- // // 关闭面板
852
- // function closePanel() {
853
- // if (isSelecting) {
854
- // stopSelection();
855
- // }
856
-
857
- // // 移除高亮
858
- // const highlight = document.querySelector('.dompdf-highlight');
859
- // if (highlight) {
860
- // highlight.classList.remove('dompdf-highlight');
861
- // }
862
-
863
- // // 移除样式
864
- // const style = document.querySelector('#dompdf-highlight-style');
865
- // if (style) {
866
- // style.remove();
867
- // }
868
-
869
- // // 移除面板
870
- // if (controlPanel) {
871
- // controlPanel.remove();
872
- // controlPanel = null;
873
- // }
874
-
875
- // selectedElement = null;
876
- // }
877
-
878
- // // 初始化
879
- // function init() {
880
- // // 等待页面加载完成
881
- // if (document.readyState === 'loading') {
882
- // document.addEventListener('DOMContentLoaded', init);
883
- // return;
884
- // }
885
-
886
- // // 创建控制面板
887
- // controlPanel = createControlPanel();
888
-
889
- // // 绑定事件
890
- // document.getElementById('select-element-btn').addEventListener('click', () => {
891
- // if (isSelecting) {
892
- // stopSelection();
893
- // } else {
894
- // startSelection();
895
- // }
896
- // });
897
-
898
- // document.getElementById('generate-pdf-btn').addEventListener('click', generatePDF);
899
- // document.getElementById('close-panel-btn').addEventListener('click', closePanel);
900
-
901
- // // 让面板可拖拽
902
- // let isDragging = false;
903
- // let dragOffset = {
904
- // x: 0,
905
- // y: 0
906
- // };
907
-
908
- // controlPanel.addEventListener('mousedown', (e) => {
909
- // if (e.target.tagName !== 'BUTTON') {
910
- // isDragging = true;
911
- // dragOffset.x = e.clientX - controlPanel.offsetLeft;
912
- // dragOffset.y = e.clientY - controlPanel.offsetTop;
913
- // controlPanel.style.cursor = 'move';
914
- // }
915
- // });
916
-
917
- // document.addEventListener('mousemove', (e) => {
918
- // if (isDragging) {
919
- // controlPanel.style.left = (e.clientX - dragOffset.x) + 'px';
920
- // controlPanel.style.top = (e.clientY - dragOffset.y) + 'px';
921
- // controlPanel.style.right = 'auto';
922
- // }
923
- // });
924
-
925
- // document.addEventListener('mouseup', () => {
926
- // isDragging = false;
927
- // controlPanel.style.cursor = '';
928
- // });
929
-
930
- // console.log('dompdf 用户脚本已加载');
931
- // }
932
-
933
- // // 启动脚本
934
- // init();
935
-
936
- // })();