@pdfme/generator 1.1.5 → 1.1.6
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/cjs/src/generate.js +6 -5
- package/dist/cjs/src/generate.js.map +1 -1
- package/dist/cjs/src/helper/draw.js +111 -0
- package/dist/cjs/src/helper/draw.js.map +1 -0
- package/dist/cjs/src/{helper.js → helper/index.js} +28 -130
- package/dist/cjs/src/helper/index.js.map +1 -0
- package/dist/cjs/src/index.js +3 -2
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/esm/src/generate.js +2 -1
- package/dist/esm/src/generate.js.map +1 -1
- package/dist/esm/src/helper/draw.js +106 -0
- package/dist/esm/src/helper/draw.js.map +1 -0
- package/dist/esm/src/helper/index.js +179 -0
- package/dist/esm/src/helper/index.js.map +1 -0
- package/dist/esm/src/index.js +2 -2
- package/dist/esm/src/index.js.map +1 -1
- package/dist/types/src/helper/draw.d.ts +17 -0
- package/dist/types/src/helper/index.d.ts +51 -0
- package/dist/types/src/index.d.ts +4 -3
- package/package.json +2 -2
- package/src/generate.ts +3 -7
- package/src/helper/draw.ts +165 -0
- package/src/helper/index.ts +236 -0
- package/src/index.ts +39 -5
- package/src/type.d.ts +19 -0
- package/dist/cjs/src/helper.js.map +0 -1
- package/dist/esm/src/helper.js +0 -285
- package/dist/esm/src/helper.js.map +0 -1
- package/dist/types/src/helper.d.ts +0 -68
- package/src/helper.ts +0 -423
| @@ -0,0 +1,236 @@ | |
| 1 | 
            +
            import { PDFFont, PDFDocument, PDFEmbeddedPage, rgb, degrees, TransformationMatrix } from 'pdf-lib';
         | 
| 2 | 
            +
            import bwipjs, { ToBufferOptions } from 'bwip-js';
         | 
| 3 | 
            +
            import {
         | 
| 4 | 
            +
              getB64BasePdf,
         | 
| 5 | 
            +
              b64toUint8Array,
         | 
| 6 | 
            +
              Schema,
         | 
| 7 | 
            +
              TextSchema,
         | 
| 8 | 
            +
              Font,
         | 
| 9 | 
            +
              BasePdf,
         | 
| 10 | 
            +
              BarCodeType,
         | 
| 11 | 
            +
              Alignment,
         | 
| 12 | 
            +
              DEFAULT_FONT_SIZE,
         | 
| 13 | 
            +
              DEFAULT_ALIGNMENT,
         | 
| 14 | 
            +
              DEFAULT_LINE_HEIGHT,
         | 
| 15 | 
            +
              DEFAULT_CHARACTER_SPACING,
         | 
| 16 | 
            +
              DEFAULT_FONT_COLOR,
         | 
| 17 | 
            +
              isTextSchema,
         | 
| 18 | 
            +
            } from '@pdfme/common';
         | 
| 19 | 
            +
            import type { EmbedPdfBox } from '../type';
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            const barCodeType2Bcid = (type: BarCodeType) => (type === 'nw7' ? 'rationalizedCodabar' : type);
         | 
| 22 | 
            +
            export const createBarCode = async (arg: {
         | 
| 23 | 
            +
              type: BarCodeType;
         | 
| 24 | 
            +
              input: string;
         | 
| 25 | 
            +
              width: number;
         | 
| 26 | 
            +
              height: number;
         | 
| 27 | 
            +
              backgroundColor?: string;
         | 
| 28 | 
            +
            }): Promise<Buffer> => {
         | 
| 29 | 
            +
              const { type, input, width, height, backgroundColor } = arg;
         | 
| 30 | 
            +
              const bcid = barCodeType2Bcid(type);
         | 
| 31 | 
            +
              const includetext = true;
         | 
| 32 | 
            +
              const scale = 5;
         | 
| 33 | 
            +
              const bwipjsArg: ToBufferOptions = { bcid, text: input, width, height, scale, includetext };
         | 
| 34 | 
            +
             | 
| 35 | 
            +
              if (backgroundColor) {
         | 
| 36 | 
            +
                bwipjsArg.backgroundcolor = backgroundColor;
         | 
| 37 | 
            +
              }
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              let res: Buffer;
         | 
| 40 | 
            +
             | 
| 41 | 
            +
              if (typeof window !== 'undefined') {
         | 
| 42 | 
            +
                const canvas = document.createElement('canvas');
         | 
| 43 | 
            +
                bwipjs.toCanvas(canvas, bwipjsArg);
         | 
| 44 | 
            +
                const dataUrl = canvas.toDataURL('image/png');
         | 
| 45 | 
            +
                res = b64toUint8Array(dataUrl).buffer as Buffer;
         | 
| 46 | 
            +
              } else {
         | 
| 47 | 
            +
                res = await bwipjs.toBuffer(bwipjsArg);
         | 
| 48 | 
            +
              }
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              return res;
         | 
| 51 | 
            +
            };
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            export const embedAndGetFontObj = async (arg: { pdfDoc: PDFDocument; font: Font }) => {
         | 
| 54 | 
            +
              const { pdfDoc, font } = arg;
         | 
| 55 | 
            +
              const fontValues = await Promise.all(
         | 
| 56 | 
            +
                Object.values(font).map(async (v) => {
         | 
| 57 | 
            +
                  let font = v.data;
         | 
| 58 | 
            +
                  if (typeof v.data === 'string' && v.data.startsWith('http')) {
         | 
| 59 | 
            +
                    const url = v.data;
         | 
| 60 | 
            +
                    font = await fetch(url).then((res) => res.arrayBuffer());
         | 
| 61 | 
            +
                  }
         | 
| 62 | 
            +
                  return pdfDoc.embedFont(v.data, {
         | 
| 63 | 
            +
                    subset: typeof v.subset === 'undefined' ? true : v.subset,
         | 
| 64 | 
            +
                  });
         | 
| 65 | 
            +
                })
         | 
| 66 | 
            +
              );
         | 
| 67 | 
            +
             | 
| 68 | 
            +
              return Object.keys(font).reduce(
         | 
| 69 | 
            +
                (acc, cur, i) => Object.assign(acc, { [cur]: fontValues[i] }),
         | 
| 70 | 
            +
                {} as { [key: string]: PDFFont }
         | 
| 71 | 
            +
              );
         | 
| 72 | 
            +
            };
         | 
