不是有一个LinePrinter的控件吗,去找找,应该可以。

解决方案 »

  1.   

    先根据内容计算有多少行,每行高度,得到总的高度。
    设置自定义纸张,高度为上面计算得到的高度。下面是改变纸张大小的函数。procedure ChgPaperSize(PSize, PLen, PWid: Integer);
    var Device: array[0..cchDeviceName-1]of Char;
        Driver: array[0..(MAX_PATH-1)]of Char;
        Port: array[0..32]of Char;
        hDMode: THandle;
        pDMode: PDevMode;
    begin
      Printer.GetPrinter(Device, Driver, Port, hDMode);
      if hDMode <> 0 then
       begin
        PDMode:= GlobalLock(hDMode);
        if pDMode <> nil then
         begin
          pDMode^.dmPaperSize:= PSize;
          if PSize = 256 then
           begin
            pDMode^.dmPaperLength:= PLen;
            pDMode^.dmPaperWidth:= PWid;
           end;
          pDMode^.dmFields:= pDMode^.dmFields or DM_PAPERSIZE;
          pDMode^.dmFields:= pDMode^.dmFields or DM_PAPERLENGTH;
          pDMode^.dmFields:= pDMode^.dmFields or DM_PAPERWIDTH;
          ResetDC(Printer.Handle, pDMode^);
          GlobalUnlock(hDMode);
         end;
       end;
    end;