这个打印问题如何解决(100分)

  • 主题发起人 jonyhuang
  • 开始时间
J

jonyhuang

Unregistered / Unconfirmed
GUEST, unregistred user!
我发现用 printer.begin
Doc方法打印,在喷墨打印机和针式打印机下所走的行距不一样
应此同一个程序,可能在喷墨打印机一页纸可以打完,但在针式下却无法打完,不知有何方法
解决(不要告诉我编两个不同的程序)
jonyhuang
 
你不用你的程序,用word来打印一下试试,看有没有这种问题,如果没有的话,
才说明你的程序要改,但这种情况不易发生。
我想应该不是你的程序问题,请检查你的打印机,
如果你真的看得出行距不一致,那么有一个打印机有问题了
如果不是这样,那就可能是打印机的打印起始位置不同引起的。
另外, 特别检查针式打印机, 有时它的缺省打印方式不是A4, 而是窄行打印纸方式
需要看说明书来设置。
 
用word打印是正确的,我的程序是这样的
re:=230;
printer.begin
Doc;
printer.Canvas.Font.size:=10;
printer.Canvas.TextOut(2000,200,edit4.text);
if RadioGroup4.ItemIndex=1 then
begin
printer.canvas.textout(2000,250,'(MEMO B/L)');
PRINTER.canvas.textout(2000,300,'(示范提单,不能做正式提单使用)');
END else
begin
PRINTER.canvas.textout(2000,300,'(示范提单,不能做正式提单使用)');
end;
for i:=0 to memo2.lines.Count-1do
begin
printer.Canvas.TextOut(200,re,memo2.lines);
re:=re+50;
end;
//发货人
re:=570;
for i:=0 to memo3.lines.Count-1do
begin
printer.Canvas.TextOut(200,re,memo2.lines);
re:=re+50;
end;
//收货人
在喷墨打印机下每加50是一行,可在针式打印机下却走了2行
请问问题出在哪?
jonyhuang
 
是因为两者的分辨率不通,比如一般针打的为180dpi,而HP的Laser printer
为300dpi;而你打印时Textout的度量单位都为像素点,同样的走50个像素点,
分辨率高的走的纸的长度就大,明白吗!
 
sharkHun 說得有理
 
有何方法解决,难道要重新定位吗
 
解决办法:
假设两行的间距re=0.1inch,
Py := GetDeviceCaps(Printer.Handle,LOGPIXELSY);
Textout(x,trunc(py*re),'xxxxx');
 
设置打印机的映射方式就可以了
 
请问如何设置打印机的映射方式
另sharkHun,我还是不怎明白你的回答,能否帮我把上面的例子改一下,谢谢
jonyhuang
 
快帮帮我,急死了!!!!!
jonyhuang
 

re:=230;
LineSpace := 10;
//单位是毫米(mm)
py := GetDeviceCaps(printer.canvas.handle,LOGPIXELSY);
printer.begin
Doc;
printer.Canvas.Font.size:=10;
printer.Canvas.TextOut(2000,200,edit4.text);
if RadioGroup4.ItemIndex=1 then
begin
printer.canvas.textout(2000,250,'(MEMO B/L)');
PRINTER.canvas.textout(2000,300,'(示范提单,不能做正式提单使用)');
END else
begin
PRINTER.canvas.textout(2000,300,'(示范提单,不能做正式提单使用)');
end;
for i:=0 to memo2.lines.Count-1do
begin
printer.Canvas.TextOut(200,re,memo2.lines);
re:=re + (LineSpace /10)/2.54*py;
end;
//发货人
re:=570;
for i:=0 to memo3.lines.Count-1do
begin
printer.Canvas.TextOut(200,re,memo2.lines);
re:=re +(LineSpace /10)/2.54*py;
end;
//收货人

如果打印出来的行间距的大小不合适,可调整变量LineSpace的值;
试试把!
 
我网站 http://www.to-happy.com 大事软件礼有相关例子,你需要吗?
 
顶部