| 73 | 
            +
             | 
| 74 | 
            +
            export const getEmbeddedPagesAndEmbedPdfBoxes = async (arg: {
         | 
| 75 | 
            +
              pdfDoc: PDFDocument;
         | 
| 76 | 
            +
              basePdf: BasePdf;
         | 
| 77 | 
            +
            }) => {
         | 
| 78 | 
            +
              const { pdfDoc, basePdf } = arg;
         | 
| 79 | 
            +
              let embeddedPages: PDFEmbeddedPage[] = [];
         | 
| 80 | 
            +
              let embedPdfBoxes: EmbedPdfBox[] = [];
         | 
| 81 | 
            +
              const willLoadPdf = typeof basePdf === 'string' ? await getB64BasePdf(basePdf) : basePdf;
         | 
| 82 | 
            +
              const embedPdf = await PDFDocument.load(willLoadPdf);
         | 
| 83 | 
            +
              const embedPdfPages = embedPdf.getPages();
         | 
| 84 | 
            +
             | 
| 85 | 
            +
              embedPdfBoxes = embedPdfPages.map((p) => ({
         | 
| 86 | 
            +
                mediaBox: p.getMediaBox(),
         | 
| 87 | 
            +
                bleedBox: p.getBleedBox(),
         | 
| 88 | 
            +
                trimBox: p.getTrimBox(),
         | 
| 89 | 
            +
              }));
         | 
| 90 | 
            +
             | 
| 91 | 
            +
              const boundingBoxes = embedPdfPages.map((p) => {
         | 
| 92 | 
            +
                const { x, y, width, height } = p.getMediaBox();
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                return { left: x, bottom: y, right: width, top: height + y };
         | 
| 95 | 
            +
              });
         | 
| 96 | 
            +
             | 
| 97 | 
            +
              const transformationMatrices = embedPdfPages.map(
         | 
| 98 | 
            +
                () => [1, 0, 0, 1, 0, 0] as TransformationMatrix
         | 
| 99 | 
            +
              );
         | 
| 100 | 
            +
             | 
| 101 | 
            +
              embeddedPages = await pdfDoc.embedPages(embedPdfPages, boundingBoxes, transformationMatrices);
         | 
| 102 | 
            +
             | 
| 103 | 
            +
              return { embeddedPages, embedPdfBoxes };
         | 
| 104 | 
            +
            };
         | 
| 105 | 
            +
             | 
| 106 | 
            +
            const mm2pt = (mm: number): number => {
         | 
| 107 | 
            +
              // https://www.ddc.co.jp/words/archives/20090701114500.html
         | 
| 108 | 
            +
              const ptRatio = 2.8346;
         | 
| 109 | 
            +
             | 
| 110 | 
            +
              return parseFloat(String(mm)) * ptRatio;
         | 
| 111 | 
            +
            };
         | 
| 112 | 
            +
             | 
| 113 | 
            +
            export const getDrawOption = (arg: { schema: Schema | TextSchema; pageHeight: number }) => {
         | 
| 114 | 
            +
              const { schema, pageHeight } = arg;
         | 
| 115 | 
            +
             | 
| 116 | 
            +
              const width = mm2pt(schema.width);
         | 
| 117 | 
            +
              const height = mm2pt(schema.height);
         | 
| 118 | 
            +
             | 
| 119 | 
            +
              const rotate = degrees(schema.rotate ? schema.rotate : 0);
         | 
| 120 | 
            +
              rotate.angle = rotate.angle * -1;
         | 
| 121 | 
            +
             | 
| 122 | 
            +
              const alignment = isTextSchema(schema) ? schema.alignment || 'left' : 'left';
         | 
| 123 | 
            +
             | 
| 124 | 
            +
              const x = calcX(schema.position.x, alignment, width, width);
         | 
| 125 | 
            +
              const y = calcY(schema.position.y, pageHeight, height);
         | 
| 126 | 
            +
             | 
| 127 | 
            +
              // TODO adjust x, y by rotate angle
         | 
| 128 | 
            +
              // because pdf-lib rotate from letf-top, but we rotate from center
         | 
| 129 | 
            +
             | 
| 130 | 
            +
              return { x, y, rotate, width, height };
         | 
| 131 | 
            +
            };
         | 
| 132 | 
            +
             | 
| 133 | 
            +
            const hex2rgb = (hex: string) => {
         | 
| 134 | 
            +
              if (hex.slice(0, 1) === '#') hex = hex.slice(1);
         | 
| 135 | 
            +
              if (hex.length === 3)
         | 
| 136 | 
            +
                hex =
         | 
| 137 | 
            +
                  hex.slice(0, 1) +
         | 
| 138 | 
            +
                  hex.slice(0, 1) +
         | 
| 139 | 
            +
                  hex.slice(1, 2) +
         | 
| 140 | 
            +
                  hex.slice(1, 2) +
         | 
| 141 | 
            +
                  hex.slice(2, 3) +
         | 
| 142 | 
            +
                  hex.slice(2, 3);
         | 
| 143 | 
            +
             | 
| 144 | 
            +
              return [hex.slice(0, 2), hex.slice(2, 4), hex.slice(4, 6)].map((str) => parseInt(str, 16));
         | 
| 145 | 
            +
            };
         | 
