myprint-design
Version:
操作简单,组件丰富的一站式打印解决方案打印设计器
423 lines (422 loc) • 11.2 kB
TypeScript
/// <reference types="node" />
import { Module, SaveResult, Template } from '../types/R';
export interface PrintOptions {
taskId?: string;
panel?: Panel | string;
previewDataList?: any[];
title?: string;
timeout?: number;
file?: Blob | ArrayBuffer | Uint8Array | string;
html?: string;
css?: string;
printer?: string;
orientation?: 'portrait' | 'landscape' | 'auto';
swapWidthHeight?: boolean;
pageSize?: string;
width?: number;
height?: number;
copies?: number;
scale?: 'fit';
scaleFactor?: number;
printBackground?: boolean;
color?: boolean;
/**
* 支持MyPrint客户端、windows直连,macos直连
* 双面打印 | 单面打印
*/
duplexMode?: 'duplex' | 'simplex';
dpi?: any;
}
export interface DesignPanelProps {
template?: Template;
saveTemplate?: (template: Template) => Promise<SaveResult>;
module?: Module;
height?: string;
generateImg?: boolean;
showBackButton?: boolean;
showPrintButton?: boolean;
showDownloadPdfButton?: boolean;
showPreviewButton?: boolean;
showClearButton?: boolean;
showSaveButton?: boolean;
}
export interface MyPrintConfig {
serverUrl?: string;
clientUrl?: string;
disabledClient?: boolean;
}
export interface PrintResult {
status: 'SUCCESS' | 'ERROR' | 'TIMEOUT' | 'CLOSE';
msg?: string;
blob?: Blob;
blobList?: Blob[];
type: 'CHROME_PRINT' | 'TIMEOUT' | 'CLIENT_PRINT' | 'CHROME_GENERATE_PDF' | 'CHROME_GENERATE_IMG' | 'SERVER_GENERATE_IMG' | 'CLIENT_GENERATE_PDF' | 'SERVER_GENERATE_PDF' | 'CLOSE';
}
export interface ClientCmd {
taskId: string;
cmd: 'print' | 'printerList' | 'generatePdf' | 'generatePdfResult' | 'printResult' | 'ping' | 'text/css';
options?: PrintOptions;
}
export interface ClientResult {
taskId: string;
cmd: 'print' | 'printerList' | 'generatePdf' | 'generatePdfResult' | 'printResult' | 'pong';
data?: Buffer | any;
status?: 'SUCCESS' | 'ERROR';
msg?: string;
}
export interface Printer {
/**
* a longer description of the printer's type.
*/
description: string;
/**
* the name of the printer as shown in Print Preview.
*/
displayName: string;
/**
* whether or not a given printer is set as the default printer on the OS.
*/
isDefault: boolean;
/**
* the name of the printer as understood by the OS.
*/
name: string;
/**
* an object containing a variable number of platform-specific printer information.
*/
options: any;
/**
* the current status of the printer.
*/
status: number;
}
export interface Provider {
name: string;
pageUnit: PageUnit;
fontSizeUnit: FontSizeUnit;
pageSize: string;
width: number;
height: number;
watermark: boolean;
watermarkContent: string;
dragSnapPanelIs: number;
dragSnapIs: number;
elementList: MyElement[];
}
export interface Design {
scale: number;
}
/**
* 节点关系
*/
export interface ElementRelation {
elementList: MyElement[];
}
export interface Id {
id: string;
}
export interface Point {
x: number;
y: number;
}
export interface Rect extends Point {
width: number;
height: number;
}
export interface SvgData {
points: Point[];
controlPoints: Point[];
}
export interface PointLabel extends Point {
label?: string;
type: 'control' | 'virtual' | 'rotate';
insertIndex: number;
}
export interface PointClick extends Point {
clickTimestamp: number;
}
export interface MyAuxiliaryLine extends Point, Id {
direction: 'vertical' | 'horizontal';
runtimeOption: RuntimeElementOption;
}
export interface Line {
start: Point;
end: Point;
}
export interface Container extends Rect, ElementRelation, Id {
minWidth: number;
minHeight: number;
type: elementType;
visibility: 'visible' | 'hidden';
/**
* 运行时配置
*/
runtimeOption: RuntimeElementOption;
}
export interface Panel extends Container {
name: string;
width: number;
height: number;
pageSize: string;
pageUnit: PageUnit;
fontSizeUnit: FontSizeUnit;
watermark: boolean;
watermarkContent: string;
dragSnapPanelIs: number;
dragSnapIs: number;
design: Design;
orientation?: 'p' | 'portrait' | 'l' | 'landscape';
pageHeader?: MyElement;
pageFooter?: MyElement;
groupList: string[][];
auxiliaryLineList: MyAuxiliaryLine[];
}
export interface PreviewContext {
autoPageIs: boolean;
currentPreview: PreviewWrapper;
previewData: any;
panel: Panel;
pageList: PreviewContainerWrapper[];
currentPage: PreviewContainerWrapper;
top: number;
bottom: number;
pagingRepetition: boolean;
}
export interface PreviewWrapper extends MyElement, TableCellElement, PreviewContainerWrapper {
offsetLastElementTop: number;
heightIs: boolean;
tableHeadHiddenIs: boolean;
previewTableRowIndex: number;
target: any;
}
export interface PreviewContainerWrapper extends MyElement {
offsetTop: number;
previewWrapperList: PreviewWrapper[];
}
export interface DragWrapper {
dragIng: boolean;
type: string;
element: MyElement;
start: Position;
end: Position;
}
export declare const elementTypeFormat: {
Panel: string;
Text: string;
TextTime: string;
Image: string;
DataTable: string;
FreeTable: string;
Rect: string;
HorizontalLine: string;
DottedHorizontalLine: string;
VerticalLine: string;
DottedVerticalLine: string;
Container: string;
PageHeader: string;
PageFooter: string;
PageNum: string;
SvgPolygonLine: string;
SvgLine: string;
SvgBezierCurve: string;
SvgBezierCurveThree: string;
SvgCircle: string;
SvgEllipse: string;
DrawPanel: string;
};
export declare const displayStrategyFormat: {
none: string;
firstPage: string;
lastPage: string;
oddPage: string;
evenPage: string;
};
export declare type displayStrategy = keyof typeof displayStrategyFormat;
export declare const cellTypeFormat: {
Head: string;
Body: string;
Statistics: string;
};
export declare const statisticsTypeFormat: {
Sum: string;
Avg: string;
Count: string;
DistinctCount: string;
Max: string;
Min: string;
CustomFormula: string;
};
export declare type DisplayModel = 'design' | 'preview' | 'print';
export declare type PageUnit = 'px' | 'mm' | 'cm' | 'in';
export declare type FontSizeUnit = 'px' | 'pt';
export declare type elementType = keyof typeof elementTypeFormat;
export declare type cellType = keyof typeof cellTypeFormat;
export declare type statisticsType = keyof typeof statisticsTypeFormat;
declare type textContentType = 'Text' | 'Barcode' | 'QrCode';
export declare type elementStatus = 'NONE' | 'SELECT' | 'SELECT_REMOVE' | 'HANDLE' | 'HANDLE_ED' | 'HANDLE_EDIT_ING';
export declare type auxiliaryLineStatus = 'SHOW' | 'HIDDEN';
declare type textAlign = 'start' | 'center' | 'end';
export interface HandlePanel {
icon: string;
label: string;
visible: boolean;
}
export interface HandlePanelPosition extends Container {
right: number;
}
export interface MyElement extends Container {
contentType?: textContentType;
field: string;
enable?: number;
label?: string;
data?: any;
option: ElementOption;
svgOption: ElementSvgOption;
columnBody: TableCellElement;
columnList: TableHeadProviderCellElement[];
tableHeadList: TableCellElement[][];
tableBodyList: TableCellElement[][];
disableCellMap: Record<number, 0 | 1 | undefined>;
statisticsList: TableStatisticsCellElement[][];
rowList: TableCellElement[][];
/**
* 是否锁定
*/
lock?: number;
/**
* 是否组合
*/
groupIs?: boolean;
}
export interface TableHeadProviderCellElement extends Rect, Id {
type: elementType;
contentType?: textContentType;
field?: string;
enable?: number;
label?: string;
data?: any;
columnBody: TableCellElement;
option: ElementOption;
rowspan: number;
colspan: number;
columnList: Array<TableHeadProviderCellElement>;
}
export interface TableCellElement extends MyElement {
rowspan: number;
colspan: number;
}
export interface TableStatisticsCellElement extends TableCellElement {
statisticsType: statisticsType;
everyPageStatisticsIs: boolean;
tableStatisticsIs: boolean;
customFormula: string;
}
export interface TextElement extends MyElement {
labelOption?: ElementOption;
contentType: textContentType;
}
/**
* 运行时参数,不提交后台
*/
export interface RuntimeElementOption extends Position {
centerX: number;
centerY: number;
width: number;
height: number;
translate: Point;
bounds: Position;
parent?: Container;
cellParent: TableCellElement;
target: any;
rotate: number;
init: Container;
status: elementStatus;
auxiliaryLineStatus: auxiliaryLineStatus;
cutIngIs: boolean;
previewIs: boolean;
/**
* 工作环境,如果是在表格中,填充满整个cell
*/
workEnvironment: elementType;
cellType: cellType;
nestColumnList: TableCellElement[];
dragInIs: boolean;
index: number;
printRealHeight: number;
}
export interface ElementOption {
barCodeType: string;
barCodeDisplayValIs: boolean;
qrCodeScale: number;
qrErrorCorrectionLevel: 'low' | 'medium' | 'quartile' | 'high' | 'L' | 'M' | 'Q' | 'H';
keepRatio: boolean;
fixed: boolean;
fontFamily: string;
fontSize: number;
opacity: number;
color: string;
background: 'none';
bold: boolean;
underline: boolean;
lineThrough: boolean;
italic: boolean;
borderAll: boolean;
borderWidth: number;
borderRadius: number;
lineWidth: number;
rotate: number;
textAlign: textAlign;
verticalAlign: textAlign;
lineBreak: number;
lineHeight: number;
dottedStyle: 'dotted' | 'dashed';
sort: number;
hiddenLabel: boolean;
labelSplit: boolean;
disableSort: number;
disableEnable: number;
autoTextHeight: boolean;
enable: number;
padding: Position;
margin: Position;
formatter?: string;
displayStrategy?: displayStrategy;
tableHeightType: 'FIXED' | 'AUTO';
tableBodyBgStyleType: 'NONE' | 'COMMON' | 'CUSTOM';
tablePageHeadIs: number;
tableHiddenHeadIs: number;
tableBodyHeightType: 'FIXED' | 'AUTO';
tableBodyHeight: number;
}
export interface ElementSvgOption {
}
export interface Position extends Point {
top: number;
bottom: number;
left: number;
right: number;
}
export interface ContentScaleVo {
viewport: Container;
miniMap: Container;
scale: number;
openIs: boolean;
width: number;
height: number;
}
export interface FormatterVariable {
pageIndex: number;
pageSize: number;
nowDate?: Date;
}
export declare type MyHtmlElement = HTMLElement & {
element: MyElement;
};
export interface DownList {
label: string;
value: any;
enable?: boolean;
click?: () => void;
icon?: string;
}
export {};