给你一段套打的代码。
精确套打我通常都是用尺子测量出各个位置间的长度(毫米)
每英寸大约25.4毫米,这样,可以实现物理距离与设备坐标的转换。
先定义左上角的坐标为(0,0),然后以左上角为基准得出其他所有
开始点的坐标,然后测试套打,不准确的话,只需调整左上角基准坐标就行了。
操作和代码比较复杂,但实现的效果非常好。很精确的。
请研究一下下面的代码。
procedure TFrmrtxhfp.btnprint_2;
var
sPixelsPermm:single;
pLeft,pTop:integer;
Dev:TPrinter;
frow1:array[1..2]of integer;
frow2,frow3,frow4,frow5,frow6,frow7: integer;
frow8:array[1..6]of integer;
fcol :array[1..8]of integer;
addrow :array[1..3]of integer;
addcol :array[1..4]of integer;
begin
sPixelsPermm:=GetDeviceCaps(printer.handle,LOGPIXELSX)/254;
Dev:=Printer;
pLeft:=-0;
pTop :=-40;
dev.Canvas.Font.Name:='宋体';
dev.Canvas.Font.Size:=12;
frow1[1]:=round((pLeft+140-80)*sPixelsPermm);
frow1[2]:=round((pLeft+1890)*sPixelsPermm);
frow2:=round((pLeft+280-80)*sPixelsPermm);
frow3:=round((pLeft+340-80)*sPixelsPermm);
frow4:=round((pLeft+280-80)*sPixelsPermm);
frow5:=round((pLeft+280-80)*sPixelsPermm);
frow6:=round((pLeft+310-80)*sPixelsPermm);
// frow7:=round((pLeft+2050)*sPixelsPermm);
frow8[1]:=round((pLeft+710-50)*sPixelsPermm);
frow8[2]:=round((pLeft+860-50)*sPixelsPermm);
frow8[3]:=round((pLeft+970-50)*sPixelsPermm);
frow8[4]:=round((pLeft+1310-50)*sPixelsPermm);
frow8[5]:=round((pLeft+1470-50)*sPixelsPermm);
frow8[6]:=round((pLeft+1590-50)*sPixelsPermm);
addrow[1]:=round((pLeft+520)*sPixelsPermm);
addrow[2]:=round((pLeft+1330-80)*sPixelsPermm);
addrow[3]:=round((pLeft+940)*sPixelsPermm);
addcol[1]:=round((pTop+830-80)*sPixelsPermm);
addcol[2]:=round((pTop+550-80)*sPixelsPermm);
addcol[3]:=round((pTop+620-80)*sPixelsPermm);
// addcol[4]:=round((pTop+620-80)*sPixelsPermm);
fcol[1]:=round((pTop+80)*sPixelsPermm);
fcol[2]:=round((pTop+190)*sPixelsPermm);
fcol[3]:=round((pTop+310-40)*sPixelsPermm);
fcol[4]:=round((pTop+390-40)*sPixelsPermm);
fcol[5]:=round((pTop+450-40)*sPixelsPermm);
fcol[6]:=round((pTop+520-40)*sPixelsPermm);
// fcol[7]:=round((pTop+910)*sPixelsPermm);
fcol[8]:=round((pTop+830)*sPixelsPermm);
dev.Canvas.brush.Color :=clWhite;
dev.begin
Doc;
dev.Canvas.Font.Size:=16;
dev.Canvas.TextOut(frow1[2],fcol[1],edit1.text);
dev.Canvas.Font.Size:=12;
dev.Canvas.TextOut(frow1[1],fcol[1],combobox1.text);
dev.Canvas.TextOut(frow2,fcol[2],edit4.text);
//姓名
dev.Canvas.TextOut(frow3,fcol[3],combobox3.text);//性别
dev.Canvas.TextOut(frow4,fcol[4],datetostr(dp1.date));
dev.Canvas.TextOut(frow5,fcol[5],'入托');
dev.Canvas.TextOut(frow6,fcol[6],'血');
dev.Canvas.TextOut(frow8[1],fcol[8],inttostr(yy));
dev.Canvas.TextOut(frow8[2],fcol[8],inttostr(mm));
dev.Canvas.TextOut(frow8[3],fcol[8],inttostr(dd));
dev.Canvas.TextOut(frow8[4],fcol[8],inttostr(yy));
dev.Canvas.TextOut(frow8[5],fcol[8],inttostr(mm));
dev.Canvas.TextOut(frow8[6],fcol[8],inttostr(dd));
dev.Canvas.TextOut(addrow[1],addcol[1],'Hb');
dev.Canvas.TextOut(addrow[2],addcol[2],'√');
dev.Canvas.TextOut(addrow[2],addcol[3],'√');
dev.Canvas.TextOut(addrow[3],addcol[1],'g/L');
// dev.Canvas.Font.Size:=10;
dev.EndDoc;
end;