| 146 | 
            +
             | 
| 147 | 
            +
            export const hex2RgbColor = (hexString: string | undefined) => {
         | 
| 148 | 
            +
              if (hexString) {
         | 
| 149 | 
            +
                const [r, g, b] = hex2rgb(hexString);
         | 
| 150 | 
            +
             | 
| 151 | 
            +
                return rgb(r / 255, g / 255, b / 255);
         | 
| 152 | 
            +
              }
         | 
| 153 | 
            +
             | 
| 154 | 
            +
              // eslint-disable-next-line no-undefined
         | 
| 155 | 
            +
              return undefined;
         | 
| 156 | 
            +
            };
         | 
| 157 | 
            +
             | 
| 158 | 
            +
            export const getFontProp = (schema: TextSchema) => {
         | 
| 159 | 
            +
              const size = schema.fontSize ?? DEFAULT_FONT_SIZE;
         | 
| 160 | 
            +
              const color = hex2RgbColor(schema.fontColor ?? DEFAULT_FONT_COLOR);
         | 
| 161 | 
            +
              const alignment = schema.alignment ?? DEFAULT_ALIGNMENT;
         | 
| 162 | 
            +
              const lineHeight = schema.lineHeight ?? DEFAULT_LINE_HEIGHT;
         | 
| 163 | 
            +
              const characterSpacing = schema.characterSpacing ?? DEFAULT_CHARACTER_SPACING;
         | 
| 164 | 
            +
             | 
| 165 | 
            +
              return { size, color, alignment, lineHeight, characterSpacing };
         | 
| 166 | 
            +
            };
         | 
| 167 | 
            +
             | 
| 168 | 
            +
            export const calcX = (x: number, alignment: Alignment, boxWidth: number, textWidth: number) => {
         | 
| 169 | 
            +
              let addition = 0;
         | 
| 170 | 
            +
              if (alignment === 'center') {
         | 
| 171 | 
            +
                addition = (boxWidth - textWidth) / 2;
         | 
| 172 | 
            +
              } else if (alignment === 'right') {
         | 
| 173 | 
            +
                addition = boxWidth - textWidth;
         | 
| 174 | 
            +
              }
         | 
| 175 | 
            +
             | 
| 176 | 
            +
              return mm2pt(x) + addition;
         | 
| 177 | 
            +
            };
         | 
| 178 | 
            +
             | 
| 179 | 
            +
            export const calcY = (y: number, height: number, itemHeight: number) =>
         | 
| 180 | 
            +
              height - mm2pt(y) - itemHeight;
         | 
| 181 | 
            +
             | 
| 182 | 
            +
            type IsOverEval = (testString: string) => boolean;
         | 
| 183 | 
            +
            /**
         | 
| 184 | 
            +
             * Incrementally check the current line for it's real length
         | 
| 185 | 
            +
             * and return the position where it exceeds the box width.
         | 
| 186 | 
            +
             *
         | 
| 187 | 
            +
             * return `null` to indicate if inputLine is shorter as the available bbox
         | 
| 188 | 
            +
             */
         | 
| 189 | 
            +
            const getOverPosition = (inputLine: string, isOverEval: IsOverEval) => {
         | 
| 190 | 
            +
              for (let i = 0; i <= inputLine.length; i += 1) {
         | 
| 191 | 
            +
                if (isOverEval(inputLine.substr(0, i))) {
         | 
| 192 | 
            +
                  return i;
         | 
| 193 | 
            +
                }
         | 
| 194 | 
            +
              }
         | 
| 195 | 
            +
             | 
| 196 | 
            +
              return null;
         | 
| 197 | 
            +
            };
         | 
| 198 | 
            +
             | 
| 199 | 
            +
            /**
         | 
| 200 | 
            +
             * Get position of the split. Split the exceeding line at
         | 
| 201 | 
            +
             * the last whitespace over it exceeds the bounding box width.
         | 
| 202 | 
            +
             */
         | 
| 203 | 
            +
            const getSplitPosition = (inputLine: string, isOverEval: IsOverEval) => {
         | 
| 204 | 
            +
              const overPos = getOverPosition(inputLine, isOverEval);
         | 
| 205 | 
            +
              /**
         | 
| 206 | 
            +
               * if input line is shorter as the available space. We split at the end of the line
         | 
| 207 | 
            +
               */
         | 
| 208 | 
            +
              if (overPos === null) return inputLine.length;
         | 
| 209 | 
            +
              let overPosTmp = overPos;
         | 
| 210 | 
            +
              while (inputLine[overPosTmp] !== ' ' && overPosTmp >= 0) overPosTmp -= 1;
         | 
| 211 | 
            +
              /**
         | 
| 212 | 
            +
               * for very long lines with no whitespace use the original overPos and
         | 
| 213 | 
            +
               * split one char over so we do not overfill the box
         | 
| 214 | 
            +
               */
         | 
| 215 | 
            +
             | 
| 216 | 
            +
              return overPosTmp > 0 ? overPosTmp : overPos - 1;
         | 
| 217 | 
            +
            };
         | 
| 218 | 
            +
             | 
| 219 | 
            +
            /**
         | 
| 220 | 
            +
             * recursively split the line at getSplitPosition.
         | 
| 221 | 
            +
             * If there is some leftover, split the rest again in the same manner.
         | 
| 222 | 
            +
             */
         | 
