文章目录
lodop 使用步骤总结
-
- 安装lodop软件后(win/linux都有相应版本),使用 lodop 之前,需要在odoo框架中引入js
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data>
<template id="assets_backend" name="form address" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<script src="http://localhost:8000/CLodopfuncs.js"></script>
</xpath>
</template>
</data>
</odoo>
-
- 在对应的form视图中,引入自定义好的lodop打印格式的js文件
<!-- 存放处理后的lodop 数据 -->
<xpath expr="//sheet" position="inside">
<field name="line_lodop_data" invisible="1"/>
</xpath>
<!-- lodop 处理格式的 js 文件 -->
<xpath expr="//sheet" position="after">
<script src="/print_lodop/static/src/js/print.js"></script>
</xpath>
-
- 在js文件中,声明全局变量 LODOP
var LODOP; //声明为全局变量
-
- lodop 的常用格式总结:(含义及注意项在对应行后面的注释中)
// 打印模式设置
LODOP.PRINT_INIT(""); // 打印初始化(写这个防止修改打印格式后跟本地缓存的格式命名相同而不起作用)
LODOP.SET_PRINT_MODE("POS_BASEON_PAPER", true); // 设置以纸张边缘为基点 (有些打印范围总是在纸张外的,设置这个管用调边距不管用)
// 打印的纸张设置
LODOP.SET_PRINT_PAGESIZE(2, 2100, 2970, '打印模板1-横向'); // 打印纸张方向,1是竖向,2是横向
LODOP.SET_PRINT_PAGESIZE(1, 2100, 2970, '打印模板2-竖打'); // 打印纸张方向,1是竖向,2是横向
LODOP.SET_PRINT_PAGESIZE(1, 1016, 510, 打印模板L1'); // 自定义纸张大小,方向要对,否则会怎么调试都没有效果,原来设置的为3
// 打印设置
LODOP.NewPage(); // 打印新创建一个纸张
LODOP.PRINT_SETUP(); // 打印设置,可以清除本地打印缓存的模板
LODOP.PRINT_DESIGN(); // 打印设置,调整边距等
LODOP.PREVIEW(); // 打印预览(只有在对应的有该打印机的电脑上预览才是正确的)
LODOP.PRINTA(); // 直接打印
// LODOP.SET_PRINT_STYLE 这个后面不加 A 是全局的,加 A 的是局部的
LODOP.SET_PRINT_STYLE("FontName", "黑体"); // 设置通用的字体为黑体
LODOP.SET_PRINT_STYLE("FontSize", 24); // 设置统一的字号为 24
LODOP.SET_PRINT_STYLEA(0, "FontSize", 22); // 设置最近一行的字号为22
LODOP.SET_PRINT_STYLEA(0, "Alignment", 2); // 设置文本水平居中
LODOP.SET_PRINT_STYLEA(0, "Bold", 1); // 设置字体加粗
LODOP.SET_PRINT_STYLEA(0, "TextNeatRow", true); // 设置英文和数字可以自动换行
LODOP.SET_PRINT_STYLEA(0, "LetterSpacing", -1.5); // 设置文本的字距间隔
// 打印的形式:文本,直线,图片,矩形,二维码
LODOP.ADD_PRINT_TEXTA("p_name", top+"cm", left+"cm", width, height, "品名:" + obj.product_name); // 设置最近一行打印的文本格式
LODOP.ADD_PRINT_LINE("2.0cm", "0.4cm", "2.0cm", "14.5cm", 0, 2); // 设置打印横线的格式
LODOP.ADD_PRINT_IMAGE(top1+"cm", img_left1+"cm", img_size+"cm", img_size+"cm", localPath+"/km_order_qrcode_print_lodop_v13/static/src/img/"+String(j+1)+".png"); // 设置打印图片
LODOP.ADD_PRINT_RECT(String(1.2+i*updown_gap) + "cm", String(1.6) + "cm", "16.6cm", "8.0cm", 0, 3); // 设置打印长方形
LODOP.ADD_PRINT_BARCODE("2.8cm", "7.7cm", "2.5cm", "2.5cm", "QRCode", obj.qrcode_url); // 设置打印二维码
LODOP.SET_PRINT_STYLEA(0, "QRCodeVersion", 5); // 设置二维码版本为5
-
- 其他
// 获取地址栏的绝对路径(打印图片的时候,如果使用本地图片,需要使用)
function getRootPath() {
var strFullPath = window.document.location.href;
var strPath = window.document.location.pathname;
var pos = strFullPath.indexOf(strPath);
var prePath = strFullPath.substring(0, pos);
var postPath = strPath.substring(0, strPath.substr(1).indexOf('/') + 1);
return (prePath + postPath);
}
// 获取页面上的数据及转换格式
var json_lodop = document.getElementsByName("lodop_data")[0].innerText;
var obj = eval(json_lodop);
// js 中使用数组存放数据
var tu = new Array();
tu.push(obj.tu1);
需要注意的问题
(2023-07-12 周三 更新)
LODOP.SET_PRINT_PAGESIZE(2, 2100, 2970, '打印模板1-横向'); // 打印纸张方向,1是竖向,2是横向
LODOP.SET_PRINT_PAGESIZE(1, 2100, 2970, '打印模板2-竖打'); // 打印纸张方向,1是竖向,2是横向
-
注意1:设置纸张大小中的 2100 和 2970 单位默认是 mm,要换算正确。
问题:否则容易出现的问题就是:打印机打印的时候会走纸,但是纸张上没有内容。或者是实体打印机上预览的时候,可打印区域跟预想的不一样。还有可能打印机不支持自定义打印。
解决:用实物的打印机进行预览,一般需要用哪个打印机就在那个打印机上预览;但是虚拟打印机有时候预览是好的,但是跟实物打印机还是有差别的。
补充:纸张大小的优先级顺序问题 -
注意2:第一个参数是内容打印的方向。横向打印,意思是在纸张是竖向的情况下,旋转内容的方向,如果纸张方向是横向,纸张宽高再互换,相当于负负得正的意思。还有一种情况就是下面参考的。
参考:图解打印机的“横向打印”含义 -
注意3:有时候修改了js 代码不能生效。
解决:重启服务,清除缓存,使用浏览器隐私模式,重启电脑。