@borurio-print/print-designer 1.0.3 → 1.0.4

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.
@@ -15,7 +15,7 @@ export interface ComponentDefinition {
15
15
  /**
16
16
  * 设计器组件注册表。
17
17
  *
18
- * - 文字开放内容、字号、加粗和旋转。
18
+ * - 文字开放内容、字号、加粗和旋转;文字框额外开放固定区域排版能力。
19
19
  * - 二维码、条形码、图片开放内容、宽度、高度和旋转。
20
20
  * - 边框开放宽高、线宽和旋转;横线、竖线只开放各自长度方向与线宽。
21
21
  * - 表格开放坐标、宽高、列配置、字体、边框线宽和旋转。
@@ -0,0 +1,13 @@
1
+ import type { TextBoxDesignerElement } from './types';
2
+ export interface TextBoxLayoutResult {
3
+ lines: string[];
4
+ fontSizePt: number;
5
+ fontSizeMm: number;
6
+ lineHeightMm: number;
7
+ truncated: boolean;
8
+ }
9
+ /**
10
+ * 把运行时文字排入固定毫米矩形。设计画布和 PDF 共用该结果,避免预览与打印
11
+ * 分别依赖 CSS/SVG 的隐式换行规则而产生差异。
12
+ */
13
+ export declare function layoutTextBox(element: TextBoxDesignerElement, content: string): TextBoxLayoutResult;
@@ -45,7 +45,7 @@ export interface PrintResult {
45
45
  error?: unknown;
46
46
  }
47
47
  /** 业务字段目前允许在标签中使用的三种展示方式。 */
48
- export type FieldElementType = 'text' | 'qrcode' | 'barcode';
48
+ export type FieldElementType = 'text' | 'textBox' | 'qrcode' | 'barcode';
49
49
  /**
50
50
  * 由业务系统传给设计器的字段定义。
51
51
  *
@@ -68,9 +68,9 @@ export interface BusinessFieldGroup {
68
68
  * 这里保留尚未实现编辑能力的组件类型,是为了让左侧组件注册表始终使用
69
69
  * 稳定的业务标识;后续实现方框、线条等组件时不需要修改已有模板字段。
70
70
  */
71
- export type DesignerElementType = 'text' | 'rectangle' | 'horizontalLine' | 'verticalLine' | 'qrcode' | 'barcode' | 'image' | 'serialNumber' | 'pageNumber' | 'time' | 'table' | 'pdf';
71
+ export type DesignerElementType = 'text' | 'textBox' | 'rectangle' | 'horizontalLine' | 'verticalLine' | 'qrcode' | 'barcode' | 'image' | 'serialNumber' | 'pageNumber' | 'time' | 'table' | 'pdf';
72
72
  /** 右侧属性面板中可独立组合的属性编辑器标识。 */
73
- export type ElementPropertyKey = 'displayType' | 'content' | 'imageSource' | 'x' | 'y' | 'width' | 'height' | 'fontSize' | 'fontWeight' | 'strokeWidth' | 'rotation' | 'timeMode' | 'includeTime' | 'fixedTime' | 'tableConfig' | 'pdfSource' | 'pdfCropMode' | 'pdfCropRatio';
73
+ export type ElementPropertyKey = 'displayType' | 'content' | 'textBoxFitMode' | 'textBoxOverflowMode' | 'lineHeight' | 'minFontSize' | 'imageSource' | 'x' | 'y' | 'width' | 'height' | 'fontSize' | 'fontWeight' | 'strokeWidth' | 'rotation' | 'timeMode' | 'includeTime' | 'fixedTime' | 'tableConfig' | 'pdfSource' | 'pdfCropMode' | 'pdfCropRatio';
74
74
  /**
75
75
  * 单个属性编辑器的能力与数值约束。
76
76
  * 数值范围跟随组件类型配置,输入框和 SVG 控制点共用,避免两处规则不一致。
@@ -91,7 +91,7 @@ export interface ElementPropertyConfig {
91
91
  */
92
92
  export interface BaseDesignerElement {
93
93
  id: string;
94
- type: 'text' | 'rectangle' | 'horizontalLine' | 'verticalLine' | 'qrcode' | 'barcode' | 'image' | 'serialNumber' | 'pageNumber' | 'time' | 'table' | 'pdf';
94
+ type: 'text' | 'textBox' | 'rectangle' | 'horizontalLine' | 'verticalLine' | 'qrcode' | 'barcode' | 'image' | 'serialNumber' | 'pageNumber' | 'time' | 'table' | 'pdf';
95
95
  xMm: number;
96
96
  yMm: number;
97
97
  widthMm: number;
@@ -256,8 +256,30 @@ export interface TableDesignerElement extends BaseDesignerElement {
256
256
  fontSizePt: number;
257
257
  fontWeight: 400 | 700;
258
258
  }
259
+ /** 文字框在固定区域内放不下内容时采用的尺寸适配方式。 */
260
+ export type TextBoxFitMode = 'fixed' | 'shrinkFont';
261
+ /** 固定区域在最小字号下仍放不下内容时采用的溢出方式。 */
262
+ export type TextBoxOverflowMode = 'clip' | 'ellipsis';
263
+ /**
264
+ * 多行文字框使用固定毫米宽高进行排版。
265
+ * 与普通文字不同,拖动控制点只改变文本框,不会同步缩放字号。
266
+ */
267
+ export interface TextBoxDesignerElement extends BaseDesignerElement {
268
+ type: 'textBox';
269
+ /** 存在 field 时,打印阶段从业务数据读取;普通固定文字框不设置该字段。 */
270
+ field?: string;
271
+ content: string;
272
+ fontSizePt: number;
273
+ fontWeight: 400 | 700;
274
+ /** 行高相对于字号毫米高度的倍数。 */
275
+ lineHeight: number;
276
+ fitMode: TextBoxFitMode;
277
+ overflowMode: TextBoxOverflowMode;
278
+ /** shrinkFont 模式允许缩小到的最小字号。 */
279
+ minFontSizePt: number;
280
+ }
259
281
  /** 当前已经具备创建、属性编辑和 SVG 渲染能力的元素集合。 */
260
- export type DesignerElement = TextDesignerElement | RectangleDesignerElement | LineDesignerElement | QrcodeDesignerElement | BarcodeDesignerElement | ImageDesignerElement | SerialNumberDesignerElement | PageNumberDesignerElement | TimeDesignerElement | TableDesignerElement | PdfDesignerElement;
282
+ export type DesignerElement = TextDesignerElement | TextBoxDesignerElement | RectangleDesignerElement | LineDesignerElement | QrcodeDesignerElement | BarcodeDesignerElement | ImageDesignerElement | SerialNumberDesignerElement | PageNumberDesignerElement | TimeDesignerElement | TableDesignerElement | PdfDesignerElement;
261
283
  /** 设计器运行期间保存的元素剪贴板快照。 */
262
284
  export interface ElementClipboardItem {
263
285
  id: string;