| 223 | 
            +
            export const getSplittedLines = (inputLine: string, isOverEval: IsOverEval): string[] => {
         | 
| 224 | 
            +
              const splitPos = getSplitPosition(inputLine, isOverEval);
         | 
| 225 | 
            +
              const splittedLine = inputLine.substr(0, splitPos);
         | 
| 226 | 
            +
              const rest = inputLine.slice(splitPos).trimLeft();
         | 
| 227 | 
            +
              /**
         | 
| 228 | 
            +
               * end recursion if there is no rest, return single splitted line in an array
         | 
| 229 | 
            +
               * so we can join them over the recursion
         | 
| 230 | 
            +
               */
         | 
| 231 | 
            +
              if (rest.length === 0) {
         | 
| 232 | 
            +
                return [splittedLine];
         | 
| 233 | 
            +
              }
         | 
| 234 | 
            +
             | 
| 235 | 
            +
              return [splittedLine, ...getSplittedLines(rest, isOverEval)];
         | 
| 236 | 
            +
            };
         | 
    
        package/src/index.ts
    CHANGED
    
    | @@ -1,8 +1,18 @@ | |
| 1 1 | 
             
            import generate from './generate.js';
         | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 2 | 
            +
            import {
         | 
| 3 | 
            +
              BLANK_PDF,
         | 
| 4 | 
            +
              HELVETICA,
         | 
| 5 | 
            +
              isTextSchema,
         | 
| 6 | 
            +
              isImageSchema,
         | 
| 7 | 
            +
              isBarcodeSchema,
         | 
| 8 | 
            +
              checkTemplate,
         | 
| 9 | 
            +
              checkUIProps,
         | 
| 10 | 
            +
              checkPreviewProps,
         | 
| 11 | 
            +
              checkDesignerProps,
         | 
| 12 | 
            +
              checkGenerateProps,
         | 
| 13 | 
            +
              validateBarcodeInput,
         | 
| 14 | 
            +
            } from '@pdfme/common';
         | 
