You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle类Unix与Windows Server金属标签打印EOL换行异常求助

金属标识牌打印双行距问题排查求助

我维护一套用于打印金属标识牌(类似军用身份牌)的遗留系统。近期完成两项变更:将打印服务器升级至Windows Server 2019,同时把测试数据库服务器从Redhat Linux替换为HP Unix,之后出现了金属标识牌打印双行距的问题。

相关PL/SQL代码

注意代码里的换行符顺序是LF(chr(10))在前、CR(chr(13))在后,和常规顺序颠倒:

-- XONOFF starts with STX
v_out := '<';

-- line #1 XONOFF needs only LF CR to seperate lines
v_out := v_out || 'some data' || chr(10) || chr(13);

-- line #2 XONOFF needs only LF CR to seperate lines
v_out := v_out || 'some more data' || chr(10) || chr(13);

-- XONOFF needs ETX at end of message and LF CR to help flush
v_out := v_out || '>' || chr(10) || chr(13);
utl_file.put(v_file, upper(v_out)); 
utl_file.fflush(v_file);

环境与测试限制

由于资源有限,测试环境和生产环境的链路如下:

  • 生产环境:生产数据库服务器→生产打印服务器→生产打印机
  • 测试环境:测试数据库服务器→生产打印服务器→生产打印机

最初推测问题根源:打印服务器升级到Windows Server 2019后,将代码里的LFCR识别为Linux风格换行符,自动转换为CRLF,最终输出变成CRLFCR,导致额外空行。临时解决方案是切回Windows Server 2012,但业务方强烈要求升级到2019。

今日协调测试时,先重启打印服务器到2019确认生产环境问题重现,随后在测试数据库服务器上测试修改后的代码(将LFCR替换为CRLF),预期问题会出现,但测试结果完全正常,测试计划受阻。

已测试的环境组合结果

唯一差异是测试DB为Redhat RHEL 7.9,生产DB为HP Unix,测试组合及结果:

  • 测试DB(Redhat RHEL 7.9) + 打印服务器(Win 2012):打印正常
  • 测试DB(Redhat RHEL 7.9) + 打印服务器(Win 2019):打印正常
  • 生产DB(HP Unix) + 打印服务器(Win 2012):打印正常
  • 生产DB(HP Unix) + 打印服务器(Win 2019):打印双行距

当前困境与疑问

我们最终目标是将打印服务器升级到2019,同时计划把生产DB换成Redhat,理论上能解决问题,但不确定根源。我认为调整代码中的EOL序列可以解决问题,但无法在测试环境复现问题,也不能在生产环境修改代码测试。

求问:

  1. 该问题的可能原因是什么?
  2. 有哪些排查建议?
  3. 代码里提到的XON/XOFF机制相关的问题,是否和当前打印异常有关?

内容的提问来源于stack exchange,提问作者Kmus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 18:38:17