我在用epson LQ 1600kiii针式进行连打时,用的自定义纸张类型,纸张规格为218mm(宽) * 279 mm(高),但是每一张会有0.1mm左右的偏移,连续打印10~20张还接受,在进行大批量的连打时,偏移就很明显了,因为会累加,如100张时就有10mm左右的偏差,就必须手工切一下纸张, 然后由打印机自动退纸张到初始位置,然后继续打印,我想请教大家的是,有没有办法自动完成这个复位的过程(不需要人工干预切纸)
我目前知道有以下几个办法,但试了之后,还是没有解决问题,敬请各位指点:
测试环境 windows 2000 + epson LQ 1600kiii
1. 直接发送控制码,在windows 2k会报错"file access denied", 文件不可以访问,我的打印机是装在LPT1口的
SendPrintCode(Char(27) + '@');
//函数定义
function SendPrintCode(str: string): boolean;
var
  F:TextFile;
begin
  result:= false;
  try
    Assignfile(F,'LPT1');
    rewrite(F);
    Write(F, Str);
    CloseFile(F);
    result:= true;
  except
  end;
end;
2.通过在控制面板设置“自动切纸”,就可以解决该问题,但我找遍了打印机的属性页也没有发现。
3.设置模式为高精度英寸模式
  SetMapMode(DeviceHandle, MM_HIENGLISH); 
  但是不知道如何设置英寸单位的纸张类型, 通过测试发现以下的还是 毫米的 模式。
  有没有直接设置以英寸为单位的方法?
    DevMode := GlobalLock(DeviceHandle);
    if DevMode <> nil then
    begin
      //SetMapMode(DeviceHandle, MM_HIENGLISH);
      DevMode^.dmPaperSize := DMPAPER_USER;
      DevMode^.dmPaperLength := APaperH;  //自定义纸张高度 单位为 0.1mm
      DevMode^.dmPaperWidth := APaperW;   //自定义纸张宽度
      DevMode^.dmFields := DevMode^.dmFields or DM_PAPERSIZE;
      DevMode^.dmFields := DevMode^.dmFields or DM_PAPERLENGTH;
      DevMode^.dmFields := DevMode^.dmFields or DM_PAPERWIDTH;
      ResetDC(Printer.Handle, DevMode^);
      GlobalUnlock(DeviceHandle);
    end;    
敬请各位指点,问题可能比较复杂,可另加分。