【能加加】网页打印插件是一款面向网页浏览器的Web打印代理软件,支持跨平台(Windows/Linux/MacOS)、适配各种浏览器。插件提供了精简灵活的API,浏览器与代理软件的交互均通过Javascript API完成。
1. 引入Javascript API
【能加加】网页打印插件的Javascript API非常小,只有不到7K。我们提供了CDN地址,可以直接引用CDN,也可以转存到项目引用。
CDN地址可以从下载中心获得。
引用Javascript API只需在<head>…</head>节点加入如下代码:
<head> …… <script type="text/javascript" src="https://www.nengjj.com/webdev/nengjj.min.js"></script> …… </head>
2. 获取能加加插件实例
2.1 获取默认配置的实例
引入Javascript API文件后,可以在页面任意位置获取能加加插件实例。
注意:在一个页面中,只能获取一次实例。
var instance = nengjj.getInstance();
2.2 获取定制参数的实例
也可传入定制参数,参数为Json格式:
var instance = nengjj.getInstance({
host: "192.168.1.6", // 插件运行的主机地址
});
目前仅支持指定host属性。
3. 检测能加加插件运行
3.1 获取插件的版本信息
可通过尝试读取插件信息,检测插件是否已启动运行:
instance.getInfo(
function(res){
console.log(res);
},
function(st, text){
console.log(st + ":" + text);
if(st == 0) {
alert("插件未启动!");
} else {
alert(text);
}
}
);
成功则返回:
{
appVer: "1.2", // 插件版本
os: "win", // 插件运行的平台
printVer: "1.1" // 打印模块版本
...
}
4. License设置与查询
4.1 License 查询
可以使用readLicense(onsuccess, onerror)接口读取License信息。
instance.readLicense(
function(res){
console.log(res);
},
function(st, text){
console.log(st + ":" + text);
if(st == 0) {
alert("插件未启动!");
} else {
alert(text);
}
}
);
注意:可通过插件的软件界面查看
License详细信息,右键点击系统托盘中的能加加插件图标,弹出菜单,选择:设置 > 授权信息,查看授权信息,在此界面也可设置License。
4.2 License设置
可以使用installLicense(license, onsuccess, onerror)接口更新License信息,试用版许可证(license)可通过此链接免费获取。
instance.installLicense(
license, // 申请试用授权或购买正式授权
function(res) { // 调用成功回调函数
console.log(res);
},
function(status, text) { // 调用出错回调函数
console.error(status + ":" + text);
}
);
5. 打印内容
安装好正确的License后,即可调用Javascript API进行打印。
5.1 请求打印
打印请求接口,主要有下面几种:
function print(doc, onsuccess, onerror); // 直接打印 function printConfig(doc, onsuccess, onerror); // 弹出打印设置对话框,点击"打印"按钮打印 function printPreview(doc, onsuccess, onerror); // 显示打印预览窗口,点击"打印"按钮打印
下面的示例使用print接口的地方,都可以替换为printConfig或printPreview接口,以获得相应效果。
最简单的打印请求
// 调用实例中print模块的print接口
instance.print.print({
name:"测试",
content: "<div style='color: red; font-weight:bold;'>Hello</div>",
},
function(result){
console.log(result);
});
下面是更多示例:
指定打印机
instance.print.print({
name:"测试",
content:"HTML内容",
printer:"Microsoft Print to PDF",
},
function(result){
console.log(result);
});
设定页边距
instance.print.print({
name:"测试",
content:"HTML内容",
option: {
marginTop: 3, //毫米
marginBottom: 3, //毫米
marginLeft: 3, //毫米
marginRight: 3 //毫米
}
},
function(result){
console.log(result);
});
注意: 打印机边距设定有一个最小值,例如有的打印机是2.96mm,不同打印机可能不同,小于这个值的设置将无效或无法打印。
打印多份
要打印多份文档,可以传入copyCount配置:
instance.print.print({
name:"测试",
content:"HTML内容",
option: {
copyCount: 3
}
},
function(result){
console.log(result);
});
设置纸张
instance.print.print({
name:"测试",
content:"HTML内容",
option: {
paperWidth: 210, //纸张宽度,单位mm
paperHeight: 297 //纸张高度,单位mm
}
},
function(result){
console.log(result);
});
如果设置的纸张尺寸与标准纸张尺寸很接近,会自动转换为标准纸张尺寸。在设置纸张尺寸前,可使用listPrinterPaper函数,获取打印机支持的纸张规格。
注意:
listPrinterPaper获取的纸张尺寸单位是0.01毫米,设置纸张时的paperWidth/paperHeight单位是毫米,必须做一下转换。
获取打印机支持的纸张规格:
instance.print.listPrinterPaper(
"Microsoft Print to PDF", // 打印机名称
function(result) { // 调用成功回调函数
console.log(result);
},
function(status, text) { // 调用出错回调函数
console.error(status + ":" + text);
}
);
输出:
[
{
name: "A4", // 纸张名称, String类型
width: 21000, // 纸张宽度, 单位0.01毫米, Integer类型
height: 29700, // 纸张高度, 单位0.01毫米, Integer类型
},
{
name: "A5", // 纸张名称, String类型
width: 14800, // 纸张宽度, 单位0.01毫米, Integer类型
height: 21000, // 纸张高度, 单位0.01毫米, Integer类型
}
...
]
更多选项
详情参见API手册。
instance.print.print({
name:”任务”,
content:”HTML内容”,
config:{
color: "no", //黑白打印, yes/no,默认彩色
duplex: "duplex_none", // 单面打印
orientation: "portrait", //纵向打印
pageRange: "1-2", // 页码范围
}
},
function(result){
console.log(result);
});
打印URL
instance.print.print({
name: "打印URL",
type: "url",
content: "https://www.some-url.com"
},
function(result){
console.log(result);
});
具体参数参考API手册。
5.2 接收打印完成事件
打印请求接口都是异步的,发出请求后,函数马上返回,打印结果会以事件的方式发回来。
事件例子:
{
type: "nengjj_event_print", // 事件类型总是 nengjj_event_print
detail: { // 事件详情
docId: "1de9962c-1ea9-477a-af78-947988fe1020", // 唯一标志一次打印请求
state: "PRINT_INIT", // 事件状态
...
}
...
}
在发出打印请求后,如需监听打印相关事件(如打印完成事件),可注册事件监听函数:
instance.print.print({
name:"测试",
content: "<div style='color: red; font-weight:bold;'>Hello</div>",
},
function(result){
console.log(result);
document.addEventListener(
"nengjj_event_print", // 事件类型总是 nengjj_event_print
function(e) {
console.log(e);
if(e.detail.docId == result.docId) {
switch(e.detail.state)
{
case "PRINT_INIT":
// ...
break;
case "PRINT_DONE":
// ...
break;
}
}
}
);
});
事件参数详情,请参考API手册。
6. 打印机管理
获取默认打印机名称
instance.print.getDefaultPrinter(function(res){
console.log(res);
});
输出:
HP DeskJet 5820 series (网络)
接口详情请参考API手册。
获取全部打印机名称
instance.print.listPrinter(function(res){
console.log(res);
});
输出:
[
"Microsoft XPS Document Writer",
"Microsoft Print to PDF",
"HP DeskJet 5820 series (网络)",
"Foxit Reader PDF Printer",
"Fax"
]
接口详情请参考API手册。
获取打印机支持的纸张
var printerName = "HP DeskJet 5820 series (网络)";
instance.print.listPrinterPaper(printerName, function(result){
console.log(result);
});
输出:
[
{name: "信纸", height: 27940, width: 21590},
{name: "法律专用纸", height: 35560, width: 21590},
{name: "Statement", height: 21590, width: 13970},
{name: "Executive", height: 26670, width: 18410},
{name: "A4", height: 29700, width: 21000},
{name: "A5", height: 21000, width: 14800},
// ...
]
接口详情请参考API手册。
获取打印机状态
var printerName = "HP DeskJet 5820 series (网络)";
instance.print.getPrinterState(printerName, function(result){
console.log(result);
});
输出:
idle
接口详情请参考API手册。
获取打印机作业
instance.print.getPrinterJob(printerName, function(result){
console.log(result);
});
接口详情请参考API手册。
本文介绍了一款跨平台的网页打印插件——能加加,其仅7KB的Javascript API让开发者轻松实现网页内容的打印。涵盖了从引入插件、获取实例、版本检测、License管理到实际打印操作的详细步骤,并展示了如何利用API进行定制化打印和监听事件。
4740

被折叠的 条评论
为什么被折叠?



