av6-pdf-engine 1.2.0 → 2.0.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.
package/dist/index.js CHANGED
@@ -34,6 +34,7 @@ __export(index_exports, {
34
34
  PdfEngineError: () => PdfEngineError,
35
35
  PdfEngineErrorCode: () => PdfEngineErrorCode,
36
36
  QR_ERROR_LEVEL: () => QR_ERROR_LEVEL,
37
+ images: () => images,
37
38
  isPdfEngineError: () => isPdfEngineError,
38
39
  renderCustomPdf: () => renderCustomPdf,
39
40
  renderCustomPdfToBuffer: () => renderCustomPdfToBuffer,
@@ -73,6 +74,11 @@ function toPdfEngineError(cause, fallback) {
73
74
  });
74
75
  }
75
76
 
77
+ // src/images/index.ts
78
+ var images = {
79
+ default: "data:image/png;base64,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"
80
+ };
81
+
76
82
  // src/renderer-engine/index.ts
77
83
  var import_fs = __toESM(require("fs"));
78
84
  var import_pdfkit = __toESM(require("pdfkit"));
@@ -251,7 +257,7 @@ var drawRotatedImage = (doc, src, x, y, width, height, rotationDeg) => {
251
257
  doc.image(src, x, y, { width, height });
252
258
  doc.restore();
253
259
  };
254
- var processImageBlock = (doc, ctx, block, y, env, ensureSpaceFor) => {
260
+ var processImageBlock = (doc, ctx, block, y, env, ensureSpaceFor, defaultImage) => {
255
261
  const imgSource = block.src;
256
262
  const imgWidth = block.width ?? 80;
257
263
  const imgHeight = block.height ?? 50;
@@ -279,7 +285,18 @@ var processImageBlock = (doc, ctx, block, y, env, ensureSpaceFor) => {
279
285
  height: imgHeight
280
286
  });
281
287
  } catch (e) {
282
- console.warn("Failed to load image:", e);
288
+ if (defaultImage !== void 0) {
289
+ try {
290
+ doc.image(defaultImage, x, startY, {
291
+ width: imgWidth,
292
+ height: imgHeight
293
+ });
294
+ } catch {
295
+ console.warn("Failed to render default image fallback:", e);
296
+ }
297
+ } else {
298
+ console.warn("Failed to load image:", e);
299
+ }
283
300
  }
284
301
  const newY = startY + imgHeight + mb;
285
302
  if (y === null) ctx.currentY = newY;
