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.mjs CHANGED
@@ -30,6 +30,11 @@ function toPdfEngineError(cause, fallback) {
30
30
  });
31
31
  }
32
32
 
33
+ // src/images/index.ts
34
+ var images = {
35
+ default: "data:image/png;base64,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"
36
+ };
37
+
33
38
  // src/renderer-engine/index.ts
34
39
  import fs from "fs";
35
40
  import PDFDocument from "pdfkit";
@@ -208,7 +213,7 @@ var drawRotatedImage = (doc, src, x, y, width, height, rotationDeg) => {
208
213
  doc.image(src, x, y, { width, height });
209
214
  doc.restore();
210
215
  };
211
- var processImageBlock = (doc, ctx, block, y, env, ensureSpaceFor) => {
216
+ var processImageBlock = (doc, ctx, block, y, env, ensureSpaceFor, defaultImage) => {
212
217
  const imgSource = block.src;
213
218
  const imgWidth = block.width ?? 80;
214
219
  const imgHeight = block.height ?? 50;
@@ -236,7 +241,18 @@ var processImageBlock = (doc, ctx, block, y, env, ensureSpaceFor) => {
236
241
  height: imgHeight
237
242
  });
238
243
  } catch (e) {
239
- console.warn("Failed to load image:", e);
244
+ if (defaultImage !== void 0) {
245
+ try {
246
+ doc.image(defaultImage, x, startY, {
247
+ width: imgWidth,
248
+ height: imgHeight
249
+ });
250
+ } catch {
251
+ console.warn("Failed to render default image fallback:", e);
252
+ }
253
+ } else {
254
+ console.warn("Failed to load image:", e);
255
+ }
240
256
  }
241
257
  const newY = startY + imgHeight + mb;
242
258
  if (y === null) ctx.currentY = newY;
