3270 打印问题

3270 数据流不是针对比例字体设计的。 这可能会导致某些打印作业出现问题,导致字符重叠。 使用“打印服务器属性”页的高级设置,可以将主机打印服务配置为使用不同的字符定位方法。

表单源问题

主机打印服务的一个常见问题是 FF) (窗体源多余或缺失。 其中一些问题涉及 SNA Print 如何处理显式表单源。 其他问题与使用每页行数(代替 FF 字符)导致分页符 (窗体源) 有关。

当主机打印服务收到主机数据流中的 FF 字符 ('0x0C') 时,它会保留此字符,直到收到其他数据(控制代码 (SCS 或 3270 订单) 或可打印字符)。 如果它收到其他数据,则会将 FF 发送到打印机并处理其他数据。 如果没有收到进一步的数据,这意味着我们在作业结束时,将删除 FF。 此时,SNA 打印将通过调用未使用 PDT 的会话的 EndDocEndDocPrinter(对于使用 PDT 的会话)来完成未完成的作业。 调用 EndDoc 时,作业末尾会添加一个 FF。 调用 EndDocPrinter 时,不会添加 FF。 在后一种情况下,SNA Print 是否将 FF 添加到作业末尾取决于 PDT 中END_JOB参数的配置方式。 使用 PDT 的替代方法是在 Windows 打印机属性中更改打印处理器的默认数据类型。 如果默认数据类型设置为 RAW [auto FF],则打印驱动程序会检查是否存在 FF,并在必要时添加 FF。

使用 PDT 时,可以强制 SNA Print 不删除最终 FF。 这需要添加注册表项 FlushFF 并将其设置为 TRUE。

FlushFF:  REG_SZ   
   HKEY_LOCAL_MACHINE  
     SYSTEM  
       CurrentControlSet  
          Services  
             SnaPrint  
               Parameters  
  
作业结束时的 FF PDT 已添加 FF 结束结果
FF
FF
(依赖于 PDT)
(依赖于 PDT)

许多较旧的主机打印作业依赖于每页的行数来确定分页符。 例如,假设作业每页使用 66 行,因此在文本后面添加足够的空白行,使总行数达到 66 行,然后再开始下一页的文本。 如果有 30 行文本,则会在用于下一页的文本之前添加 36 个空白行。 此方法的缺点是取决于打印机的可打印区域、每英寸的行数、每页的行数以及作业的上边距设置。 如果每页默认只有 65 行,则生成的打印输出将显示“页面爬行”,其中最后一个空白行将推送到下一页的顶部,然后向第三页的顶部推送两行,依此推。 可以通过将 START_JOB 参数的上边距设置为零,将每页的行数设置为 66,在 PDT 文件中修复此“页面爬行”。 此外,打印机会话属性应将每英寸行数设置为 6。

例如,对于使用 HP PCL 的打印机,会将以下内容添加到 PDF 中:

在宏部分中:

TOP    EQU 1B 26 6C 30 45    /* Top Margin set to 0 */  
STL    EQU 1B 26 6C 36 36 46        /* Set Text Length to 66 */  
  

对于“启动作业”

START_JOB = TOP0 STL  
  

主机打印服务旨在执行 LU 3 打印作业中包含的表单源 (FF) 满足以下任何条件时:

  • 如果在 3270 Erase/Write 或 Erase/Write Alternate 命令中将 FF 作为 WCC 后的第一个字符插入。

  • 如果 FF 位于有效的 NL (新行) 顺序之后。

  • 如果 FF 位于任何打印行的最后一个可打印字符位置之后。

    可以使用一个注册表项,它将强制主机打印服务遵循 LU 3 打印作业中的所有表单源字符,即使它们不符合上述条件。 若要添加此项,请使用 Regedit.exe 查找以下项:

HKEY_LOCAL_MACHINE  
   SYSTEM  
    CurrentControlSet  
      Services  
        SnaPrint  
          Parameters  
  

将以下条目添加到此项:

Value Name:    
Data Type:    
String:    

DoAllLU3FF 应设置为 TRUE。 系统会检查此注册表项是否存在。 为字符串输入的任何值都将启用此功能。