@@ -589,6 +606,7 @@ var toTableCell = (rawBlock) => {
589
606
  const tableCellInput = isTableCellInput(rawBlock) ? rawBlock : void 0;
590
607
  return {
591
608
  text: rawBlock.text,
609
+ blocks: tableCellInput?.blocks,
592
610
  italic: rawBlock.italic,
593
611
  underline: rawBlock.underline,
594
612
  link: rawBlock.link,
@@ -605,7 +623,8 @@ var toTableCell = (rawBlock) => {
605
623
  paddingTop: tableCellInput?.paddingTop,
606
624
  paddingRight: tableCellInput?.paddingRight,
607
625
  paddingBottom: tableCellInput?.paddingBottom,
608
- paddingLeft: tableCellInput?.paddingLeft
626
+ paddingLeft: tableCellInput?.paddingLeft,
627
+ border: tableCellInput?.border
609
628
  };
610
629
  };
611
630
  var resolvePathValue = (obj, dottedPath) => {
@@ -628,7 +647,7 @@ var interpolateCellText = (text, item, rowIndex) => {
628
647
  };
629
648
  var applyIterableData = (cell, item, rowIndex) => ({
630
649
  ...cell,
631
- text: interpolateCellText(cell.text, item, rowIndex)
650
+ text: cell.text !== void 0 ? interpolateCellText(cell.text, item, rowIndex) : void 0
632
651
  });
633
652
  var expandIterableRow = (table, bodyDef) => {
634
653
  const templateRow = bodyDef.content.map(toTableCell).filter((cell) => cell !== null);
@@ -658,7 +677,15 @@ var normalizeTableRows = (table) => {
658
677
  }
659
678
  return rows;
660
679
  };
661
- var measureTableHeight = (doc, table, env, styles, computeColumnPixelWidths2) => {
680
+ var measureCellHeight = (doc, cell, textWidth, paddingTop, paddingBottom, measureBlockHeightFn) => {
681
+ if (cell.blocks?.length && measureBlockHeightFn) {
682
+ const cellEnv = { marginLeft: 0, innerWidth: textWidth, allowPageBreak: false };
683
+ const contentH = cell.blocks.filter((b) => b.visible !== false).reduce((acc, b) => acc + measureBlockHeightFn(b, cellEnv), 0);
684
+ return contentH + paddingTop + paddingBottom;
685
+ }
686
+ return doc.heightOfString(cell.text ?? "", { width: textWidth }) + paddingTop + paddingBottom;
687
+ };
688
+ var measureTableHeight = (doc, table, env, styles, computeColumnPixelWidths2, measureBlockHeightFn) => {
662
689
  const localLeft = table.marginLeft ?? 0;
663
690
  const localRight = table.marginRight ?? 0;
664
691
  const width = Math.max(env.innerWidth - localLeft - localRight, 1);
@@ -681,9 +708,11 @@ var measureTableHeight = (doc, table, env, styles, computeColumnPixelWidths2) =>
681
708
  const paddingBottom = cell.paddingBottom ?? 2;
682
709
  const colW = getPlacedCellWidth(colWidths, startCol, colSpan);
683
710
  const textWidth = Math.max(colW - paddingLeft - paddingRight, 1);
684
- doc.font(getCellFontName(cell));
685
- doc.fontSize(cell.fontSize ?? 10);
686
- const h = doc.heightOfString(cell.text, { width: textWidth }) + paddingTop + paddingBottom;
711
+ if (!cell.blocks?.length) {
712
+ doc.font(getCellFontName(cell));
713
+ doc.fontSize(cell.fontSize ?? 10);
714
+ }
715
+ const h = measureCellHeight(doc, cell, textWidth, paddingTop, paddingBottom, measureBlockHeightFn);
687
716
  rowHeight = Math.max(rowHeight, h);
688
717
  });
689
718
  rowHeights.push(rowHeight);
@@ -700,9 +729,11 @@ var measureTableHeight = (doc, table, env, styles, computeColumnPixelWidths2) =>
700
729
  const paddingBottom = cell.paddingBottom ?? 2;
701
730
  const colW = getPlacedCellWidth(colWidths, startCol, colSpan);
702
731
  const textWidth = Math.max(colW - paddingLeft - paddingRight, 1);
703
- doc.font(getCellFontName(cell));
704
- doc.fontSize(cell.fontSize ?? 10);
705
- const neededHeight = doc.heightOfString(cell.text, { width: textWidth }) + paddingTop + paddingBottom;
732
+ if (!cell.blocks?.length) {
733
+ doc.font(getCellFontName(cell));
734
+ doc.fontSize(cell.fontSize ?? 10);
735
+ }
736
+ const neededHeight = measureCellHeight(doc, cell, textWidth, paddingTop, paddingBottom, measureBlockHeightFn);
706
737
  const currentGroupHeight = getRowSpanGroupHeight(rowHeights, rowIndex, rowSpan);
707
738
  if (neededHeight > currentGroupHeight) {
708
739
  const deficit = neededHeight - currentGroupHeight;
@@ -717,7 +748,7 @@ var measureTableHeight = (doc, table, env, styles, computeColumnPixelWidths2) =>
717
748
  totalHeight += table.marginBottom ?? 0;
718
749
  return totalHeight;
719
750
  };
720
- var processTableBlock = (doc, ctx, styles, table, y, env, computeColumnPixelWidths2, bottomLimitForContent, finishPage2) => {
751
+ var processTableBlock = (doc, ctx, styles, table, y, env, computeColumnPixelWidths2, bottomLimitForContent, finishPage2, renderBlockFn, measureBlockHeightFn) => {
721
752
  const localLeft = table.marginLeft ?? 0;
722
753
  const localRight = table.marginRight ?? 0;
723
754
  const baseLeft = env.marginLeft + localLeft;
@@ -733,7 +764,6 @@ var processTableBlock = (doc, ctx, styles, table, y, env, computeColumnPixelWidt
733
764
  hLineColor: "#ccc",
734
765
  vLineColor: "#ccc"
735
766
  };
736
- const borderAll = layout.border !== "none";
737
767
  const headerRows = table.headerRows ?? 0;
738
768
  const rows = normalizeTableRows(table);
739
769
  const buildPlacementAndHeights = (rows2) => {
@@ -753,9 +783,11 @@ var processTableBlock = (doc, ctx, styles, table, y, env, computeColumnPixelWidt
753
783
  const paddingBottom = cell.paddingBottom ?? 2;
754
784
  const colW = getPlacedCellWidth(colWidths, startCol, colSpan);
755
785
  const textWidth = Math.max(colW - paddingLeft - paddingRight, 1);
756
- doc.font(getCellFontName(cell));
757
- doc.fontSize(cell.fontSize ?? 10);
758
- const h = doc.heightOfString(cell.text, { width: textWidth }) + paddingTop + paddingBottom;
786
+ if (!cell.blocks?.length) {
787
+ doc.font(getCellFontName(cell));
788
+ doc.fontSize(cell.fontSize ?? 10);
789
+ }
790
+ const h = measureCellHeight(doc, cell, textWidth, paddingTop, paddingBottom, measureBlockHeightFn);
759
791
  rowHeight = Math.max(rowHeight, h);
760
792
  });
761
793
  rowHeights.push(rowHeight);
@@ -772,9 +804,11 @@ var processTableBlock = (doc, ctx, styles, table, y, env, computeColumnPixelWidt
772
804
  const paddingBottom = cell.paddingBottom ?? 2;
773
805
  const colW = getPlacedCellWidth(colWidths, startCol, colSpan);
774
806
  const textWidth = Math.max(colW - paddingLeft - paddingRight, 1);
775
- doc.font(getCellFontName(cell));
776
- doc.fontSize(cell.fontSize ?? 10);
777
- const neededHeight = doc.heightOfString(cell.text, { width: textWidth }) + paddingTop + paddingBottom;
807
+ if (!cell.blocks?.length) {
808
+ doc.font(getCellFontName(cell));
809
+ doc.fontSize(cell.fontSize ?? 10);
810
+ }
811
+ const neededHeight = measureCellHeight(doc, cell, textWidth, paddingTop, paddingBottom, measureBlockHeightFn);
778
812
  const currentGroupHeight = getRowSpanGroupHeight(rowHeights, rowIndex, rowSpan);
779
813
  if (neededHeight > currentGroupHeight) {
780
814
  const deficit = neededHeight - currentGroupHeight;
@@ -797,47 +831,60 @@ var processTableBlock = (doc, ctx, styles, table, y, env, computeColumnPixelWidt
797
831
  const paddingTop = cell.paddingTop ?? 2;
798
832
  const paddingBottom = cell.paddingBottom ?? 2;
799
833
  doc.save();
800
- if (cell.fillColor) {
801
- doc.rect(x, rowTop2, colW, drawHeight).fillOpacity(1).fill(cell.fillColor);
834
+ const columnStyle = table.layout?.columnStyles?.[startCol];
835
+ const rowStyle = table.layout?.rowStyles?.[rowIndex];
836
+ const fillColor = cell.fillColor ?? rowStyle?.fillColor ?? columnStyle?.fillColor;
837
+ if (fillColor) {
838
+ doc.rect(x, rowTop2, colW, drawHeight).fillOpacity(1).fill(fillColor);
802
839
  doc.fillOpacity(1);
803
840
  }
804
- doc.font(getCellFontName(cell));
805
- doc.fontSize(fontSize);
806
- doc.fillColor(cell.color ?? "black");
807
- const align = cell.align ?? "left";
808
841
  const textWidth = Math.max(colW - paddingLeft - paddingRight, 1);
809
- const textHeight = doc.heightOfString(cell.text, { width: textWidth });
810
- let textY = rowTop2 + paddingTop;
811
- if (isHeaderRow) {
812
- const available = Math.max(drawHeight - paddingTop - paddingBottom, 0);
813
- const offset = Math.max((available - textHeight) / 2, 0);
814
- textY = rowTop2 + paddingTop + offset;
842
+ const textY = rowTop2 + paddingTop;
843
+ if (cell.blocks?.length && renderBlockFn) {
844
+ const cellEnv = {
845
+ marginLeft: x + paddingLeft,
846
+ innerWidth: textWidth,
847
+ allowPageBreak: false
848
+ };
849
+ const savedY = ctx.currentY;
850
+ let contentY = textY;
851
+ for (const block of cell.blocks) {
852
+ if (!block || block.visible === false) continue;
853
+ if (block.type === "signature" || block.type === "pageBreak") continue;
854
+ contentY = renderBlockFn(block, contentY, cellEnv);
855
+ }
856
+ ctx.currentY = savedY;
857
+ } else {
858
+ doc.font(getCellFontName(cell));
859
+ doc.fontSize(fontSize);
860
+ doc.fillColor(cell.color ?? "black");
861
+ const align = cell.align ?? "left";
862
+ const textHeight = doc.heightOfString(cell.text ?? "", { width: textWidth });
863
+ let paintY = textY;
864
+ if (isHeaderRow) {
865
+ const available = Math.max(drawHeight - paddingTop - paddingBottom, 0);
866
+ const offset = Math.max((available - textHeight) / 2, 0);
867
+ paintY = rowTop2 + paddingTop + offset;
868
+ }
869
+ doc.text(cell.text ?? "", x + paddingLeft, paintY, {
870
+ width: textWidth,
871
+ align,
872
+ underline: !!cell.underline,
873
+ strike: !!cell.strike,
874
+ link: cell.link
875
+ });
815
876
  }
816
- doc.text(cell.text, x + paddingLeft, textY, {
817
- width: textWidth,
818
- align,
819
- underline: !!cell.underline,
820
- strike: !!cell.strike,
821
- link: cell.link
822
- });
823
877
  doc.restore();
824
- if (borderAll) {
825
- const bottomY = rowTop2 + drawHeight;
826
- doc.save();
827
- doc.lineWidth(0.5);
828
- doc.strokeColor(layout.hLineColor ?? "#ccc");
829
- if (drawTopBorder) {
830
- doc.moveTo(x, rowTop2).lineTo(x + colW, rowTop2).stroke();
831
- }
832
- doc.moveTo(x, bottomY).lineTo(x + colW, bottomY).stroke();
833
- doc.restore();
834
- doc.save();
835
- doc.lineWidth(0.5);
836
- doc.strokeColor(layout.vLineColor ?? "#ccc");
837
- doc.moveTo(x, rowTop2).lineTo(x, bottomY).stroke();
838
- doc.moveTo(x + colW, rowTop2).lineTo(x + colW, bottomY).stroke();
839
- doc.restore();
878
+ const effectiveBorder = getEffectiveCellBorder({
879
+ table,
880
+ cell,
881
+ rowIndex,
882
+ startCol
883
+ });
884
+ if (!drawTopBorder) {
885
+ effectiveBorder.top.visible = false;
840
886
  }
887
+ drawCellBorder(doc, effectiveBorder, x, rowTop2, colW, drawHeight);
841
888
  });
842
889
  return rowTop2 + rowHeight;
843
890
  };
@@ -877,6 +924,123 @@ var processTableBlock = (doc, ctx, styles, table, y, env, computeColumnPixelWidt
877
924
  if (y === null) ctx.currentY = newY;
878
925
  return newY;
879
926
  };
927
+ var SIDES = ["top", "right", "bottom", "left"];
928
+ var DEFAULT_BORDER_COLOR = "#ccc";
929
+ var DEFAULT_BORDER_WIDTH = 0.5;
930
+ var isBorderStyleObject = (value) => {
931
+ return !!value && typeof value === "object" && !Array.isArray(value);
932
+ };
933
+ var normalizeOneSideBorder = (value, fallback) => {
934
+ if (value === void 0) return fallback;
935
+ if (typeof value === "boolean") {
936
+ return {
937
+ ...fallback,
938
+ visible: value
939
+ };
940
+ }
941
+ return {
942
+ visible: value.visible ?? fallback.visible,
943
+ color: value.color ?? fallback.color,
944
+ width: value.width ?? fallback.width,
945
+ dash: value.dash ?? fallback.dash
946
+ };
947
+ };
948
+ var normalizeCellBorder = (input, fallback) => {
949
+ if (input === void 0) return fallback;
950
+ if (typeof input === "boolean") {
951
+ return SIDES.reduce((acc, side) => {
952
+ acc[side] = {
953
+ ...fallback[side],
954
+ visible: input
955
+ };
956
+ return acc;
957
+ }, {});
958
+ }
959
+ if (isBorderStyleObject(input) && ("visible" in input || "color" in input || "width" in input || "dash" in input)) {
960
+ return SIDES.reduce((acc, side) => {
961
+ acc[side] = normalizeOneSideBorder(input, fallback[side]);
962
+ return acc;
963
+ }, {});
964
+ }
965
+ const sideInput = input;
966
+ return SIDES.reduce((acc, side) => {
967
+ acc[side] = normalizeOneSideBorder(sideInput[side], fallback[side]);
968
+ return acc;
969
+ }, {});
970
+ };
971
+ var createDefaultTableBorder = (layout) => {
972
+ const visible = layout?.border !== "none";
973
+ const hColor = layout?.hLineColor ?? layout?.borderColor ?? DEFAULT_BORDER_COLOR;
974
+ const vColor = layout?.vLineColor ?? layout?.borderColor ?? DEFAULT_BORDER_COLOR;
975
+ const width = layout?.borderWidth ?? DEFAULT_BORDER_WIDTH;
976
+ return {
977
+ top: {
978
+ visible,
979
+ color: hColor,
980
+ width,
981
+ dash: layout?.borderDash
982
+ },
983
+ bottom: {
984
+ visible,
985
+ color: hColor,
986
+ width,
987
+ dash: layout?.borderDash
988
+ },
989
+ left: {
990
+ visible,
991
+ color: vColor,
992
+ width,
993
+ dash: layout?.borderDash
994
+ },
995
+ right: {
996
+ visible,
997
+ color: vColor,
998
+ width,
999
+ dash: layout?.borderDash
1000
+ }
1001
+ };
1002
+ };
1003
+ var getEffectiveCellBorder = (args) => {
1004
+ const { table, cell, rowIndex, startCol } = args;
1005
+ const tableBorder = createDefaultTableBorder(table.layout);
1006
+ const columnBorder = normalizeCellBorder(table.layout?.columnStyles?.[startCol]?.border, tableBorder);
1007
+ const rowBorder = normalizeCellBorder(table.layout?.rowStyles?.[rowIndex]?.border, columnBorder);
1008
+ return normalizeCellBorder(cell.border, rowBorder);
1009
+ };
1010
+ var drawBorderSide = (doc, side, border, x, y, width, height) => {
1011
+ if (!border.visible || border.width <= 0) return;
1012
+ doc.save();
1013
+ doc.lineWidth(border.width);
1014
+ doc.strokeColor(border.color);
1015
+ if (border.dash?.length) {
1016
+ doc.dash(border.dash[0], {
1017
+ space: border.dash[1] ?? border.dash[0]
1018
+ });
1019
+ } else {
1020
+ doc.undash();
1021
+ }
1022
+ switch (side) {
1023
+ case "top":
1024
+ doc.moveTo(x, y).lineTo(x + width, y).stroke();
1025
+ break;
1026
+ case "right":
1027
+ doc.moveTo(x + width, y).lineTo(x + width, y + height).stroke();
1028
+ break;
1029
+ case "bottom":
1030
+ doc.moveTo(x, y + height).lineTo(x + width, y + height).stroke();
1031
+ break;
1032
+ case "left":
1033
+ doc.moveTo(x, y).lineTo(x, y + height).stroke();
1034
+ break;
1035
+ }
1036
+ doc.restore();
1037
+ };
1038
+ var drawCellBorder = (doc, border, x, y, width, height) => {
1039
+ drawBorderSide(doc, "top", border.top, x, y, width, height);
1040
+ drawBorderSide(doc, "right", border.right, x, y, width, height);
1041
+ drawBorderSide(doc, "bottom", border.bottom, x, y, width, height);
1042
+ drawBorderSide(doc, "left", border.left, x, y, width, height);
1043
+ };
880
1044
 
881
1045
  // src/renderer-engine/blocks/text.ts
882
1046
  var processTextBlock = (doc, ctx, styles, block, y, env, ensureSpaceFor) => {
@@ -920,7 +1084,7 @@ var processTextBlock = (doc, ctx, styles, block, y, env, ensureSpaceFor) => {
920
1084
 
921
1085
  // src/renderer-engine/utils/block-renderer.ts
922
1086
  function createBlockRenderer(deps) {
923
- const { doc, ctx, styles, computeColumnPixelWidths: computeColumnPixelWidths2, finishPage: finishPage2, processSignatureBlock } = deps;
1087
+ const { doc, ctx, styles, computeColumnPixelWidths: computeColumnPixelWidths2, finishPage: finishPage2, processSignatureBlock, defaultImage } = deps;
924
1088
  const bottomLimitForContent = createBottomLimitForContent(doc, ctx);
925
1089
  const ensureSpaceFor = createEnsureSpaceFor(ctx, bottomLimitForContent, finishPage2);
926
1090
  const measureBlockHeight = createMeasureBlockHeight({
@@ -932,11 +1096,31 @@ function createBlockRenderer(deps) {
932
1096
  if (block.visible === false) {
933
1097
  return y ?? ctx.currentY;
934
1098
  }
1099
+ if ((block.backgroundColor || block.backgroundImage) && block.type !== "pageBreak" && block.type !== "signature") {
1100
+ const startY = y ?? ctx.currentY;
1101
+ const blockHeight = measureBlockHeight(block, env);
1102
+ const opacity = block.backgroundOpacity ?? 1;
1103
+ doc.save();
1104
+ if (block.backgroundColor) {
1105
+ doc.fillOpacity(opacity).rect(env.marginLeft, startY, env.innerWidth, blockHeight).fill(block.backgroundColor);
1106
+ doc.fillOpacity(1);
1107
+ }
1108
+ if (block.backgroundImage) {
1109
+ try {
1110
+ doc.image(block.backgroundImage, env.marginLeft, startY, {
1111
+ width: env.innerWidth,
1112
+ height: blockHeight
1113
+ });
1114
+ } catch (_) {
1115
+ }
1116
+ }
1117
+ doc.restore();
1118
+ }
935
1119
  switch (block.type) {
936
1120
  case "text":
937
1121
  return processTextBlock(doc, ctx, styles, block, y, env, ensureSpaceFor);
938
1122
  case "image":
939
- return processImageBlock(doc, ctx, block, y, env, ensureSpaceFor);
1123
+ return processImageBlock(doc, ctx, block, y, env, ensureSpaceFor, defaultImage);
940
1124
  case "qr": {
941
1125
  const qb = block;
942
1126
  const imageLike = {
@@ -950,7 +1134,7 @@ function createBlockRenderer(deps) {
950
1134
  marginLeft: qb.marginLeft,
951
1135
  marginRight: qb.marginRight
952
1136
  };
953
- return processImageBlock(doc, ctx, imageLike, y, env, ensureSpaceFor);
1137
+ return processImageBlock(doc, ctx, imageLike, y, env, ensureSpaceFor, defaultImage);
954
1138
  }
955
1139
  case "barcode":
956
1140
  return processBarcodeBlock(doc, ctx, block, y, env, ensureSpaceFor);
@@ -966,7 +1150,9 @@ function createBlockRenderer(deps) {
966
1150
  env,
967
1151
  computeColumnPixelWidths2,
968
1152
  bottomLimitForContent,
969
- finishPage2
1153
+ finishPage2,
1154
+ (b, blockY, blockEnv) => renderBlock(b, blockY, blockEnv),
1155
+ measureBlockHeight
970
1156
  );
971
1157
  case "columns":
972
1158
  return processColumnsBlock(
@@ -1209,14 +1395,24 @@ function drawHeader(doc, def, headerBandHeight, header, renderBlockArray) {
1209
1395
 
1210
1396
  // src/renderer-engine/utils/image-loader.ts
1211
1397
  var import_axios = __toESM(require("axios"));
1212
- async function normalizeImageSrc(src) {
1213
- if (!src) return src;
1398
+ async function normalizeImageSrc(src, fallback) {
1399
+ if (!src) return fallback ?? src;
1214
1400
  if (Buffer.isBuffer(src)) return src;
1401
+ if (src.startsWith("data:")) {
1402
+ const commaIdx = src.indexOf(",");
1403
+ if (commaIdx !== -1) {
1404
+ return Buffer.from(src.slice(commaIdx + 1), "base64");
1405
+ }
1406
+ }
1215
1407
  if (src.startsWith("http://") || src.startsWith("https://")) {
1216
1408
  try {
1217
1409
  const res = await import_axios.default.get(src, { responseType: "arraybuffer" });
1218
1410
  return Buffer.from(res.data);
1219
1411
  } catch (e) {
1412
+ if (fallback !== void 0) {
1413
+ console.warn(`Failed to fetch remote image "${src}", using default image.`);
1414
+ return fallback;
1415
+ }
1220
1416
  throw toPdfEngineError(e, {
1221
1417
  code: "PDF_ERROR_IMAGE_FETCH_FAILED" /* PDF_ERROR_IMAGE_FETCH_FAILED */,
1222
1418
  message: "Failed to fetch remote image for PDF.",
@@ -1228,23 +1424,47 @@ async function normalizeImageSrc(src) {
1228
1424
  }
1229
1425
  return src;
1230
1426
  }
1231
- async function materializeImagesInBlocks(blocks) {
1427
+ async function materializeImagesInBlocks(blocks, fallback) {
1232
1428
  const out = [];
1233
1429
  for (const block of blocks) {
1430
+ const blockAny = block;
1431
+ if (blockAny.backgroundImage) {
1432
+ blockAny.backgroundImage = await normalizeImageSrc(blockAny.backgroundImage, fallback);
1433
+ }
1234
1434
  if (block.type === "image") {
1235
1435
  const img = { ...block };
1236
- img.src = await normalizeImageSrc(img.src);
1436
+ img.src = await normalizeImageSrc(img.src, fallback);
1237
1437
  out.push(img);
1238
1438
  } else if (block.type === "columns") {
1239
1439
  out.push({
1240
1440
  ...block,
1241
- columns: await Promise.all(block.columns.map((col) => materializeImagesInBlocks(col)))
1441
+ columns: await Promise.all(block.columns.map((col) => materializeImagesInBlocks(col, fallback)))
1242
1442
  });
1243
1443
  } else if (block.type === "signature" && block.blocks) {
1244
1444
  out.push({
1245
1445
  ...block,
1246
- blocks: await materializeImagesInBlocks(block.blocks)
1446
+ blocks: await materializeImagesInBlocks(block.blocks, fallback)
1247
1447
  });
1448
+ } else if (block.type === "table") {
1449
+ const tb = block;
1450
+ const newBody = await Promise.all(
1451
+ tb.body.map(
1452
+ async (entry) => {
1453
+ const materializeCell = async (cell) => {
1454
+ if (!cell.blocks?.length) return cell;
1455
+ return { ...cell, blocks: await materializeImagesInBlocks(cell.blocks, fallback) };
1456
+ };
1457
+ if (Array.isArray(entry)) {
1458
+ return await Promise.all(entry.map(materializeCell));
1459
+ }
1460
+ if (entry && typeof entry === "object" && "content" in entry && Array.isArray(entry.content)) {
1461
+ return { ...entry, content: await Promise.all(entry.content.map(materializeCell)) };
1462
+ }
1463
+ return entry;
1464
+ }
1465
+ )
1466
+ );
1467
+ out.push({ ...tb, body: newBody });
1248
1468
  } else {
1249
1469
  out.push(block);
1250
1470
  }
@@ -1398,7 +1618,7 @@ function createMeasureBlockHeight(deps) {
1398
1618
  innerWidth,
1399
1619
  allowPageBreak: false
1400
1620
  };
1401
- const h = measureTableHeight(doc, b, fakeEnv, styles, computeColumnPixelWidths2);
1621
+ const h = measureTableHeight(doc, b, fakeEnv, styles, computeColumnPixelWidths2, measure);
1402
1622
  return mt + h + mb;
1403
1623
  };
1404
1624
  const measureColumns = (b, env) => {
@@ -1712,6 +1932,26 @@ async function materializeQrAndBarcodesInBlocks(blocks) {
1712
1932
  bb.src = buf;
1713
1933
  }
1714
1934
  out.push(bb);
1935
+ } else if (block.type === "table") {
1936
+ const tb = block;
1937
+ const newBody = await Promise.all(
1938
+ tb.body.map(
1939
+ async (entry) => {
1940
+ const materializeCell = async (cell) => {
1941
+ if (!cell.blocks?.length) return cell;
1942
+ return { ...cell, blocks: await materializeQrAndBarcodesInBlocks(cell.blocks) };
1943
+ };
1944
+ if (Array.isArray(entry)) {
1945
+ return await Promise.all(entry.map(materializeCell));
1946
+ }
1947
+ if (entry && typeof entry === "object" && "content" in entry && Array.isArray(entry.content)) {
1948
+ return { ...entry, content: await Promise.all(entry.content.map(materializeCell)) };
1949
+ }
1950
+ return entry;
1951
+ }
1952
+ )
1953
+ );
1954
+ out.push({ ...tb, body: newBody });
1715
1955
  } else {
1716
1956
  out.push(block);
1717
1957
  }
@@ -1967,23 +2207,28 @@ function drawWatermarkForPage(doc, watermark, pageNumber, isLast) {
1967
2207
  }
1968
2208
 
1969
2209
  // src/renderer-engine/index.ts
2210
+ var BUILT_IN_DEFAULT_IMAGE = Buffer.from(
2211
+ images.default.slice(images.default.indexOf(",") + 1),
2212
+ "base64"
2213
+ );
1970
2214
  async function renderCustomPdf(def, outputPath) {
2215
+ const fallbackImage = def.defaultImage ?? BUILT_IN_DEFAULT_IMAGE;
1971
2216
  if (def.header) {
1972
2217
  def.header.blocks = await materializeQrAndBarcodesInBlocks(def.header.blocks);
1973
- def.header.blocks = await materializeImagesInBlocks(def.header.blocks);
2218
+ def.header.blocks = await materializeImagesInBlocks(def.header.blocks, fallbackImage);
1974
2219
  }
1975
2220
  def.content = await materializeQrAndBarcodesInBlocks(def.content);
1976
- def.content = await materializeImagesInBlocks(def.content);
2221
+ def.content = await materializeImagesInBlocks(def.content, fallbackImage);
1977
2222
  if (def.pageBackground?.src) {
1978
- def.pageBackground.src = await normalizeImageSrc(def.pageBackground.src);
2223
+ def.pageBackground.src = await normalizeImageSrc(def.pageBackground.src, fallbackImage);
1979
2224
  }
1980
2225
  if (def.header?.backgroundImage) {
1981
- def.header.backgroundImage = await normalizeImageSrc(def.header.backgroundImage);
2226
+ def.header.backgroundImage = await normalizeImageSrc(def.header.backgroundImage, fallbackImage);
1982
2227
  }
1983
2228
  if (def.footer && typeof def.footer !== "function") {
1984
2229
  const footer = def.footer;
1985
2230
  if (footer.backgroundImage) {
1986
- footer.backgroundImage = await normalizeImageSrc(footer.backgroundImage);
2231
+ footer.backgroundImage = await normalizeImageSrc(footer.backgroundImage, fallbackImage);
1987
2232
  }
1988
2233
  }
1989
2234
  return new Promise((resolve, reject) => {
@@ -2034,7 +2279,8 @@ async function renderCustomPdf(def, outputPath) {
2034
2279
  styles,
2035
2280
  computeColumnPixelWidths,
2036
2281
  finishPage: finishPage2,
2037
- processSignatureBlock
2282
+ processSignatureBlock,
2283
+ defaultImage: fallbackImage
2038
2284
  });
2039
2285
  const startNewPageLayout = createStartNewPageLayout({
2040
2286
  doc,
@@ -2073,22 +2319,23 @@ async function renderCustomPdf(def, outputPath) {
2073
2319
  });
2074
2320
  }
2075
2321
  async function renderCustomPdfToBuffer(def) {
2322
+ const fallbackImage = def.defaultImage ?? BUILT_IN_DEFAULT_IMAGE;
2076
2323
  if (def.header) {
2077
2324
  def.header.blocks = await materializeQrAndBarcodesInBlocks(def.header.blocks);
2078
- def.header.blocks = await materializeImagesInBlocks(def.header.blocks);
2325
+ def.header.blocks = await materializeImagesInBlocks(def.header.blocks, fallbackImage);
2079
2326
  }
2080
2327
  def.content = await materializeQrAndBarcodesInBlocks(def.content);
2081
- def.content = await materializeImagesInBlocks(def.content);
2328
+ def.content = await materializeImagesInBlocks(def.content, fallbackImage);
2082
2329
  if (def.pageBackground?.src) {
2083
- def.pageBackground.src = await normalizeImageSrc(def.pageBackground.src);
2330
+ def.pageBackground.src = await normalizeImageSrc(def.pageBackground.src, fallbackImage);
2084
2331
  }
2085
2332
  if (def.header?.backgroundImage) {
2086
- def.header.backgroundImage = await normalizeImageSrc(def.header.backgroundImage);
2333
+ def.header.backgroundImage = await normalizeImageSrc(def.header.backgroundImage, fallbackImage);
2087
2334
  }
2088
2335
  if (def.footer && typeof def.footer !== "function") {
2089
2336
  const footer = def.footer;
2090
2337
  if (footer.backgroundImage) {
2091
- footer.backgroundImage = await normalizeImageSrc(footer.backgroundImage);
2338
+ footer.backgroundImage = await normalizeImageSrc(footer.backgroundImage, fallbackImage);
2092
2339
  }
2093
2340
  }
2094
2341
  return new Promise((resolve, reject) => {
@@ -2154,7 +2401,8 @@ async function renderCustomPdfToBuffer(def) {
2154
2401
  styles,
2155
2402
  computeColumnPixelWidths,
2156
2403
  finishPage: finishPage2,
2157
- processSignatureBlock
2404
+ processSignatureBlock,
2405
+ defaultImage: fallbackImage
2158
2406
  });
2159
2407
  const startNewPageLayout = createStartNewPageLayout({
2160
2408
  doc,
@@ -2185,6 +2433,7 @@ async function renderCustomPdfToBuffer(def) {
2185
2433
  PdfEngineError,
2186
2434
  PdfEngineErrorCode,
2187
2435
  QR_ERROR_LEVEL,
2436
+ images,
2188
2437
  isPdfEngineError,
2189
2438
  renderCustomPdf,
2190
2439
  renderCustomPdfToBuffer,