@@ -546,6 +562,7 @@ var toTableCell = (rawBlock) => {
546
562
  const tableCellInput = isTableCellInput(rawBlock) ? rawBlock : void 0;
547
563
  return {
548
564
  text: rawBlock.text,
565
+ blocks: tableCellInput?.blocks,
549
566
  italic: rawBlock.italic,
550
567
  underline: rawBlock.underline,
551
568
  link: rawBlock.link,
@@ -562,7 +579,8 @@ var toTableCell = (rawBlock) => {
562
579
  paddingTop: tableCellInput?.paddingTop,
563
580
  paddingRight: tableCellInput?.paddingRight,
564
581
  paddingBottom: tableCellInput?.paddingBottom,
565
- paddingLeft: tableCellInput?.paddingLeft
582
+ paddingLeft: tableCellInput?.paddingLeft,
583
+ border: tableCellInput?.border
566
584
  };
567
585
  };
568
586
  var resolvePathValue = (obj, dottedPath) => {
@@ -585,7 +603,7 @@ var interpolateCellText = (text, item, rowIndex) => {
585
603
  };
586
604
  var applyIterableData = (cell, item, rowIndex) => ({
587
605
  ...cell,
588
- text: interpolateCellText(cell.text, item, rowIndex)
606
+ text: cell.text !== void 0 ? interpolateCellText(cell.text, item, rowIndex) : void 0
589
607
  });
590
608
  var expandIterableRow = (table, bodyDef) => {
591
609
  const templateRow = bodyDef.content.map(toTableCell).filter((cell) => cell !== null);
@@ -615,7 +633,15 @@ var normalizeTableRows = (table) => {
615
633
  }
616
634
  return rows;
617
635
  };
618
- var measureTableHeight = (doc, table, env, styles, computeColumnPixelWidths2) => {
636
+ var measureCellHeight = (doc, cell, textWidth, paddingTop, paddingBottom, measureBlockHeightFn) => {
637
+ if (cell.blocks?.length && measureBlockHeightFn) {
638
+ const cellEnv = { marginLeft: 0, innerWidth: textWidth, allowPageBreak: false };
639
+ const contentH = cell.blocks.filter((b) => b.visible !== false).reduce((acc, b) => acc + measureBlockHeightFn(b, cellEnv), 0);
640
+ return contentH + paddingTop + paddingBottom;
641
+ }
642
+ return doc.heightOfString(cell.text ?? "", { width: textWidth }) + paddingTop + paddingBottom;
643
+ };
644
+ var measureTableHeight = (doc, table, env, styles, computeColumnPixelWidths2, measureBlockHeightFn) => {
619
645
  const localLeft = table.marginLeft ?? 0;
620
646
  const localRight = table.marginRight ?? 0;
621
647
  const width = Math.max(env.innerWidth - localLeft - localRight, 1);
@@ -638,9 +664,11 @@ var measureTableHeight = (doc, table, env, styles, computeColumnPixelWidths2) =>
638
664
  const paddingBottom = cell.paddingBottom ?? 2;
639
665
  const colW = getPlacedCellWidth(colWidths, startCol, colSpan);
640
666
  const textWidth = Math.max(colW - paddingLeft - paddingRight, 1);
641
- doc.font(getCellFontName(cell));
642
- doc.fontSize(cell.fontSize ?? 10);
643
- const h = doc.heightOfString(cell.text, { width: textWidth }) + paddingTop + paddingBottom;
667
+ if (!cell.blocks?.length) {
668
+ doc.font(getCellFontName(cell));
669
+ doc.fontSize(cell.fontSize ?? 10);
670
+ }
671
+ const h = measureCellHeight(doc, cell, textWidth, paddingTop, paddingBottom, measureBlockHeightFn);
644
672
  rowHeight = Math.max(rowHeight, h);
645
673
  });
646
674
  rowHeights.push(rowHeight);
@@ -657,9 +685,11 @@ var measureTableHeight = (doc, table, env, styles, computeColumnPixelWidths2) =>
657
685
  const paddingBottom = cell.paddingBottom ?? 2;
658
686
  const colW = getPlacedCellWidth(colWidths, startCol, colSpan);
659
687
  const textWidth = Math.max(colW - paddingLeft - paddingRight, 1);
660
- doc.font(getCellFontName(cell));
661
- doc.fontSize(cell.fontSize ?? 10);
662
- const neededHeight = doc.heightOfString(cell.text, { width: textWidth }) + paddingTop + paddingBottom;
688
+ if (!cell.blocks?.length) {
689
+ doc.font(getCellFontName(cell));
690
+ doc.fontSize(cell.fontSize ?? 10);
691
+ }
692
+ const neededHeight = measureCellHeight(doc, cell, textWidth, paddingTop, paddingBottom, measureBlockHeightFn);
663
693
  const currentGroupHeight = getRowSpanGroupHeight(rowHeights, rowIndex, rowSpan);
664
694
  if (neededHeight > currentGroupHeight) {
665
695
  const deficit = neededHeight - currentGroupHeight;
@@ -674,7 +704,7 @@ var measureTableHeight = (doc, table, env, styles, computeColumnPixelWidths2) =>
674
704
  totalHeight += table.marginBottom ?? 0;
675
705
  return totalHeight;
676
706
  };
677
- var processTableBlock = (doc, ctx, styles, table, y, env, computeColumnPixelWidths2, bottomLimitForContent, finishPage2) => {
707
+ var processTableBlock = (doc, ctx, styles, table, y, env, computeColumnPixelWidths2, bottomLimitForContent, finishPage2, renderBlockFn, measureBlockHeightFn) => {
678
708
  const localLeft = table.marginLeft ?? 0;
679
709
  const localRight = table.marginRight ?? 0;
680
710
  const baseLeft = env.marginLeft + localLeft;
@@ -690,7 +720,6 @@ var processTableBlock = (doc, ctx, styles, table, y, env, computeColumnPixelWidt
690
720
  hLineColor: "#ccc",
691
721
  vLineColor: "#ccc"
692
722
  };
693
- const borderAll = layout.border !== "none";
694
723
  const headerRows = table.headerRows ?? 0;
695
724
  const rows = normalizeTableRows(table);
696
725
  const buildPlacementAndHeights = (rows2) => {
@@ -710,9 +739,11 @@ var processTableBlock = (doc, ctx, styles, table, y, env, computeColumnPixelWidt
710
739
  const paddingBottom = cell.paddingBottom ?? 2;
711
740
  const colW = getPlacedCellWidth(colWidths, startCol, colSpan);
712
741
  const textWidth = Math.max(colW - paddingLeft - paddingRight, 1);
713
- doc.font(getCellFontName(cell));
714
- doc.fontSize(cell.fontSize ?? 10);
715
- const h = doc.heightOfString(cell.text, { width: textWidth }) + paddingTop + paddingBottom;
742
+ if (!cell.blocks?.length) {
743
+ doc.font(getCellFontName(cell));
744
+ doc.fontSize(cell.fontSize ?? 10);
745
+ }
746
+ const h = measureCellHeight(doc, cell, textWidth, paddingTop, paddingBottom, measureBlockHeightFn);
716
747
  rowHeight = Math.max(rowHeight, h);
717
748
  });
718
749
  rowHeights.push(rowHeight);
@@ -729,9 +760,11 @@ var processTableBlock = (doc, ctx, styles, table, y, env, computeColumnPixelWidt
729
760
  const paddingBottom = cell.paddingBottom ?? 2;
730
761
  const colW = getPlacedCellWidth(colWidths, startCol, colSpan);
731
762
  const textWidth = Math.max(colW - paddingLeft - paddingRight, 1);
732
- doc.font(getCellFontName(cell));
733
- doc.fontSize(cell.fontSize ?? 10);
734
- const neededHeight = doc.heightOfString(cell.text, { width: textWidth }) + paddingTop + paddingBottom;
763
+ if (!cell.blocks?.length) {
764
+ doc.font(getCellFontName(cell));
765
+ doc.fontSize(cell.fontSize ?? 10);
766
+ }
767
+ const neededHeight = measureCellHeight(doc, cell, textWidth, paddingTop, paddingBottom, measureBlockHeightFn);
735
768
  const currentGroupHeight = getRowSpanGroupHeight(rowHeights, rowIndex, rowSpan);
736
769
  if (neededHeight > currentGroupHeight) {
737
770
  const deficit = neededHeight - currentGroupHeight;
@@ -754,47 +787,60 @@ var processTableBlock = (doc, ctx, styles, table, y, env, computeColumnPixelWidt
754
787
  const paddingTop = cell.paddingTop ?? 2;
755
788
  const paddingBottom = cell.paddingBottom ?? 2;
756
789
  doc.save();
757
- if (cell.fillColor) {
758
- doc.rect(x, rowTop2, colW, drawHeight).fillOpacity(1).fill(cell.fillColor);
790
+ const columnStyle = table.layout?.columnStyles?.[startCol];
791
+ const rowStyle = table.layout?.rowStyles?.[rowIndex];
792
+ const fillColor = cell.fillColor ?? rowStyle?.fillColor ?? columnStyle?.fillColor;
793
+ if (fillColor) {
794
+ doc.rect(x, rowTop2, colW, drawHeight).fillOpacity(1).fill(fillColor);
759
795
  doc.fillOpacity(1);
760
796
  }
761
- doc.font(getCellFontName(cell));
762
- doc.fontSize(fontSize);
763
- doc.fillColor(cell.color ?? "black");
764
- const align = cell.align ?? "left";
765
797
  const textWidth = Math.max(colW - paddingLeft - paddingRight, 1);
766
- const textHeight = doc.heightOfString(cell.text, { width: textWidth });
767
- let textY = rowTop2 + paddingTop;
768
- if (isHeaderRow) {
769
- const available = Math.max(drawHeight - paddingTop - paddingBottom, 0);
770
- const offset = Math.max((available - textHeight) / 2, 0);
771
- textY = rowTop2 + paddingTop + offset;
798
+ const textY = rowTop2 + paddingTop;
799
+ if (cell.blocks?.length && renderBlockFn) {
800
+ const cellEnv = {
801
+ marginLeft: x + paddingLeft,
802
+ innerWidth: textWidth,
803
+ allowPageBreak: false
804
+ };
805
+ const savedY = ctx.currentY;
806
+ let contentY = textY;
807
+ for (const block of cell.blocks) {
808
+ if (!block || block.visible === false) continue;
809
+ if (block.type === "signature" || block.type === "pageBreak") continue;
810
+ contentY = renderBlockFn(block, contentY, cellEnv);
811
+ }
812
+ ctx.currentY = savedY;
813
+ } else {
814
+ doc.font(getCellFontName(cell));
815
+ doc.fontSize(fontSize);
816
+ doc.fillColor(cell.color ?? "black");
817
+ const align = cell.align ?? "left";
818
+ const textHeight = doc.heightOfString(cell.text ?? "", { width: textWidth });
819
+ let paintY = textY;
820
+ if (isHeaderRow) {
821
+ const available = Math.max(drawHeight - paddingTop - paddingBottom, 0);
822
+ const offset = Math.max((available - textHeight) / 2, 0);
823
+ paintY = rowTop2 + paddingTop + offset;
824
+ }
825
+ doc.text(cell.text ?? "", x + paddingLeft, paintY, {
826
+ width: textWidth,
827
+ align,
828
+ underline: !!cell.underline,
829
+ strike: !!cell.strike,
830
+ link: cell.link
831
+ });
772
832
  }
773
- doc.text(cell.text, x + paddingLeft, textY, {
774
- width: textWidth,
775
- align,
776
- underline: !!cell.underline,
777
- strike: !!cell.strike,
778
- link: cell.link
779
- });
780
833
  doc.restore();
781
- if (borderAll) {
782
- const bottomY = rowTop2 + drawHeight;
783
- doc.save();
784
- doc.lineWidth(0.5);
785
- doc.strokeColor(layout.hLineColor ?? "#ccc");
786
- if (drawTopBorder) {
787
- doc.moveTo(x, rowTop2).lineTo(x + colW, rowTop2).stroke();
788
- }
789
- doc.moveTo(x, bottomY).lineTo(x + colW, bottomY).stroke();
790
- doc.restore();
791
- doc.save();
792
- doc.lineWidth(0.5);
793
- doc.strokeColor(layout.vLineColor ?? "#ccc");
794
- doc.moveTo(x, rowTop2).lineTo(x, bottomY).stroke();
795
- doc.moveTo(x + colW, rowTop2).lineTo(x + colW, bottomY).stroke();
796
- doc.restore();
834
+ const effectiveBorder = getEffectiveCellBorder({
835
+ table,
836
+ cell,
837
+ rowIndex,
838
+ startCol
839
+ });
840
+ if (!drawTopBorder) {
841
+ effectiveBorder.top.visible = false;
797
842
  }
843
+ drawCellBorder(doc, effectiveBorder, x, rowTop2, colW, drawHeight);
798
844
  });
799
845
  return rowTop2 + rowHeight;
800
846
  };
@@ -834,6 +880,123 @@ var processTableBlock = (doc, ctx, styles, table, y, env, computeColumnPixelWidt
834
880
  if (y === null) ctx.currentY = newY;
835
881
  return newY;
836
882
  };
883
+ var SIDES = ["top", "right", "bottom", "left"];
884
+ var DEFAULT_BORDER_COLOR = "#ccc";
885
+ var DEFAULT_BORDER_WIDTH = 0.5;
886
+ var isBorderStyleObject = (value) => {
887
+ return !!value && typeof value === "object" && !Array.isArray(value);
888
+ };
889
+ var normalizeOneSideBorder = (value, fallback) => {
890
+ if (value === void 0) return fallback;
891
+ if (typeof value === "boolean") {
892
+ return {
893
+ ...fallback,
894
+ visible: value
895
+ };
896
+ }
897
+ return {
898
+ visible: value.visible ?? fallback.visible,
899
+ color: value.color ?? fallback.color,
900
+ width: value.width ?? fallback.width,
901
+ dash: value.dash ?? fallback.dash
902
+ };
903
+ };
904
+ var normalizeCellBorder = (input, fallback) => {
905
+ if (input === void 0) return fallback;
906
+ if (typeof input === "boolean") {
907
+ return SIDES.reduce((acc, side) => {
908
+ acc[side] = {
909
+ ...fallback[side],
910
+ visible: input
911
+ };
912
+ return acc;
913
+ }, {});
914
+ }
915
+ if (isBorderStyleObject(input) && ("visible" in input || "color" in input || "width" in input || "dash" in input)) {
916
+ return SIDES.reduce((acc, side) => {
917
+ acc[side] = normalizeOneSideBorder(input, fallback[side]);
918
+ return acc;
919
+ }, {});
920
+ }
921
+ const sideInput = input;
922
+ return SIDES.reduce((acc, side) => {
923
+ acc[side] = normalizeOneSideBorder(sideInput[side], fallback[side]);
924
+ return acc;
925
+ }, {});
926
+ };
927
+ var createDefaultTableBorder = (layout) => {
928
+ const visible = layout?.border !== "none";
929
+ const hColor = layout?.hLineColor ?? layout?.borderColor ?? DEFAULT_BORDER_COLOR;
930
+ const vColor = layout?.vLineColor ?? layout?.borderColor ?? DEFAULT_BORDER_COLOR;
931
+ const width = layout?.borderWidth ?? DEFAULT_BORDER_WIDTH;
932
+ return {
933
+ top: {
934
+ visible,
935
+ color: hColor,
936
+ width,
937
+ dash: layout?.borderDash
938
+ },
939
+ bottom: {
940
+ visible,
941
+ color: hColor,
942
+ width,
943
+ dash: layout?.borderDash
944
+ },
945
+ left: {
946
+ visible,
947
+ color: vColor,
948
+ width,
949
+ dash: layout?.borderDash
950
+ },
951
+ right: {
952
+ visible,
953
+ color: vColor,
954
+ width,
955
+ dash: layout?.borderDash
956
+ }
957
+ };
958
+ };
959
+ var getEffectiveCellBorder = (args) => {
960
+ const { table, cell, rowIndex, startCol } = args;
961
+ const tableBorder = createDefaultTableBorder(table.layout);
962
+ const columnBorder = normalizeCellBorder(table.layout?.columnStyles?.[startCol]?.border, tableBorder);
963
+ const rowBorder = normalizeCellBorder(table.layout?.rowStyles?.[rowIndex]?.border, columnBorder);
964
+ return normalizeCellBorder(cell.border, rowBorder);
965
+ };
966
+ var drawBorderSide = (doc, side, border, x, y, width, height) => {
967
+ if (!border.visible || border.width <= 0) return;
968
+ doc.save();
969
+ doc.lineWidth(border.width);
970
+ doc.strokeColor(border.color);
971
+ if (border.dash?.length) {
972
+ doc.dash(border.dash[0], {
973
+ space: border.dash[1] ?? border.dash[0]
974
+ });
975
+ } else {
976
+ doc.undash();
977
+ }
978
+ switch (side) {
979
+ case "top":
980
+ doc.moveTo(x, y).lineTo(x + width, y).stroke();
981
+ break;
982
+ case "right":
983
+ doc.moveTo(x + width, y).lineTo(x + width, y + height).stroke();
984
+ break;
985
+ case "bottom":
986
+ doc.moveTo(x, y + height).lineTo(x + width, y + height).stroke();
987
+ break;
988
+ case "left":
989
+ doc.moveTo(x, y).lineTo(x, y + height).stroke();
990
+ break;
991
+ }
992
+ doc.restore();
993
+ };
994
+ var drawCellBorder = (doc, border, x, y, width, height) => {
995
+ drawBorderSide(doc, "top", border.top, x, y, width, height);
996
+ drawBorderSide(doc, "right", border.right, x, y, width, height);
997
+ drawBorderSide(doc, "bottom", border.bottom, x, y, width, height);
998
+ drawBorderSide(doc, "left", border.left, x, y, width, height);
999
+ };
837
1000
 
838
1001
  // src/renderer-engine/blocks/text.ts
839
1002
  var processTextBlock = (doc, ctx, styles, block, y, env, ensureSpaceFor) => {
@@ -877,7 +1040,7 @@ var processTextBlock = (doc, ctx, styles, block, y, env, ensureSpaceFor) => {
877
1040
 
878
1041
  // src/renderer-engine/utils/block-renderer.ts
879
1042
  function createBlockRenderer(deps) {
880
- const { doc, ctx, styles, computeColumnPixelWidths: computeColumnPixelWidths2, finishPage: finishPage2, processSignatureBlock } = deps;
1043
+ const { doc, ctx, styles, computeColumnPixelWidths: computeColumnPixelWidths2, finishPage: finishPage2, processSignatureBlock, defaultImage } = deps;
881
1044
  const bottomLimitForContent = createBottomLimitForContent(doc, ctx);
882
1045
  const ensureSpaceFor = createEnsureSpaceFor(ctx, bottomLimitForContent, finishPage2);
883
1046
  const measureBlockHeight = createMeasureBlockHeight({
@@ -889,11 +1052,31 @@ function createBlockRenderer(deps) {
889
1052
  if (block.visible === false) {
890
1053
  return y ?? ctx.currentY;
891
1054
  }
1055
+ if ((block.backgroundColor || block.backgroundImage) && block.type !== "pageBreak" && block.type !== "signature") {
1056
+ const startY = y ?? ctx.currentY;
1057
+ const blockHeight = measureBlockHeight(block, env);
1058
+ const opacity = block.backgroundOpacity ?? 1;
1059
+ doc.save();
1060
+ if (block.backgroundColor) {
1061
+ doc.fillOpacity(opacity).rect(env.marginLeft, startY, env.innerWidth, blockHeight).fill(block.backgroundColor);
1062
+ doc.fillOpacity(1);
1063
+ }
1064
+ if (block.backgroundImage) {
1065
+ try {
1066
+ doc.image(block.backgroundImage, env.marginLeft, startY, {
1067
+ width: env.innerWidth,
1068
+ height: blockHeight
1069
+ });
1070
+ } catch (_) {
1071
+ }
1072
+ }
1073
+ doc.restore();
1074
+ }
892
1075
  switch (block.type) {
893
1076
  case "text":
894
1077
  return processTextBlock(doc, ctx, styles, block, y, env, ensureSpaceFor);
895
1078
  case "image":
896
- return processImageBlock(doc, ctx, block, y, env, ensureSpaceFor);
1079
+ return processImageBlock(doc, ctx, block, y, env, ensureSpaceFor, defaultImage);
897
1080
  case "qr": {
898
1081
  const qb = block;
899
1082
  const imageLike = {
@@ -907,7 +1090,7 @@ function createBlockRenderer(deps) {
907
1090
  marginLeft: qb.marginLeft,
908
1091
  marginRight: qb.marginRight
909
1092
  };
910
- return processImageBlock(doc, ctx, imageLike, y, env, ensureSpaceFor);
1093
+ return processImageBlock(doc, ctx, imageLike, y, env, ensureSpaceFor, defaultImage);
911
1094
  }
912
1095
  case "barcode":
913
1096
  return processBarcodeBlock(doc, ctx, block, y, env, ensureSpaceFor);
@@ -923,7 +1106,9 @@ function createBlockRenderer(deps) {
923
1106
  env,
924
1107
  computeColumnPixelWidths2,
925
1108
  bottomLimitForContent,
926
- finishPage2
1109
+ finishPage2,
1110
+ (b, blockY, blockEnv) => renderBlock(b, blockY, blockEnv),
1111
+ measureBlockHeight
927
1112
  );
928
1113
  case "columns":
929
1114
  return processColumnsBlock(
@@ -1166,14 +1351,24 @@ function drawHeader(doc, def, headerBandHeight, header, renderBlockArray) {
1166
1351
 
1167
1352
  // src/renderer-engine/utils/image-loader.ts
1168
1353
  import axios from "axios";
1169
- async function normalizeImageSrc(src) {
1170
- if (!src) return src;
1354
+ async function normalizeImageSrc(src, fallback) {
1355
+ if (!src) return fallback ?? src;
1171
1356
  if (Buffer.isBuffer(src)) return src;
1357
+ if (src.startsWith("data:")) {
1358
+ const commaIdx = src.indexOf(",");
1359
+ if (commaIdx !== -1) {
1360
+ return Buffer.from(src.slice(commaIdx + 1), "base64");
1361
+ }
1362
+ }
1172
1363
  if (src.startsWith("http://") || src.startsWith("https://")) {
1173
1364
  try {
1174
1365
  const res = await axios.get(src, { responseType: "arraybuffer" });
1175
1366
  return Buffer.from(res.data);
1176
1367
  } catch (e) {
1368
+ if (fallback !== void 0) {
1369
+ console.warn(`Failed to fetch remote image "${src}", using default image.`);
1370
+ return fallback;
1371
+ }
1177
1372
  throw toPdfEngineError(e, {
1178
1373
  code: "PDF_ERROR_IMAGE_FETCH_FAILED" /* PDF_ERROR_IMAGE_FETCH_FAILED */,
1179
1374
  message: "Failed to fetch remote image for PDF.",
@@ -1185,23 +1380,47 @@ async function normalizeImageSrc(src) {
1185
1380
  }
1186
1381
  return src;
1187
1382
  }
1188
- async function materializeImagesInBlocks(blocks) {
1383
+ async function materializeImagesInBlocks(blocks, fallback) {
1189
1384
  const out = [];
1190
1385
  for (const block of blocks) {
1386
+ const blockAny = block;
1387
+ if (blockAny.backgroundImage) {
1388
+ blockAny.backgroundImage = await normalizeImageSrc(blockAny.backgroundImage, fallback);
1389
+ }
1191
1390
  if (block.type === "image") {
1192
1391
  const img = { ...block };
1193
- img.src = await normalizeImageSrc(img.src);
1392
+ img.src = await normalizeImageSrc(img.src, fallback);
1194
1393
  out.push(img);
1195
1394
  } else if (block.type === "columns") {
1196
1395
  out.push({
1197
1396
  ...block,
1198
- columns: await Promise.all(block.columns.map((col) => materializeImagesInBlocks(col)))
1397
+ columns: await Promise.all(block.columns.map((col) => materializeImagesInBlocks(col, fallback)))
1199
1398
  });
1200
1399
  } else if (block.type === "signature" && block.blocks) {
1201
1400
  out.push({
1202
1401
  ...block,
1203
- blocks: await materializeImagesInBlocks(block.blocks)
1402
+ blocks: await materializeImagesInBlocks(block.blocks, fallback)
1204
1403
  });
1404
+ } else if (block.type === "table") {
1405
+ const tb = block;
1406
+ const newBody = await Promise.all(
1407
+ tb.body.map(
1408
+ async (entry) => {
1409
+ const materializeCell = async (cell) => {
1410
+ if (!cell.blocks?.length) return cell;
1411
+ return { ...cell, blocks: await materializeImagesInBlocks(cell.blocks, fallback) };
1412
+ };
1413
+ if (Array.isArray(entry)) {
1414
+ return await Promise.all(entry.map(materializeCell));
1415
+ }
1416
+ if (entry && typeof entry === "object" && "content" in entry && Array.isArray(entry.content)) {
1417
+ return { ...entry, content: await Promise.all(entry.content.map(materializeCell)) };
1418
+ }
1419
+ return entry;
1420
+ }
1421
+ )
1422
+ );
1423
+ out.push({ ...tb, body: newBody });
1205
1424
  } else {
1206
1425
  out.push(block);
1207
1426
  }
@@ -1355,7 +1574,7 @@ function createMeasureBlockHeight(deps) {
1355
1574
  innerWidth,
1356
1575
  allowPageBreak: false
1357
1576
  };
1358
- const h = measureTableHeight(doc, b, fakeEnv, styles, computeColumnPixelWidths2);
1577
+ const h = measureTableHeight(doc, b, fakeEnv, styles, computeColumnPixelWidths2, measure);
1359
1578
  return mt + h + mb;
1360
1579
  };
1361
1580
  const measureColumns = (b, env) => {
@@ -1669,6 +1888,26 @@ async function materializeQrAndBarcodesInBlocks(blocks) {
1669
1888
  bb.src = buf;
1670
1889
  }
1671
1890
  out.push(bb);
1891
+ } else if (block.type === "table") {
1892
+ const tb = block;
1893
+ const newBody = await Promise.all(
1894
+ tb.body.map(
1895
+ async (entry) => {
1896
+ const materializeCell = async (cell) => {
1897
+ if (!cell.blocks?.length) return cell;
1898
+ return { ...cell, blocks: await materializeQrAndBarcodesInBlocks(cell.blocks) };
1899
+ };
1900
+ if (Array.isArray(entry)) {
1901
+ return await Promise.all(entry.map(materializeCell));
1902
+ }
1903
+ if (entry && typeof entry === "object" && "content" in entry && Array.isArray(entry.content)) {
1904
+ return { ...entry, content: await Promise.all(entry.content.map(materializeCell)) };
1905
+ }
1906
+ return entry;
1907
+ }
1908
+ )
1909
+ );
1910
+ out.push({ ...tb, body: newBody });
1672
1911
  } else {
1673
1912
  out.push(block);
1674
1913
  }
@@ -1924,23 +2163,28 @@ function drawWatermarkForPage(doc, watermark, pageNumber, isLast) {
1924
2163
  }
1925
2164
 
1926
2165
  // src/renderer-engine/index.ts
2166
+ var BUILT_IN_DEFAULT_IMAGE = Buffer.from(
2167
+ images.default.slice(images.default.indexOf(",") + 1),
2168
+ "base64"
2169
+ );
1927
2170
  async function renderCustomPdf(def, outputPath) {
2171
+ const fallbackImage = def.defaultImage ?? BUILT_IN_DEFAULT_IMAGE;
1928
2172
  if (def.header) {
1929
2173
  def.header.blocks = await materializeQrAndBarcodesInBlocks(def.header.blocks);
1930
- def.header.blocks = await materializeImagesInBlocks(def.header.blocks);
2174
+ def.header.blocks = await materializeImagesInBlocks(def.header.blocks, fallbackImage);
1931
2175
  }
1932
2176
  def.content = await materializeQrAndBarcodesInBlocks(def.content);
1933
- def.content = await materializeImagesInBlocks(def.content);
2177
+ def.content = await materializeImagesInBlocks(def.content, fallbackImage);
1934
2178
  if (def.pageBackground?.src) {
1935
- def.pageBackground.src = await normalizeImageSrc(def.pageBackground.src);
2179
+ def.pageBackground.src = await normalizeImageSrc(def.pageBackground.src, fallbackImage);
1936
2180
  }
1937
2181
  if (def.header?.backgroundImage) {
1938
- def.header.backgroundImage = await normalizeImageSrc(def.header.backgroundImage);
2182
+ def.header.backgroundImage = await normalizeImageSrc(def.header.backgroundImage, fallbackImage);
1939
2183
  }
1940
2184
  if (def.footer && typeof def.footer !== "function") {
1941
2185
  const footer = def.footer;
1942
2186
  if (footer.backgroundImage) {
1943
- footer.backgroundImage = await normalizeImageSrc(footer.backgroundImage);
2187
+ footer.backgroundImage = await normalizeImageSrc(footer.backgroundImage, fallbackImage);
1944
2188
  }
1945
2189
  }
1946
2190
  return new Promise((resolve, reject) => {
@@ -1991,7 +2235,8 @@ async function renderCustomPdf(def, outputPath) {
1991
2235
  styles,
1992
2236
  computeColumnPixelWidths,
1993
2237
  finishPage: finishPage2,
1994
- processSignatureBlock
2238
+ processSignatureBlock,
2239
+ defaultImage: fallbackImage
1995
2240
  });
1996
2241
  const startNewPageLayout = createStartNewPageLayout({
1997
2242
  doc,
@@ -2030,22 +2275,23 @@ async function renderCustomPdf(def, outputPath) {
2030
2275
  });
2031
2276
  }
2032
2277
  async function renderCustomPdfToBuffer(def) {
2278
+ const fallbackImage = def.defaultImage ?? BUILT_IN_DEFAULT_IMAGE;
2033
2279
  if (def.header) {
2034
2280
  def.header.blocks = await materializeQrAndBarcodesInBlocks(def.header.blocks);
2035
- def.header.blocks = await materializeImagesInBlocks(def.header.blocks);
2281
+ def.header.blocks = await materializeImagesInBlocks(def.header.blocks, fallbackImage);
2036
2282
  }
2037
2283
  def.content = await materializeQrAndBarcodesInBlocks(def.content);
2038
- def.content = await materializeImagesInBlocks(def.content);
2284
+ def.content = await materializeImagesInBlocks(def.content, fallbackImage);
2039
2285
  if (def.pageBackground?.src) {
2040
- def.pageBackground.src = await normalizeImageSrc(def.pageBackground.src);
2286
+ def.pageBackground.src = await normalizeImageSrc(def.pageBackground.src, fallbackImage);
2041
2287
  }
2042
2288
  if (def.header?.backgroundImage) {
2043
- def.header.backgroundImage = await normalizeImageSrc(def.header.backgroundImage);
2289
+ def.header.backgroundImage = await normalizeImageSrc(def.header.backgroundImage, fallbackImage);
2044
2290
  }
2045
2291
  if (def.footer && typeof def.footer !== "function") {
2046
2292
  const footer = def.footer;
2047
2293
  if (footer.backgroundImage) {
2048
- footer.backgroundImage = await normalizeImageSrc(footer.backgroundImage);
2294
+ footer.backgroundImage = await normalizeImageSrc(footer.backgroundImage, fallbackImage);
2049
2295
  }
2050
2296
  }
2051
2297
  return new Promise((resolve, reject) => {
@@ -2111,7 +2357,8 @@ async function renderCustomPdfToBuffer(def) {
2111
2357
  styles,
2112
2358
  computeColumnPixelWidths,
2113
2359
  finishPage: finishPage2,
2114
- processSignatureBlock
2360
+ processSignatureBlock,
2361
+ defaultImage: fallbackImage
2115
2362
  });
2116
2363
  const startNewPageLayout = createStartNewPageLayout({
2117
2364
  doc,
@@ -2141,6 +2388,7 @@ export {
2141
2388
  PdfEngineError,
2142
2389
  PdfEngineErrorCode,
2143
2390
  QR_ERROR_LEVEL,
2391
+ images,
2144
2392
  isPdfEngineError,
2145
2393
  renderCustomPdf,
2146
2394
  renderCustomPdfToBuffer,