Printer打印到纸张产生的页边距的问题,打印高手帮忙啊!!!

yqdragon 2010-06-25 04:00:17
我用printer打印到A4纸,在(8,2)厘米处输出字符 国国国国国国
但是实际打出来后,用尺子量 x,y座标并不是8和2,我用
x :=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
y :=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
减去这个x,y偏移也不对,也不等于8和2,请高手帮忙,如何使
Printer.Canvas.TextOut(Round(800*dpipx/254),Round(200*dpipx/254),'国国国国国国');
打印后,量的尺寸正好是(8,2)厘米呢

代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
dpipx,dpipy:integer;
begin
SetPaperSize_A4;
Printer.Orientation := poLandscape; //poPortrait纵向 poLandscape;横向
Printer.BeginDoc;
dpipx := GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX);
dpipy := GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY);
Printer.Canvas.Font.Charset := GB2312_CHARSET;
Printer.Canvas.Font.Name := '宋体';
Printer.Canvas.Font.Height := Round(50 * dpipy/254);
Printer.Canvas.Font.Style := [];
Printer.Canvas.Pen.Width := 1;
Printer.Canvas.TextOut(Round(800*dpipx/254),Round(200*dpipx/254),'国国国国国国');
Printer.EndDoc;

end;

procedure TForm1.SetPaperSize_A4;
var
aDevice: array[0..CCHDEVICENAME-1] of char;
aDriver: array[0..MAX_PATH-1] of char;
aPort: array[0..31] of char;
hDevMode: THandle;
pDevMode: PDeviceMode;
begin
Printer.GetPrinter(aDevice, aDriver, aPort, hDevMode);
if hDevMode <> 0 then
begin
pDevMode := GlobalLock(hDevMode);
if pDevMode <> nil then
begin
pDevMode^.dmPaperSize := DMPAPER_A4;
pDevMode^.dmOrientation:=DMORIENT_PORTRAIT;
pDevMode^.dmFields:=pDevMode^.dmFields or DM_PAPERSIZE;
GlobalUnlock(hDevMode);
end;
end;
end;

...全文
296 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hqstudio 2010-07-12
  • 打赏
  • 举报
回复
不同的打印机都有不可打印区域,这个距离要根据实际打出来后测量得到
alanhao 2010-07-05
  • 打赏
  • 举报
回复
使用针式打印机试试吧,激光打印机使用此种方式有问题,这和打印驱动有关。
yqdragon 2010-07-05
  • 打赏
  • 举报
回复
没人知道吗???
幻想多巴胺 2010-07-02
  • 打赏
  • 举报
回复
yqdragon 2010-06-29
  • 打赏
  • 举报
回复
晕,Round(800*dpipx/254)已经转换为像素了啊
期待解决中
newfang 2010-06-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lovelymelon 的回复:]
代码的中的单位好像是像素吧,也就是说你输入的8和2都是像素,需要转换成厘米

像素和厘米的对应关系是28.35:1
[/Quote]

To lovelymelon:像素和CM的转换,是不是和打印机的分辨率也有关系?
laowang2 2010-06-26
  • 打赏
  • 举报
回复
什么样的打印机?打印机是有偏差的,你用word试试,看能达到你的要求不?
lovelymelon 2010-06-26
  • 打赏
  • 举报
回复
代码的中的单位好像是像素吧,也就是说你输入的8和2都是像素,需要转换成厘米

像素和厘米的对应关系是28.35:1
yqdragon 2010-06-26
  • 打赏
  • 举报
回复
咋没人回答啊,高手都哪去啦啊
coderee 2010-06-25
  • 打赏
  • 举报
回复
路过。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