| 15 | 
            +
            import type {
         | 
| 6 16 | 
             
              Lang,
         | 
| 7 17 | 
             
              Size,
         | 
| 8 18 | 
             
              Alignment,
         | 
| @@ -26,7 +36,9 @@ export type { | |
| 26 36 | 
             
            } from '@pdfme/common';
         | 
| 27 37 |  | 
| 28 38 | 
             
            export {
         | 
| 39 | 
            +
              generate,
         | 
| 29 40 | 
             
              BLANK_PDF,
         | 
| 41 | 
            +
              HELVETICA,
         | 
| 30 42 | 
             
              isTextSchema,
         | 
| 31 43 | 
             
              isImageSchema,
         | 
| 32 44 | 
             
              isBarcodeSchema,
         | 
| @@ -36,4 +48,26 @@ export { | |
| 36 48 | 
             
              checkDesignerProps,
         | 
| 37 49 | 
             
              checkGenerateProps,
         | 
| 38 50 | 
             
              validateBarcodeInput,
         | 
| 39 | 
            -
            } | 
| 51 | 
            +
            };
         | 
| 52 | 
            +
            export type {
         | 
| 53 | 
            +
              Lang,
         | 
| 54 | 
            +
              Size,
         | 
| 55 | 
            +
              Alignment,
         | 
| 56 | 
            +
              SchemaType,
         | 
| 57 | 
            +
              BarCodeType,
         | 
| 58 | 
            +
              TextSchema,
         | 
| 59 | 
            +
              ImageSchema,
         | 
| 60 | 
            +
              BarcodeSchema,
         | 
| 61 | 
            +
              Schema,
         | 
| 62 | 
            +
              SchemaForUI,
         | 
| 63 | 
            +
              Font,
         | 
| 64 | 
            +
              BasePdf,
         | 
| 65 | 
            +
              Template,
         | 
| 66 | 
            +
              CommonProps,
         | 
| 67 | 
            +
              GeneratorOptions,
         | 
| 68 | 
            +
              GenerateProps,
         | 
| 69 | 
            +
              UIOptions,
         | 
| 70 | 
            +
              UIProps,
         | 
| 71 | 
            +
              PreviewProps,
         | 
| 72 | 
            +
              DesignerProps,
         | 
| 73 | 
            +
            };
         | 
    
        package/src/type.d.ts
    ADDED
    
    | @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            import type { PDFImage, PDFFont } from 'pdf-lib';
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            export interface TextSchemaSetting {
         | 
| 4 | 
            +
              fontObj: {
         | 
| 5 | 
            +
                [key: string]: PDFFont;
         | 
| 6 | 
            +
              };
         | 
| 7 | 
            +
              fallbackFontName: string;
         | 
| 8 | 
            +
              splitThreshold: number;
         | 
| 9 | 
            +
            }
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            export interface InputImageCache {
         | 
| 12 | 
            +
              [key: string]: PDFImage | undefined;
         | 
| 13 | 
            +
            }
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            export type EmbedPdfBox = {
         | 
| 16 | 
            +
              mediaBox: { x: number; y: number; width: number; height: number };
         | 
| 17 | 
            +
              bleedBox: { x: number; y: number; width: number; height: number };
         | 
| 18 | 
            +
              trimBox: { x: number; y: number; width: number; height: number };
         | 
| 19 | 
            +
            };
         | 
| @@ -1 +0,0 @@ | |
| 1 | 
            -
            {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/helper.ts"],"names":[],"mappings":"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"}
         | 
    
        package/dist/esm/src/helper.js
    DELETED
    
    | @@ -1,285 +0,0 @@ | |
| 1 | 
            -
            var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
         | 
| 2 | 
            -
                function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
         | 
| 3 | 
            -
                return new (P || (P = Promise))(function (resolve, reject) {
         | 
| 4 | 
            -
                    function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
         | 
| 5 | 
            -
                    function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
         | 
| 6 | 
            -
                    function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
         | 
| 7 | 
            -
                    step((generator = generator.apply(thisArg, _arguments || [])).next());
         | 
| 8 | 
            -
                });
         | 
| 9 | 
            -
            };
         | 
| 10 | 
            -
            import { PDFDocument, rgb, degrees, setCharacterSpacing, } from 'pdf-lib';
         | 
| 11 | 
            -
            import bwipjs from 'bwip-js';
         | 
| 12 | 
            -
            import { getB64BasePdf, b64toUint8Array, validateBarcodeInput, isTextSchema, isImageSchema, isBarcodeSchema, DEFAULT_FONT_SIZE, DEFAULT_ALIGNMENT, DEFAULT_LINE_HEIGHT, DEFAULT_CHARACTER_SPACING, DEFAULT_FONT_COLOR, } from '@pdfme/common';
         | 
| 13 | 
            -
            const barCodeType2Bcid = (type) => (type === 'nw7' ? 'rationalizedCodabar' : type);
         | 
| 14 | 
            -
            export const createBarCode = (arg) => __awaiter(void 0, void 0, void 0, function* () {
         | 
| 15 | 
            -
                const { type, input, width, height, backgroundColor } = arg;
         | 
| 16 | 
            -
                const bcid = barCodeType2Bcid(type);
         | 
| 17 | 
            -
                const includetext = true;
         | 
| 18 | 
            -
                const scale = 5;
         | 
| 19 | 
            -
                const bwipjsArg = { bcid, text: input, width, height, scale, includetext };
         | 
| 20 | 
            -
                if (backgroundColor) {
         | 
| 21 | 
            -
                    bwipjsArg.backgroundcolor = backgroundColor;
         | 
| 22 | 
            -
                }
         | 
| 23 | 
            -
                let res;
         | 
| 24 | 
            -
                if (typeof window !== 'undefined') {
         | 
| 25 | 
            -
                    const canvas = document.createElement('canvas');
         | 
| 26 | 
            -
                    bwipjs.toCanvas(canvas, bwipjsArg);
         | 
| 27 | 
            -
                    const dataUrl = canvas.toDataURL('image/png');
         | 
| 28 | 
            -
                    res = b64toUint8Array(dataUrl).buffer;
         | 
| 29 | 
            -
                }
         | 
| 30 | 
            -
                else {
         | 
| 31 | 
            -
                    res = yield bwipjs.toBuffer(bwipjsArg);
         | 
| 32 | 
            -
                }
         | 
| 33 | 
            -
                return res;
         | 
| 34 | 
            -
            });
         | 
| 35 | 
            -
            export const embedAndGetFontObj = (arg) => __awaiter(void 0, void 0, void 0, function* () {
         | 
| 36 | 
            -
                const { pdfDoc, font } = arg;
         | 
| 37 | 
            -
                const fontValues = yield Promise.all(Object.values(font).map((v) => pdfDoc.embedFont(v.data, {
         | 
| 38 | 
            -
                    subset: typeof v.subset === 'undefined' ? true : v.subset,
         | 
| 39 | 
            -
                })));
         | 
| 40 | 
            -
                return Object.keys(font).reduce((acc, cur, i) => Object.assign(acc, { [cur]: fontValues[i] }), {});
         | 
| 41 | 
            -
            });
         | 
| 42 | 
            -
            export const getEmbeddedPagesAndEmbedPdfBoxes = (arg) => __awaiter(void 0, void 0, void 0, function* () {
         | 
| 43 | 
            -
                const { pdfDoc, basePdf } = arg;
         | 
| 44 | 
            -
                let embeddedPages = [];
         | 
| 45 | 
            -
                let embedPdfBoxes = [];
         | 
| 46 | 
            -
                const willLoadPdf = typeof basePdf === 'string' ? yield getB64BasePdf(basePdf) : basePdf;
         | 
| 47 | 
            -
                const embedPdf = yield PDFDocument.load(willLoadPdf);
         | 
| 48 | 
            -
                const embedPdfPages = embedPdf.getPages();
         | 
| 49 | 
            -
                embedPdfBoxes = embedPdfPages.map((p) => ({
         | 
| 50 | 
            -
                    mediaBox: p.getMediaBox(),
         | 
| 51 | 
            -
                    bleedBox: p.getBleedBox(),
         | 
| 52 | 
            -
                    trimBox: p.getTrimBox(),
         | 
| 53 | 
            -
                }));
         | 
| 54 | 
            -
                const boundingBoxes = embedPdfPages.map((p) => {
         | 
| 55 | 
            -
                    const { x, y, width, height } = p.getMediaBox();
         | 
| 56 | 
            -
                    return { left: x, bottom: y, right: width, top: height + y };
         | 
| 57 | 
            -
                });
         | 
| 58 | 
            -
                const transformationMatrices = embedPdfPages.map(() => [1, 0, 0, 1, 0, 0]);
         | 
| 59 | 
            -
                embeddedPages = yield pdfDoc.embedPages(embedPdfPages, boundingBoxes, transformationMatrices);
         | 
| 60 | 
            -
                return { embeddedPages, embedPdfBoxes };
         | 
| 61 | 
            -
            });
         | 
| 62 | 
            -
            const mm2pt = (mm) => {
         | 
| 63 | 
            -
                // https://www.ddc.co.jp/words/archives/20090701114500.html
         | 
| 64 | 
            -
                const ptRatio = 2.8346;
         | 
| 65 | 
            -
                return parseFloat(String(mm)) * ptRatio;
         | 
| 66 | 
            -
            };
         | 
| 67 | 
            -
            const getSchemaSizeAndRotate = (schema) => {
         | 
| 68 | 
            -
                const width = mm2pt(schema.width);
         | 
| 69 | 
            -
                const height = mm2pt(schema.height);
         | 
| 70 | 
            -
                const rotate = degrees(schema.rotate ? schema.rotate : 0);
         | 
| 71 | 
            -
                return { width, height, rotate };
         | 
| 72 | 
            -
            };
         | 
| 73 | 
            -
            const hex2rgb = (hex) => {
         | 
| 74 | 
            -
                if (hex.slice(0, 1) === '#')
         | 
| 75 | 
            -
                    hex = hex.slice(1);
         | 
| 76 | 
            -
                if (hex.length === 3)
         | 
| 77 | 
            -
                    hex =
         | 
| 78 | 
            -
                        hex.slice(0, 1) +
         | 
| 79 | 
            -
                            hex.slice(0, 1) +
         | 
| 80 | 
            -
                            hex.slice(1, 2) +
         | 
| 81 | 
            -
                            hex.slice(1, 2) +
         | 
| 82 | 
            -
                            hex.slice(2, 3) +
         | 
| 83 | 
            -
                            hex.slice(2, 3);
         | 
| 84 | 
            -
                return [hex.slice(0, 2), hex.slice(2, 4), hex.slice(4, 6)].map((str) => parseInt(str, 16));
         | 
| 85 | 
            -
            };
         | 
| 86 | 
            -
            const hex2RgbColor = (hexString) => {
         | 
| 87 | 
            -
                if (hexString) {
         | 
| 88 | 
            -
                    const [r, g, b] = hex2rgb(hexString);
         | 
| 89 | 
            -
                    return rgb(r / 255, g / 255, b / 255);
         | 
| 90 | 
            -
                }
         | 
| 91 | 
            -
                // eslint-disable-next-line no-undefined
         | 
| 92 | 
            -
                return undefined;
         | 
| 93 | 
            -
            };
         | 
| 94 | 
            -
            const getFontProp = (schema) => {
         | 
| 95 | 
            -
                var _a, _b, _c, _d, _e;
         | 
| 96 | 
            -
                const size = (_a = schema.fontSize) !== null && _a !== void 0 ? _a : DEFAULT_FONT_SIZE;
         | 
| 97 | 
            -
                const color = hex2RgbColor((_b = schema.fontColor) !== null && _b !== void 0 ? _b : DEFAULT_FONT_COLOR);
         | 
| 98 | 
            -
                const alignment = (_c = schema.alignment) !== null && _c !== void 0 ? _c : DEFAULT_ALIGNMENT;
         | 
| 99 | 
            -
                const lineHeight = (_d = schema.lineHeight) !== null && _d !== void 0 ? _d : DEFAULT_LINE_HEIGHT;
         | 
| 100 | 
            -
                const characterSpacing = (_e = schema.characterSpacing) !== null && _e !== void 0 ? _e : DEFAULT_CHARACTER_SPACING;
         | 
| 101 | 
            -
                return { size, color, alignment, lineHeight, characterSpacing };
         | 
| 102 | 
            -
            };
         | 
| 103 | 
            -
            const calcX = (x, alignment, boxWidth, textWidth) => {
         | 
| 104 | 
            -
                let addition = 0;
         | 
| 105 | 
            -
                if (alignment === 'center') {
         | 
| 106 | 
            -
                    addition = (boxWidth - textWidth) / 2;
         | 
| 107 | 
            -
                }
         | 
| 108 | 
            -
                else if (alignment === 'right') {
         | 
| 109 | 
            -
                    addition = boxWidth - textWidth;
         | 
| 110 | 
            -
                }
         | 
| 111 | 
            -
                return mm2pt(x) + addition;
         | 
| 112 | 
            -
            };
         | 
| 113 | 
            -
            const calcY = (y, height, itemHeight) => height - mm2pt(y) - itemHeight;
         | 
| 114 | 
            -
            const drawBackgroundColor = (arg) => {
         | 
| 115 | 
            -
                const { templateSchema, page, pageHeight } = arg;
         | 
| 116 | 
            -
                if (!templateSchema.backgroundColor)
         | 
| 117 | 
            -
                    return;
         | 
| 118 | 
            -
                const { width, height } = getSchemaSizeAndRotate(templateSchema);
         | 
| 119 | 
            -
                const color = hex2RgbColor(templateSchema.backgroundColor);
         | 
| 120 | 
            -
                page.drawRectangle({
         | 
| 121 | 
            -
                    x: calcX(templateSchema.position.x, 'left', width, width),
         | 
| 122 | 
            -
                    y: calcY(templateSchema.position.y, pageHeight, height),
         | 
| 123 | 
            -
                    width,
         | 
| 124 | 
            -
                    height,
         | 
| 125 | 
            -
                    color,
         | 
| 126 | 
            -
                });
         | 
| 127 | 
            -
            };
         | 
| 128 | 
            -
            /**
         | 
| 129 | 
            -
             * Incrementally check the current line for it's real length
         | 
| 130 | 
            -
             * and return the position where it exceeds the box width.
         | 
| 131 | 
            -
             *
         | 
| 132 | 
            -
             * return `null` to indicate if inputLine is shorter as the available bbox
         | 
| 133 | 
            -
             */
         | 
| 134 | 
            -
            const getOverPosition = (inputLine, isOverEval) => {
         | 
| 135 | 
            -
                for (let i = 0; i <= inputLine.length; i += 1) {
         | 
| 136 | 
            -
                    if (isOverEval(inputLine.substr(0, i))) {
         | 
| 137 | 
            -
                        return i;
         | 
| 138 | 
            -
                    }
         | 
| 139 | 
            -
                }
         | 
| 140 | 
            -
                return null;
         | 
| 141 | 
            -
            };
         | 
| 142 | 
            -
            /**
         | 
| 143 | 
            -
             * Get position of the split. Split the exceeding line at
         | 
| 144 | 
            -
             * the last whitespace over it exceeds the bounding box width.
         | 
| 145 | 
            -
             */
         | 
| 146 | 
            -
            const getSplitPosition = (inputLine, isOverEval) => {
         | 
| 147 | 
            -
                const overPos = getOverPosition(inputLine, isOverEval);
         | 
| 148 | 
            -
                /**
         | 
| 149 | 
            -
                 * if input line is shorter as the available space. We split at the end of the line
         | 
| 150 | 
            -
                 */
         | 
| 151 | 
            -
                if (overPos === null)
         | 
| 152 | 
            -
                    return inputLine.length;
         | 
| 153 | 
            -
                let overPosTmp = overPos;
         | 
| 154 | 
            -
                while (inputLine[overPosTmp] !== ' ' && overPosTmp >= 0)
         | 
| 155 | 
            -
                    overPosTmp -= 1;
         | 
| 156 | 
            -
                /**
         | 
| 157 | 
            -
                 * for very long lines with no whitespace use the original overPos and
         | 
| 158 | 
            -
                 * split one char over so we do not overfill the box
         | 
| 159 | 
            -
                 */
         | 
| 160 | 
            -
                return overPosTmp > 0 ? overPosTmp : overPos - 1;
         | 
| 161 | 
            -
            };
         | 
| 162 | 
            -
            /**
         | 
| 163 | 
            -
             * recursively split the line at getSplitPosition.
         | 
| 164 | 
            -
             * If there is some leftover, split the rest again in the same manner.
         | 
| 165 | 
            -
             */
         | 
| 166 | 
            -
            const getSplittedLines = (inputLine, isOverEval) => {
         | 
| 167 | 
            -
                const splitPos = getSplitPosition(inputLine, isOverEval);
         | 
| 168 | 
            -
                const splittedLine = inputLine.substr(0, splitPos);
         | 
| 169 | 
            -
                const rest = inputLine.slice(splitPos).trimLeft();
         | 
| 170 | 
            -
                /**
         | 
| 171 | 
            -
                 * end recursion if there is no rest, return single splitted line in an array
         | 
| 172 | 
            -
                 * so we can join them over the recursion
         | 
| 173 | 
            -
                 */
         | 
| 174 | 
            -
                if (rest.length === 0) {
         | 
| 175 | 
            -
                    return [splittedLine];
         | 
| 176 | 
            -
                }
         | 
| 177 | 
            -
                return [splittedLine, ...getSplittedLines(rest, isOverEval)];
         | 
| 178 | 
            -
            };
         | 
| 179 | 
            -
            const drawInputByTextSchema = (arg) => {
         | 
| 180 | 
            -
                const { input, templateSchema, page, pageHeight, textSchemaSetting } = arg;
         | 
| 181 | 
            -
                const { fontObj, fallbackFontName, splitThreshold } = textSchemaSetting;
         | 
| 182 | 
            -
                const fontValue = fontObj[templateSchema.fontName ? templateSchema.fontName : fallbackFontName];
         | 
| 183 | 
            -
                drawBackgroundColor({ templateSchema, page, pageHeight });
         | 
| 184 | 
            -
                const { width, rotate } = getSchemaSizeAndRotate(templateSchema);
         | 
| 185 | 
            -
                const { size, color, alignment, lineHeight, characterSpacing } = getFontProp(templateSchema);
         | 
| 186 | 
            -
                page.pushOperators(setCharacterSpacing(characterSpacing));
         | 
| 187 | 
            -
                let beforeLineOver = 0;
         | 
| 188 | 
            -
                input.split(/\r|\n|\r\n/g).forEach((inputLine, inputLineIndex) => {
         | 
| 189 | 
            -
                    const isOverEval = (testString) => {
         | 
| 190 | 
            -
                        const testStringWidth = fontValue.widthOfTextAtSize(testString, size) + (testString.length - 1) * characterSpacing;
         | 
| 191 | 
            -
                        /**
         | 
| 192 | 
            -
                         * split if the difference is less then two pixel
         | 
| 193 | 
            -
                         * (found out / tested this threshold heuristically, most probably widthOfTextAtSize is unprecise)
         | 
| 194 | 
            -
                         **/
         | 
| 195 | 
            -
                        return width - testStringWidth <= splitThreshold;
         | 
| 196 | 
            -
                    };
         | 
| 197 | 
            -
                    const splitedLines = getSplittedLines(inputLine, isOverEval);
         | 
| 198 | 
            -
                    const drawLine = (splitedLine, splitedLineIndex) => {
         | 
| 199 | 
            -
                        const textWidth = fontValue.widthOfTextAtSize(splitedLine, size) +
         | 
| 200 | 
            -
                            (splitedLine.length - 1) * characterSpacing;
         | 
| 201 | 
            -
                        page.drawText(splitedLine, {
         | 
| 202 | 
            -
                            x: calcX(templateSchema.position.x, alignment, width, textWidth),
         | 
| 203 | 
            -
                            y: calcY(templateSchema.position.y, pageHeight, size) -
         | 
| 204 | 
            -
                                lineHeight * size * (inputLineIndex + splitedLineIndex + beforeLineOver) -
         | 
| 205 | 
            -
                                (lineHeight === 0 ? 0 : ((lineHeight - 1) * size) / 2),
         | 
| 206 | 
            -
                            rotate,
         | 
| 207 | 
            -
                            size,
         | 
| 208 | 
            -
                            color,
         | 
| 209 | 
            -
                            lineHeight: lineHeight * size,
         | 
| 210 | 
            -
                            maxWidth: width,
         | 
| 211 | 
            -
                            font: fontValue,
         | 
| 212 | 
            -
                            wordBreaks: [''],
         | 
| 213 | 
            -
                        });
         | 
| 214 | 
            -
                        if (splitedLines.length === splitedLineIndex + 1)
         | 
| 215 | 
            -
                            beforeLineOver += splitedLineIndex;
         | 
| 216 | 
            -
                    };
         | 
| 217 | 
            -
                    splitedLines.forEach(drawLine);
         | 
| 218 | 
            -
                });
         | 
| 219 | 
            -
            };
         | 
| 220 | 
            -
            const getCacheKey = (templateSchema, input) => `${templateSchema.type}${input}`;
         | 
| 221 | 
            -
            const drawInputByImageSchema = (arg) => __awaiter(void 0, void 0, void 0, function* () {
         | 
| 222 | 
            -
                const { input, templateSchema, pageHeight, pdfDoc, page, inputImageCache } = arg;
         | 
| 223 | 
            -
                const { width, height, rotate } = getSchemaSizeAndRotate(templateSchema);
         | 
| 224 | 
            -
                const opt = {
         | 
| 225 | 
            -
                    x: calcX(templateSchema.position.x, 'left', width, width),
         | 
| 226 | 
            -
                    y: calcY(templateSchema.position.y, pageHeight, height),
         | 
| 227 | 
            -
                    rotate,
         | 
| 228 | 
            -
                    width,
         | 
| 229 | 
            -
                    height,
         | 
| 230 | 
            -
                };
         | 
| 231 | 
            -
                const inputImageCacheKey = getCacheKey(templateSchema, input);
         | 
| 232 | 
            -
                let image = inputImageCache[inputImageCacheKey];
         | 
| 233 | 
            -
                if (!image) {
         | 
| 234 | 
            -
                    const isPng = input.startsWith('data:image/png;');
         | 
| 235 | 
            -
                    image = yield (isPng ? pdfDoc.embedPng(input) : pdfDoc.embedJpg(input));
         | 
| 236 | 
            -
                }
         | 
| 237 | 
            -
                inputImageCache[inputImageCacheKey] = image;
         | 
| 238 | 
            -
                page.drawImage(image, opt);
         | 
| 239 | 
            -
            });
         | 
| 240 | 
            -
            const drawInputByBarcodeSchema = (arg) => __awaiter(void 0, void 0, void 0, function* () {
         | 
| 241 | 
            -
                const { input, templateSchema, pageHeight, pdfDoc, page, inputImageCache } = arg;
         | 
| 242 | 
            -
                if (!validateBarcodeInput(templateSchema.type, input))
         | 
| 243 | 
            -
                    return;
         | 
| 244 | 
            -
                const { width, height, rotate } = getSchemaSizeAndRotate(templateSchema);
         | 
| 245 | 
            -
                const opt = {
         | 
| 246 | 
            -
                    x: calcX(templateSchema.position.x, 'left', width, width),
         | 
| 247 | 
            -
                    y: calcY(templateSchema.position.y, pageHeight, height),
         | 
| 248 | 
            -
                    rotate,
         | 
| 249 | 
            -
                    width,
         | 
| 250 | 
            -
                    height,
         | 
| 251 | 
            -
                };
         | 
| 252 | 
            -
                const inputBarcodeCacheKey = getCacheKey(templateSchema, input);
         | 
| 253 | 
            -
                let image = inputImageCache[inputBarcodeCacheKey];
         | 
| 254 | 
            -
                if (!image) {
         | 
| 255 | 
            -
                    const imageBuf = yield createBarCode(Object.assign(templateSchema, { type: templateSchema.type, input }));
         | 
| 256 | 
            -
                    image = yield pdfDoc.embedPng(imageBuf);
         | 
| 257 | 
            -
                }
         | 
| 258 | 
            -
                inputImageCache[inputBarcodeCacheKey] = image;
         | 
| 259 | 
            -
                page.drawImage(image, opt);
         | 
| 260 | 
            -
            });
         | 
| 261 | 
            -
            export const drawInputByTemplateSchema = (arg) => __awaiter(void 0, void 0, void 0, function* () {
         | 
| 262 | 
            -
                if (!arg.input || !arg.templateSchema)
         | 
| 263 | 
            -
                    return;
         | 
| 264 | 
            -
                if (isTextSchema(arg.templateSchema)) {
         | 
| 265 | 
            -
                    const templateSchema = arg.templateSchema;
         | 
| 266 | 
            -
                    drawInputByTextSchema(Object.assign(Object.assign({}, arg), { templateSchema }));
         | 
| 267 | 
            -
                }
         | 
| 268 | 
            -
                else if (isImageSchema(arg.templateSchema)) {
         | 
| 269 | 
            -
                    const templateSchema = arg.templateSchema;
         | 
| 270 | 
            -
                    yield drawInputByImageSchema(Object.assign(Object.assign({}, arg), { templateSchema }));
         | 
| 271 | 
            -
                }
         | 
| 272 | 
            -
                else if (isBarcodeSchema(arg.templateSchema)) {
         | 
| 273 | 
            -
                    const templateSchema = arg.templateSchema;
         | 
| 274 | 
            -
                    yield drawInputByBarcodeSchema(Object.assign(Object.assign({}, arg), { templateSchema }));
         | 
| 275 | 
            -
                }
         | 
| 276 | 
            -
            });
         | 
| 277 | 
            -
            export const drawEmbeddedPage = (arg) => {
         | 
| 278 | 
            -
                const { page, embeddedPage, embedPdfBox } = arg;
         | 
| 279 | 
            -
                page.drawPage(embeddedPage);
         | 
| 280 | 
            -
                const { mediaBox: mb, bleedBox: bb, trimBox: tb } = embedPdfBox;
         | 
| 281 | 
            -
                page.setMediaBox(mb.x, mb.y, mb.width, mb.height);
         | 
| 282 | 
            -
                page.setBleedBox(bb.x, bb.y, bb.width, bb.height);
         | 
| 283 | 
            -
                page.setTrimBox(tb.x, tb.y, tb.width, tb.height);
         | 
| 284 | 
            -
            };
         | 
| 285 | 
            -
            //# sourceMappingURL=helper.js.map
         | 
| @@ -1 +0,0 @@ | |
| 1 | 
            -
            {"version":3,"file":"helper.js","sourceRoot":"","sources":["../../../src/helper.ts"],"names":[],"mappings":"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"}
         |