PrintSpirit 动态连接库API参考
PrintSpirit 动态连接库为是打印精灵开放平台二次开发工具之一, 封装在libspirit.dll
(Windows)或libspirit.so
(Linux)中。可以被C/C++直接调用, 也可以进一步封装成C#, java等其他语言,简化桌面程序条码标签打印,标签编辑功能开发。
1. 使用说明
1.1 调用约定
所有API均使用__cdecl
调用约定,字符串编码为UTF-8。
1.2 内存管理规则
- 由
GetSpiritError
、SpiritPrnLst
、SpiritPrnInfo
返回的指针必须调用SpiritFree
释放 - 其他API返回的临时内存由库内部管理,无需手动释放
- 传入参数内存由调用方管理
1.3 错误代码
返回0值,表示成功. <0 表示错误, 具体错误信息请通过GetSpiritError()
获取
1.4 示例代码
1#include <stdio.h>
2#include "libspirit.h"
3
4int main() {
5
6 SpiritInit();
7 // 打印标签
8 if (Print("/tmp/xxxx1.psl", "{}", "{\"printer\":\"Spirit Image\"}")<0) {
9 char * err = GetSpiritError();
10 printf("Print Error %s\n", err);
11 SpiritFree(err);
12 }
13
14 // 编辑标签
15 if (SpiritEdit("/tmp/xxxx1.psl")<0) {
16 char * err = GetSpiritError();
17 printf("Edit Label Error %s\n", err);
18 SpiritFree(err);
19 }
20
21 SpiritDeInit();
22
23 return 0;
24}
2. API参考
2.1 初始化与销毁
1/**
2 * 初始化Spirit库
3 * 必须在调用其他API前执行
4 */
5void SpiritInit();
6
7/**
8 * 释放Spirit库资源
9 * 程序退出前调用
10 */
11void SpiritDeInit();
2.2 错误处理
1/**
2 * 获取最后一次错误信息
3 * @return UTF-8编码的错误字符串(需要调用SpiritFree释放)
4 */
5const char* GetSpiritError();
6
7/**
8 * 释放Spirit库分配的内存
9 * @param p 由Spirit库分配的内存指针
10 */
11void SpiritFree(void* p);
2.3 打印控制
1/**
2 * 执行打印任务
3 * @param tpid 模板ID
4 * @param vars JSON格式的变量数据(UTF-8)
5 * @param opts JSON格式的打印选项(UTF-8)
6 * @return 0成功,负数失败
7 */
8int Print(const char* tpid, const unsigned char* vars, const unsigned char* opts);
9
10/**
11 * 重置打印机
12 * @param p 打印机名称
13 * @return 0成功,负数失败
14 */
15int ResetPrinter(const char* p);
2.4 打开标签设计器API
1/**
2 * 打开标签设计器编辑标签文件
3 * @param file 标签文件路径(UTF-8)
4 * @return 0成功,负数失败
5 */
6int SpiritEdit(const unsigned char* file);
7
8/**
9 * 创建新标签
10 * @param file 保存路径(UTF-8)
11 * @param name 标签名称(UTF-8)
12 * @param memo 标签备注(UTF-8)
13 * @param width 标签宽度(单位: mm)
14 * @param height 标签高度(单位: mm)
15 * @param dpi 打印DPI
16 * @param ref_label 参考标签路径(UTF-8,可为NULL)
17 * @return 0成功,负数失败
18 */
19int SpiritNewLabel(const unsigned char* file, const unsigned char* name,
20 const unsigned char* memo, int width, int height,
21 int dpi, const unsigned char* ref_label);
2.5 许可管理
1/**
2 * 安装许可证
3 * @param key 许可证密钥
4 * @return 0成功,负数失败
5 */
6int SpiritInstallLicense(const char* key);
2.6 打印机管理
1/**
2 * 获取打印机列表
3 * @return JSON格式的打印机列表(UTF-8,需要调用SpiritFree释放)
4 * 格式: [{"name":"...","type":"...","act":true/false},...]
5 */
6const char* SpiritPrnLst();
7
8/**
9 * 获取打印机详细信息
10 * @param prn 打印机名称
11 * @return JSON格式的打印机信息(UTF-8,需要调用SpiritFree释放)
12 */
13const char* SpiritPrnInfo(const char* prn);
注意:
- 返回格式是json
- 返回的指针请使用SpiritFree()释放
3. 数据类型说明
3.1 打印机信息(JSON)
1{
2 "name": "打印机名称",
3 "output_dir": "输出目录, 对于Spirit Image, PDF等虚拟打印机有效",
4 "paper": [
5 {
6 "name": "纸张名称",
7 "w": 宽度,
8 "h": 高度,
9 "cols": 列数,
10 "rows": 行数,
11 "gapX": 水平间距,
12 "gapY": 垂直间距,
13 "marginTop": 上边距,
14 "marginLeft": 左边距
15 }
16 ]
17}
3.2 打印选项(JSON)
1{
2 "printer": "打印机名称",
3 "type": "打印机类型(ZPL/CPCL/TSPL/ESCPOS)",
4 "row": 行数,
5 "col": 列数,
6 "gapX": 水平间距,
7 "gapY": 垂直间距,
8 "quality": 质量等级(0-2),
9 "flush": 是否立即刷新(true/false)
10}
11
12printer可以为"Spirit Image", 是内置的虚拟打印机, 主要用于条码生成和二维码生成.
13type为打印机类型,如: 斑马打印机的类型为ZPL