PrintSpirit 动态连接库API参考

PrintSpirit 动态连接库为是打印精灵开放平台二次开发工具之一, 封装在libspirit.dll(Windows)或libspirit.so(Linux)中。可以被C/C++直接调用, 也可以进一步封装成C#, java等其他语言,简化桌面程序条码标签打印,标签编辑功能开发。

1. 使用说明

1.1 调用约定

所有API均使用__cdecl调用约定,字符串编码为UTF-8。

1.2 内存管理规则

  1. GetSpiritErrorSpiritPrnLstSpiritPrnInfo返回的指针必须调用SpiritFree释放
  2. 其他API返回的临时内存由库内部管理,无需手动释放
  3. 传入参数内存由调用方管理

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

留言

登录