html2canvas-pro 1.5.6 → 1.5.7

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.
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * undefined 1.5.6 <https://yorickshan.github.io/html2canvas-pro/>
2
+ * undefined 1.5.7 <https://yorickshan.github.io/html2canvas-pro/>
3
3
  * Copyright (c) 2024 yorickshan <https://github.com/yorickshan>
4
4
  * Released under MIT License
5
5
  */
@@ -5575,7 +5575,8 @@
5575
5575
  var parseNodeTree = function (context, node, parent, root) {
5576
5576
  for (var childNode = node.firstChild, nextNode = void 0; childNode; childNode = nextNode) {
5577
5577
  nextNode = childNode.nextSibling;
5578
- if (isTextNode(childNode) && childNode.data.trim().length > 0) {
5578
+ // Fixes #2238 #1624 - Fix the issue of TextNode content being overlooked in rendering due to being perceived as blank by trim().
5579
+ if (isTextNode(childNode) && childNode.data.length > 0) {
5579
5580
  parent.textNodes.push(new TextContainer(context, childNode, parent.styles));
5580
5581
  }
5581
5582
  else if (isElementNode(childNode)) {
@@ -7565,7 +7566,15 @@
7565
7566
  CanvasRenderer.prototype.renderTextWithLetterSpacing = function (text, letterSpacing, baseline) {
7566
7567
  var _this = this;
7567
7568
  if (letterSpacing === 0) {
7568
- this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + baseline);
7569
+ // Fixed an issue with characters moving up in non-Firefox.
7570
+ // https://github.com/niklasvh/html2canvas/issues/2107#issuecomment-692462900
7571
+ if (navigator.userAgent.indexOf('Firefox') === -1) {
7572
+ this.ctx.textBaseline = 'ideographic';
7573
+ this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + text.bounds.height);
7574
+ }
7575
+ else {
7576
+ this.ctx.fillText(text.text, text.bounds.left, text.bounds.top + baseline);
7577
+ }
7569
7578
  }
7570
7579
  else {
7571
7580
  var letters = segmentGraphemes(text.text);
@@ -7591,15 +7600,15 @@
7591
7600
  };
7592
7601
  CanvasRenderer.prototype.renderTextNode = function (text, styles) {
7593
7602
  return __awaiter(this, void 0, void 0, function () {
7594
- var _a, font, fontFamily, fontSize, _b, baseline, middle, paintOrder;
7603
+ var _a, font, fontFamily, fontSize, baseline, paintOrder;
7595
7604
  var _this = this;
7596
- return __generator(this, function (_c) {
7605
+ return __generator(this, function (_b) {
7597
7606
  _a = this.createFontStyle(styles), font = _a[0], fontFamily = _a[1], fontSize = _a[2];
7598
7607
  this.ctx.font = font;
7599
7608
  this.ctx.direction = styles.direction === 1 /* DIRECTION.RTL */ ? 'rtl' : 'ltr';
7600
7609
  this.ctx.textAlign = 'left';
7601
7610
  this.ctx.textBaseline = 'alphabetic';
7602
- _b = this.fontMetrics.getMetrics(fontFamily, fontSize), baseline = _b.baseline, middle = _b.middle;
7611
+ baseline = this.fontMetrics.getMetrics(fontFamily, fontSize).baseline;
7603
7612
  paintOrder = styles.paintOrder;
7604
7613
  text.textBounds.forEach(function (text) {
7605
7614
  paintOrder.forEach(function (paintOrderLayer) {
@@ -7626,20 +7635,18 @@
7626
7635
  }
7627
7636
  if (styles.textDecorationLine.length) {
7628
7637
  _this.ctx.fillStyle = asString(styles.textDecorationColor || styles.color);
7638
+ var decorationLineHeight_1 = 1;
7629
7639
  styles.textDecorationLine.forEach(function (textDecorationLine) {
7640
+ // Fix the issue where textDecorationLine exhibits x-axis positioning errors on high-resolution devices due to varying devicePixelRatio, corrected by using relative values of element heights.
7630
7641
  switch (textDecorationLine) {
7631
7642
  case 1 /* TEXT_DECORATION_LINE.UNDERLINE */:
7632
- // Draws a line at the baseline of the font
7633
- // TODO As some browsers display the line as more than 1px if the font-size is big,
7634
- // need to take that into account both in position and size
7635
- _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top + baseline), text.bounds.width, 1);
7643
+ _this.ctx.fillRect(text.bounds.left, text.bounds.top + text.bounds.height - decorationLineHeight_1, text.bounds.width, decorationLineHeight_1);
7636
7644
  break;
7637
7645
  case 2 /* TEXT_DECORATION_LINE.OVERLINE */:
7638
- _this.ctx.fillRect(text.bounds.left, Math.round(text.bounds.top), text.bounds.width, 1);
7646
+ _this.ctx.fillRect(text.bounds.left, text.bounds.top, text.bounds.width, decorationLineHeight_1);
7639
7647
  break;
7640
7648
  case 3 /* TEXT_DECORATION_LINE.LINE_THROUGH */:
7641
- // TODO try and find exact position for line-through
7642
- _this.ctx.fillRect(text.bounds.left, Math.ceil(text.bounds.top + middle), text.bounds.width, 1);
7649
+ _this.ctx.fillRect(text.bounds.left, text.bounds.top + (text.bounds.height / 2 - decorationLineHeight_1 / 2), text.bounds.width, decorationLineHeight_1);
7643
7650
  break;
7644
7651
  }
7645
7652
  });