简介:这份资源面向需要在网页或业务系统中实现打印功能的开发者,尤其是使用 Lodop 打印控件的初中级前端与后端人员,可用于快速搭建本地打印测试环境、对照官方示例理解控件调用方式。压缩包共 43 个文件,以 40 个 html 示例页面为主,覆盖各类打印样例场景,另含 1 个 exe 安装程序、1 个 htm 说明文档和 1 个 js 脚本文件,整体约 1.55MB,体积轻便、解压即用。目前已有 1254 人学习下载,具备一定的参考基础。读者可通过安装程序完成控件部署,再借助大量示例页面逐一验证打印样式、参数配置与调用逻辑,配合说明文档与脚本文件梳理接口用法,适合作为 Lodop 打印功能入门与调试的对照素材,帮助减少自行摸索示例的时间成本。
1. 打印控件装不上:从一次批量部署翻车说起
上周帮一个做仓储管理系统的朋友处理打印问题,他们前端用的是 Lodop 控件,结果在十几台 Windows 机器上批量部署时,一半机器装完没反应,一半机器装完浏览器直接崩。排查下来发现,问题根本不在 Lodop 本身,而是版本选错、浏览器位数对不上、安装顺序搞反了。Lodop 这类打印控件在 Web 打印场景里太常见了,尤其是需要精确控制打印位置、套打票据的系统,几乎绕不开它。但它的安装和配置坑也特别多:32 位和 64 位要分开装、IE 和 Chrome 的调用方式不一样、装完还得注册服务、防火墙偶尔还会拦一下。这篇笔记就把 Lodop 从环境确认到装完验证的完整流程拆开写,适合正在给 Web 系统接打印控件、或者被 Lodop 安装问题卡住的开发者照着走一遍。
2. 装前环境确认:版本、位数和浏览器三件事
2.1 先搞清楚你的系统到底该装哪个版本
Lodop 的安装包分 32 位和 64 位,这不是随便选的。判断方法很简单,打开命令行执行:
# 查看系统架构,x86 表示 32 位,x64 表示 64 位 echo %PROCESSOR_ARCHITECTURE%如果输出AMD64或x86_64,说明是 64 位系统,优先装 64 位版本;如果输出x86,那就是 32 位系统,只能装 32 位版本。这里有个容易翻车的点:64 位 Windows 上,32 位浏览器(比如某些老版本 IE)调用的仍然是 32 位控件,所以如果你的系统里同时有 32 位和 64 位浏览器,两个版本的 Lodop 可能都要装。我一般会先问清楚业务系统跑在什么浏览器里,再决定装哪个。
另外,Lodop 的版本号也要留意。不同大版本之间接口有差异,比如 6.0 系列和更早的 5.x 在部分打印参数上不兼容。装之前先确认业务代码里引用的LODOP对象版本,别装完发现方法对不上。常见做法是去控制面板的「程序和功能」里看一眼已安装的 Lodop 版本,或者直接在浏览器控制台执行getLodop()看返回的对象信息。
2.2 浏览器兼容性对照表
Lodop 在不同浏览器里的加载方式差别很大,装之前先把这张表对一遍:
| 浏览器类型 | 调用方式 | 注意事项 |
|---|---|---|
| IE 内核 | ActiveX 控件 | 需要启用「允许运行已安装的 ActiveX 控件」 |
| Chrome / Edge | NPAPI 插件或本地服务 | 新版本 Chrome 已不支持 NPAPI,需走本地服务模式 |
| Firefox | 插件或本地服务 | 版本差异大,建议统一走服务模式 |
如果你的系统还在用 IE 内核,那安装相对简单,装完控件后在 Internet 选项里把站点加入受信任站点即可。如果是 Chrome 或 Edge,重点确认 Lodop 是否以本地服务方式运行,这决定了你装完要不要额外启动一个后台进程。
2.3 安装前的清理动作
装之前先做两件事,能省掉后面很多玄学问题。第一,卸载旧版本 Lodop,别直接覆盖安装,残留的注册表项和 DLL 会导致新版本加载失败。第二,关掉杀毒软件的实时防护,Lodop 安装过程会注册系统服务、写入注册表,部分安全软件会误拦。装完再开回来就行。
# 查看当前已安装的 Lodop 相关服务,确认没有残留 sc query type= service state= all | findstr /i "lodop"如果这条命令有输出,说明系统里还有旧服务在跑,先停掉再卸载:
# 停止并删除残留服务(服务名以实际输出为准) sc stop LodopService sc delete LodopService这两步做完再开始装新版本,能避免大部分「装完没反应」的情况。
3. 安装与配置:从双击到服务注册的完整链路
3.1 安装包执行与安装路径选择
拿到安装包后,右键选择「以管理员身份运行」,这一步不能省。Lodop 安装过程需要写系统目录和注册表,普通权限下装完可能只有当前用户能用,换账户就失效。安装向导里会让你选安装路径,默认是C:\Program Files\Lodop或C:\Program Files (x86)\Lodop,建议保持默认,别改到中文路径或带空格的目录下,后面配置服务时路径解析容易出问题。
安装过程中会弹出一个组件选择界面,通常包含「打印控件」「设计器」「服务端」几个选项。如果只是前端调用打印,勾选「打印控件」和「服务端」就够了;设计器是给模板制作用的,业务机器上可以不装。装完先别急着重启,继续往下走。
3.2 注册表与受信任站点配置
装完之后,IE 内核浏览器需要把业务系统地址加入受信任站点,否则 ActiveX 控件会被拦截。手动操作路径是:Internet 选项 → 安全 → 受信任的站点 → 站点 → 添加。如果机器多,用命令行批量加更省事:
# 将业务系统域名加入受信任站点(示例域名替换为实际地址) reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\example.com" /v http /t REG_DWORD /d 2 /f这里的/d 2表示受信任站点区域,/f是强制覆盖已有值。执行完最好重启一次浏览器,让注册表变更生效。这一步不做的话,典型现象是页面能加载但打印按钮点了没反应,控制台报「ActiveX 控件未加载」。
3.3 本地服务模式配置
Chrome 和 Edge 新版本已经不支持 NPAPI 插件,Lodop 需要以本地服务方式运行。安装完成后,在安装目录下找到服务启动程序,一般是LodopService.exe或类似名称,手动启动一次并设置为开机自启:
# 注册 Lodop 本地服务并设为自动启动(路径以实际安装目录为准) sc create LodopService binPath= "C:\Program Files\Lodop\LodopService.exe" start= auto sc start LodopServicebinPath=后面是服务程序的实际路径,注意等号后面要有一个空格,这是sc命令的语法要求,漏了会报参数错误。start= auto表示开机自动启动,避免每次重启后打印功能失效。服务启动后,在浏览器里访问业务系统,前端代码通过getLodop()获取对象时就会走本地服务通道。
如果服务启动失败,先看 Windows 事件查看器里的应用程序日志,常见原因是端口被占用或程序路径含中文。Lodop 本地服务默认监听一个本地端口,被其他程序占了就起不来,换端口或停掉冲突程序即可。
3.4 前端调用参数确认
装完控件和服务,前端代码里还要确认几个关键参数。典型的 Lodop 初始化代码长这样:
// 获取 Lodop 对象,第二个参数为控件版本号,需与实际安装版本一致 var LODOP = getLodop('', '6.0.0.0'); if (LODOP) { // 设置打印任务名称,便于在打印队列里识别 LODOP.PRINT_INIT('仓储单据打印'); // 设置纸张大小和边距,单位是毫米 LODOP.SET_PRINT_PAGESIZE(1, 210, 297, 'A4'); // 添加打印内容 LODOP.ADD_PRINT_TEXT(10, 10, 200, 20, '测试打印内容'); // 预览或直接打印 LODOP.PREVIEW(); } else { console.error('Lodop 控件未加载,请检查安装和服务状态'); }getLodop的第二个参数是版本号,填错会导致对象获取失败,这个值要和控制面板里显示的版本对上。SET_PRINT_PAGESIZE的第一个参数1表示纵向,2是横向,后面三个参数分别是宽、高和纸张名称。这些参数在套打票据时尤其重要,差一毫米就可能对不齐。
4. 避坑与排查:五条血泪记录
4.1 装完打印没反应,控制台也不报错
现象:页面加载正常,点打印按钮毫无反应,浏览器控制台干净得像什么都没发生。
原因:多半是getLodop()返回了null,但代码里没做判空,直接往下执行就静默失败了。深层原因是控件没注册成功,或者浏览器位数和控件位数不匹配。
解决:先在控制台手动执行getLodop()看返回值。如果是null,检查安装目录下 DLL 是否注册成功,用管理员权限重新执行一次安装包的修复模式。再确认浏览器位数,64 位浏览器配 64 位控件,别混装。
4.2 Chrome 提示插件不受支持
现象:Chrome 地址栏下方弹出「此插件不受支持」的提示条,打印功能不可用。
原因:Chrome 从 45 版之后彻底移除了 NPAPI 插件支持,Lodop 的老式插件加载方式失效。
解决:改用本地服务模式。确认LodopService已启动,前端代码走服务通道调用。如果业务系统必须用插件模式,只能降级浏览器或换 IE 内核,但这在生产环境里不现实,所以服务模式是唯一稳妥路线。
4.3 换用户登录后打印失效
现象:管理员账户装完能用,普通用户登录后打印按钮点了没反应。
原因:安装时没以管理员身份运行,控件只注册到了当前用户的环境里,换账户后注册表项和权限都不对。
解决:卸载后以管理员身份重装,确保注册表写入的是HKEY_LOCAL_MACHINE而不是HKEY_CURRENT_USER。装完用普通账户登录验证一次,确认功能正常再批量部署。
4.4 打印位置偏移,套打对不齐
现象:预览时位置正常,实际打印出来整体偏移几毫米,票据套打完全对不上。
原因:打印机驱动里的纸张边距设置和 Lodop 里的SET_PRINT_PAGESIZE参数冲突,或者打印机本身有硬件偏移。
解决:先在打印机驱动属性里把边距全部设为 0,再在 Lodop 里用SET_PRINT_MARGIN精确控制边距。如果还有固定偏移,用SET_PRINT_OFFSET做整体微调,这个参数单位是毫米,正负值都可以,我一般以 0.5 毫米为步长试。
4.5 服务启动报错 1053
现象:执行sc start LodopService时报「错误 1053:服务没有及时响应启动或控制请求」。
原因:服务程序路径不对,或者程序依赖的运行库缺失。也可能是服务账户权限不足。
解决:先确认binPath=指向的 exe 文件真实存在,路径里别有中文和空格。再检查系统是否装了对应的 Visual C++ 运行库,Lodop 服务依赖它。最后把服务登录账户改成LocalSystem,权限最省心。
5. 装完怎么验证:三步确认打印链路通
装完不验证等于没装。我一般按三步走,每步都有明确的通过标准,任何一步不过就停下来排查,别往下硬推。
第一步,确认控件对象能拿到。打开业务系统页面,按 F12 进控制台,手动执行getLodop(),返回值不是null且能打印出对象信息,说明控件加载成功。如果返回null,回到第 3 章的注册表和服务配置重新检查。
第二步,确认服务在跑。命令行执行sc query LodopService,状态显示RUNNING才算通过。同时用netstat -ano | findstr加上服务监听的端口号,确认端口处于监听状态。这一步能排除「控件装了但服务没起」的假成功。
第三步,走一次完整打印流程。用一段最小化的测试代码,设置纸张、加一行文字、调PREVIEW()预览。预览窗口能正常弹出、内容位置正确,再点实际打印,确认打印机出纸。三步全过,才算这套环境真正跑通。
// 最小化验证脚本,在浏览器控制台直接执行 var LODOP = getLodop('', '6.0.0.0'); if (LODOP) { LODOP.PRINT_INIT('验证打印'); LODOP.SET_PRINT_PAGESIZE(1, 100, 150, '自定义'); LODOP.ADD_PRINT_TEXT(10, 10, 80, 20, 'Lodop 验证通过'); LODOP.PREVIEW(); } else { console.error('控件未加载,检查安装和服务'); }这段脚本的好处是把变量降到最少,纸张用自定义小尺寸,内容只有一行字,排除模板和业务数据的干扰。预览能出来,说明控件、服务、浏览器三方链路是通的;预览出不来,问题一定在前两步。
从那以后我每次给新机器装 Lodop,都强制走一遍这三步验证,哪怕业务方催得再急也不跳过。因为跳过验证的代价往往是上线当天才发现打印不了,那时候排查成本翻好几倍。希望这套流程能帮到你,少走几个我踩过的坑。
本文还有配套的精品资源,点击获取