Files
qhmes/jeecgboot-vue3/src/views/print/template/utils/printNativeViaPrintDot.ts
2026-04-17 19:31:09 +08:00

41 lines
1.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { NativeTemplateSchema } from '../native/core/types';
import { renderNativePrintHtml } from '../native/core/printRenderer';
import { buildPdfBase64FromHtmlFragment, extractBodyInnerHtmlFromFullDocument } from './printHtmlToPdfBase64';
import { fetchPrintDotPrinters, printDotSendPdf, resolvePrintDotPrinterName } from './printDotBridge';
/** 与模板列表页共用,便于设计器与列表选择同一台 PrintDot 打印机 */
export const PRINT_TEMPLATE_SELECTED_PRINTER_KEY = 'print_template_selected_printer';
/**
* 原生模板:渲染 HTML → 转 PDF → 经 PrintDot 本地桥接器送打印机
*/
export async function printNativeSchemaViaPrintDot(params: {
schema: NativeTemplateSchema;
data: Record<string, any>;
jobName?: string;
/** 与模板列表一致:可为具体打印机名或 __system_default__缺省读 localStorage */
printerSelection?: string;
}): Promise<void> {
const fullHtml = await renderNativePrintHtml(params.schema, params.data);
const inner = extractBodyInnerHtmlFromFullDocument(fullHtml);
const pdfBase64 = await buildPdfBase64FromHtmlFragment(inner, params.schema.page.width, params.schema.page.height, {
paginate: true,
});
const printers = await fetchPrintDotPrinters();
const fromStore =
params.printerSelection ?? localStorage.getItem(PRINT_TEMPLATE_SELECTED_PRINTER_KEY) ?? '__system_default__';
const resolved = resolvePrintDotPrinterName(fromStore, printers);
if (!resolved) {
throw new Error('未解析到可用打印机:请在模板列表选择打印机,或启动 PrintDot 后刷新打印机列表');
}
const result = await printDotSendPdf({
printer: resolved,
pdfBase64,
jobName: params.jobName,
timeoutMs: 180000,
});
if (!result.ok) {
throw new Error(result.message || 'PrintDot 打印失败');
}
}