注意:以下文档只适用于TOP接口,请谨慎使用!

千牛场景之打印二期

更新时间:2016/03/16 访问次数:35793

打印二期(改造)

本文档是打印二期的改造版说明,第一部分是打印二期的设计简单描述。请仔细阅读修改点,以及各接口的描述和参数说明

二期设计方案

打印2期主要是实现一套通用的方案,设计的根本是打印一个html文档,被打印的被容isv可以做成可编辑的html模板,提供给用户调整内容的可能,这样打印结果就是可随用户任意调整

 

需要强调的是:

  1. 快递单的打印可以使用1期就实现的功能,继续支持需求

 

  1. 2期主要是为支持发货单等复杂文档,报表的打印,比如表格类的打印,isv用html组织表格内容,表格内容根据一些交易或者商品的信息填充,最终以html文档打印的形式打印

 

本次改造修改点

  1. printer对象挂接在window对象下(printer),是插件容器的原生对象,和二期的workbench.application.printer区分实现。目的是不影响二期老的接口,对老版本的插件实现兼容。
  2. 删除了printWidth、printHeight、currentPrinterDPI属性。这些接口或者是用来控制打印纸张和打印区域关系,影响最终打印效果。改造后,打印区域不需要外部控制,由设定的纸张和打印机的dpi底层兼容。
  3. 删除了printWithUrl、printWithFrame、translatePreviewDataWithUrl

translatePreviewDataWithFrame未实现接口。只提供预览preview和打印print两个接口。

  1. translatePreviewData接口名换成preview接口。简捷明了。
  2. 增加接口useDefaultSetting,如果参数传true,则使用打印机的默认设置(printer对象接口、属性设置全部不生效),默认printer使用自定义设置。

接口设计

printer.preview(string id);

说明:将当前页面转成preview的数据,数据在previewDataCallback事件中返回

参数说明:

  • 参数:id string类型,预览数据节点id,可以是任意节点(但不支持iframe

返回值:void

注意:给定的节点请使用内联样式

 

printer.print(string id)

说明:将当前页面的内容进行打印

  • 参数:id string类型,打印数据节点ID,可以是任意节点(但不支持iframe

返回值:void

注意:给定的节点请使用内联样式,否则样式会丢失

printer.useDefaultSetting(bool use)

说明:将当前页面的内容进行打印

  • 参数:use bool类型,是否使用打印机默认设置(为true ,使用打印机默认设置,sdk的设置全部忽略)

返回值:void

 

printer.useCustomPaperSize (int width, int height)

说明:设置使用自定义尺寸纸张(面单打印,请使用自定义的面单纸张大小,单位:毫米的十分之一为单位)

参数说明:

  • 参数:width int类型,自定义纸张的宽度
  • 参数:height int类型,自定义纸张的高度

返回值:void

 

事件设计

使用事件时,需动态的绑定javascript函数为响应事件函数,不绑定表示不关心该事件

 

//预览数据事件

printer.previewDataStarted

说明:预览数据转换开始事件

参数:无

 

printer.previewDataCallback(string base64_data)

说明:预览数据事件,数据在参数中

参数:base64_data       string类型  转换页的预览数据 为base64 buffer

 

printer.previewDataCompleted

说明:预览数据事件转换完成事件

参数:

 

//打印事件

printer.printStarted

说明:打印开始事件

参数:

 

printer.printCallback

说明:打印事件

参数:

 

printer.printCompleted

说明:打印结束事件

参数:

 

打印属性

//打印属性

printer.duplex

说明:是否双面打印

取值:true/false

 

printer.copys

说明:打印份数

取值:int

 

printer.layout

说明:内容布局,横向打印或者纵向打印

取值:horizontal = 0 / vertical = 1 

 

printer.marginX

说明:布局属性, 打印内容X轴偏移像素值

取值:任意整数,负数也行

 

printer.marginY

说明:布局属性, 打印内容Y轴偏移像素值

取值:任意整数,负数也行

printer.printers //只读

说明:枚举本地以及网络连接的打印机,如:printer1;printer2;printer3

取值:无

 

printer.currentPrinter

说明:设置当前使用的打印机

取值:字符串,如“my-printer1

 

printer.paper

说明:设置纸张大小

取值:    A3 = 0 /    未支持

A4 = 1 /

A5 = 2 /    未支持

二联=3 / 未支持

三联(241规格二等分241X140)= 4 /

三联(241规格一等分241X280)= 5 /

三联(241规格三等分241X93.1)= 6 /

三联(241规格四等分241X70)= 7 /

 

 

注意事项

关于打印内容的像素最大限制

每个类型的纸张或自定义纸张,都有对页面内容宽度和高度的最大值有限制,一旦超出最大值,打印机打印的效果不可控,所以需要ISV对打印内容进行分页。

最大像素值的计算:(毫米大小 * 72) / 25.4

 

常见纸张大小的像素限制

A4(210mm × 297mm):595px × 842 px

 

三联打印纸,一等份、二等份、三等份、四等分的尺寸分别是:(241×280)、(241×140)、(241×93.1)、(241×70),所以最大像素限制分别是:683×794,683×397,683×264,683×198

 

使用示例

//设置打印属性

printer.duplex = false/true  是否双面打印

printer.copys = n   打印份数

printer.layout = 0 (horizontal) / 1(vertical)  横打或纵打

printer.printers   枚举打印机名 如:printer1;printer2;printer3

printer.paper = 1 (A4) 设置纸张类型

//绑定打印事件

printer.previewDataCallback = "dataTranslated";

printer.previewDataStarted = "dataTranslatedStarted";

printer.previewDataCompleted = "dataTranslatedCompleted";

printer.printCallback = "printEvnet";

printer.printStarted = "printStarted";

printer.printCompleted = "printCompleted";

//打印预览 ,在previewDataCallback事件中进行处理

function dataTranslated(data) {

        var srcData = "data:image/png;base64, " + data;

        var previewDiv = document.getElementById("FramePrieviewHolder");

        var previewImg = document.createElement("img");

        previewImg.setAttribute("src", srcData);

        previewImg.setAttribute("width", "300px");

        previewImg.setAttribute("height", "380px");

        previewDiv.appendChild(previewImg);

 }

function dataTranslatedStarted() {

        //alert("dataTranslatedStarted");

}

function dataTranslatedCompleted() {

        //alert("dataTranslatedCompleted");

}

function printEvnet() {

        //alert("printEvnet");

}

function printStarted() {

        //alert("printStarted");

}

//连打,多打在上一次打印完成时进行next,需要控制多打结束的条件

var count = 2;

function printCompleted() {

       alert("printCompleted");

        if (count > 0) {

            //TestPrint();

        }

        count--;

}

//预览测试

function TestPreview() {       

        printer. preview ("div_node ");

}

//打印测试

function TestPrint() {

        printer.copys = 3;       //打印份数

                   printer.marginX = 200;

        printer.paper = 1; //A4

        printer.print("div_node");

}

FAQ

关于此文档暂时还没有FAQ
返回
顶部