print-designer 1.0.1 → 1.0.3
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/README.md +155 -46
- package/dist/{index-GF96Y9CT.mjs → index-C_oUIZvI.mjs} +13352 -12517
- package/dist/index-C_oUIZvI.mjs.map +1 -0
- package/dist/{index.es-CfjZUltz.mjs → index.es-U6l-9Pv9.mjs} +2 -2
- package/dist/{index.es-CfjZUltz.mjs.map → index.es-U6l-9Pv9.mjs.map} +1 -1
- package/dist/lib/index.d.ts +5 -2
- package/dist/print-designer.es.js +39 -32
- package/dist/print-designer.umd.js +153 -82
- package/dist/print-designer.umd.js.map +1 -1
- package/package.json +1 -1
- package/dist/index-GF96Y9CT.mjs.map +0 -1
package/README.md
CHANGED
|
@@ -1,46 +1,155 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
1
|
+
# Print Designer
|
|
2
|
+
|
|
3
|
+
一个功能强大的 React 报表设计器组件库,支持可视化设计、打印预览和 PDF 导出。
|
|
4
|
+
|
|
5
|
+
## 特性
|
|
6
|
+
|
|
7
|
+
- 📐 **可视化设计** - 拖拽式设计界面,所见即所得
|
|
8
|
+
- 🎨 **丰富控件** - 支持文本、字段、图片、条码、二维码、线条等多种控件
|
|
9
|
+
- 📊 **带区设计** - 支持页头、页脚、明细带区等报表结构
|
|
10
|
+
- 🖨️ **打印预览** - 实时预览打印效果
|
|
11
|
+
- 📄 **PDF 导出** - 一键导出 PDF 文件
|
|
12
|
+
- 🔧 **高度可定制** - 灵活的属性配置和样式设置
|
|
13
|
+
|
|
14
|
+
## 安装
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install print-designer
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## 快速开始
|
|
21
|
+
|
|
22
|
+
```tsx
|
|
23
|
+
import { BandBoundaryDesigner } from 'print-designer';
|
|
24
|
+
|
|
25
|
+
const dataFields = [
|
|
26
|
+
{ name: 'orderNo', label: '订单号', type: 'string' },
|
|
27
|
+
{ name: 'customer', label: '客户名称', type: 'string' },
|
|
28
|
+
{ name: 'amount', label: '金额', type: 'number' },
|
|
29
|
+
{ name: 'products', label: '产品明细', type: 'array', children: [
|
|
30
|
+
{ name: 'name', label: '产品名称', type: 'string' },
|
|
31
|
+
{ name: 'qty', label: '数量', type: 'number' },
|
|
32
|
+
{ name: 'price', label: '单价', type: 'number' },
|
|
33
|
+
]},
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
const previewData = {
|
|
37
|
+
orderNo: 'ORD-2024001',
|
|
38
|
+
customer: '测试客户',
|
|
39
|
+
amount: 1000,
|
|
40
|
+
products: [
|
|
41
|
+
{ name: '产品A', qty: 10, price: 50 },
|
|
42
|
+
{ name: '产品B', qty: 5, price: 100 },
|
|
43
|
+
],
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
function App() {
|
|
47
|
+
return (
|
|
48
|
+
<BandBoundaryDesigner
|
|
49
|
+
dataFields={dataFields}
|
|
50
|
+
data={previewData}
|
|
51
|
+
onSave={(design) => {
|
|
52
|
+
console.log('保存设计:', design);
|
|
53
|
+
}}
|
|
54
|
+
/>
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## API
|
|
60
|
+
|
|
61
|
+
### BandBoundaryDesigner
|
|
62
|
+
|
|
63
|
+
主设计器组件。
|
|
64
|
+
|
|
65
|
+
| 属性 | 类型 | 必填 | 说明 |
|
|
66
|
+
|------|------|------|------|
|
|
67
|
+
| dataFields | `DataField[]` | ✓ | 数据字段定义 |
|
|
68
|
+
| data | `Record<string, any>` | | 预览数据 |
|
|
69
|
+
| initialDesign | `Band[]` | | 初始设计数据 |
|
|
70
|
+
| options | `Partial<DesignerOptions>` | | 设计器配置 |
|
|
71
|
+
| onDesignChange | `(bands: Band[]) => void` | | 设计变更回调 |
|
|
72
|
+
| onSave | `(design: any) => void` | | 保存回调 |
|
|
73
|
+
| onPreview | `() => void` | | 预览回调 |
|
|
74
|
+
|
|
75
|
+
### DataField 类型
|
|
76
|
+
|
|
77
|
+
```typescript
|
|
78
|
+
interface DataField {
|
|
79
|
+
name: string; // 字段名
|
|
80
|
+
label: string; // 显示名称
|
|
81
|
+
type: 'string' | 'number' | 'date' | 'boolean' | 'array';
|
|
82
|
+
children?: DataField[]; // 子字段(用于明细数据)
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### 导出的组件
|
|
87
|
+
|
|
88
|
+
| 组件 | 说明 |
|
|
89
|
+
|------|------|
|
|
90
|
+
| BandBoundaryDesigner | 主设计器组件 |
|
|
91
|
+
| PrintPreview | 打印预览组件 |
|
|
92
|
+
| ObjectPropertyPanel | 对象属性面板 |
|
|
93
|
+
| BandPropertyPanel | 带区属性面板 |
|
|
94
|
+
| Toolbar | 工具栏 |
|
|
95
|
+
| ColorPicker | 颜色选择器 |
|
|
96
|
+
| FormulaEditor | 公式编辑器 |
|
|
97
|
+
|
|
98
|
+
### 导出的工具函数
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
import {
|
|
102
|
+
getBandObjectsRenderData,
|
|
103
|
+
getObjectRenderData,
|
|
104
|
+
evaluateFormula,
|
|
105
|
+
validateFormula,
|
|
106
|
+
} from 'print-designer';
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 导出的常量
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
import {
|
|
113
|
+
controlTypes, // 控件类型列表
|
|
114
|
+
defaultBands, // 默认带区配置
|
|
115
|
+
borderStyles, // 边框样式选项
|
|
116
|
+
fontWeightOptions, // 字体粗细选项
|
|
117
|
+
barcodeTypeOptions, // 条码类型选项
|
|
118
|
+
// ... 更多常量
|
|
119
|
+
} from 'print-designer';
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## 支持的控件类型
|
|
123
|
+
|
|
124
|
+
| 控件 | 说明 |
|
|
125
|
+
|------|------|
|
|
126
|
+
| text | 静态文本 |
|
|
127
|
+
| field | 数据字段 |
|
|
128
|
+
| calculated | 计算字段 |
|
|
129
|
+
| image | 图片 |
|
|
130
|
+
| barcode | 条形码 |
|
|
131
|
+
| qrcode | 二维码 |
|
|
132
|
+
| line | 线条 |
|
|
133
|
+
| rectangle | 矩形 |
|
|
134
|
+
| page_number | 页码 |
|
|
135
|
+
| current_date | 当前日期 |
|
|
136
|
+
|
|
137
|
+
## 浏览器支持
|
|
138
|
+
|
|
139
|
+
- Chrome (推荐)
|
|
140
|
+
- Firefox
|
|
141
|
+
- Safari
|
|
142
|
+
- Edge
|
|
143
|
+
|
|
144
|
+
## License
|
|
145
|
+
|
|
146
|
+
MIT
|
|
147
|
+
|
|
148
|
+
## 作者
|
|
149
|
+
|
|
150
|
+
程宜华 (chengyihua@acbnlink.com)
|
|
151
|
+
|
|
152
|
+
## 链接
|
|
153
|
+
|
|
154
|
+
- [GitHub](https://github.com/chengyihua/print-designer)
|
|
155
|
+
- [npm](https://www.npmjs.com/package/print-designer)
|