reprintFromMergedTemplate.ts 1.24 KB
import {
  normalizeLabelTemplateFromPreviewApi,
  sortElementsForPreview,
} from './labelPreview/normalizePreviewTemplate'
import {
  printSystemTemplateForCurrentPrinter,
  type SystemTemplatePrintCanvasRasterOptions,
} from './print/manager/printerManager'
import type { SystemLabelTemplate } from './print/types/printer'

/**
 * 将接口 11 返回的 `mergedTemplateJson`(或历史落库的合并模板 JSON 字符串)交给当前打印机打印。
 */
export async function printMergedTemplateJsonString (
  mergedJson: string,
  options: {
    printQty?: number
    onProgress?: (percent: number) => void
    canvasRaster?: SystemTemplatePrintCanvasRasterOptions
  } = {}
): Promise<void> {
  let raw: unknown
  try {
    raw = JSON.parse(mergedJson) as unknown
  } catch {
    throw new Error('Invalid print snapshot JSON')
  }
  let tmpl = normalizeLabelTemplateFromPreviewApi(raw)
  if (!tmpl) {
    throw new Error('Cannot parse label template from snapshot')
  }
  const sorted: SystemLabelTemplate = {
    ...tmpl,
    elements: sortElementsForPreview(tmpl.elements || []),
  }
  await printSystemTemplateForCurrentPrinter(
    sorted,
    {},
    { printQty: options.printQty ?? 1, canvasRaster: options.canvasRaster },
    options.onProgress
  )
}