在预览要打印的文字时,如何使预览接近真实的情况? (24分)

  • 主题发起人 主题发起人 mycwcgr
  • 开始时间 开始时间
M

mycwcgr

Unregistered / Unconfirmed
GUEST, unregistred user!
在预览要打印的文字时,如何使预览接近真实的情况?

我用
printer.canvas.font:=8;
printer.canvas.textout(50,50,'qaz');
这样的语句在printer.pageheight和printer.weight大小的画布上精确定位打印文字!

在预览时,由于printer.pageheight和printer.weight的像素一般大于屏幕尺寸,所以
按比例缩小来设置image1的尺寸,然后在image1上用这样的语句预览:
image1.canvas.font:=8;
image1.canvas.textout(50,50,'qaz');

由于打印机的PixelsPerInch为600,而屏幕PixelsPerInch为96,所以image1.canvas上的文本较大,image1.canvas容纳
的文本行数减少,与真实的打印情况不同,请问在预览要打印的文字时,如何使预览接近真实的情况?

注:将屏幕上的字体高度按比例96/600缩小不行,因为屏幕没有这么小的字体!
 
屏幕分辩率为96
怎么算的分辨率这么低
 
96 is PixelsPerInch
 
利用函数GetDeviceCaps():
var
iH,iV:integer;
iH:=GetDeviceCaps(printer.handle,logpixelsx);
iV:=GetDeviceCaps(printer.handle,logpixelsy);
printer.canvas.rectang(0,0,iH*1,iV*2);
end.
 
To Delphizeng,
画图形和画文字是两个概念
字体有像素的概念
 
因不想用第三方软件,我用paintbox做过一次中国式表格预览,我是加了一个缩放比例,也就是用定义paintbox的长宽和所需纸张的对应比例,再算出实际字的大小和屏幕字体的比例,用textout输出到画布上,打印时调用canvas输出到纸张上。当时用的最小字可能是小五号吧,因为我想要预览,就要看得见才行,不然预览有什么用呢?所以没有用更小的字,也不知更小的字能不能看得到。如果不能正确显示的话,就只能用黑点表示了。
 
TO lusj586,
你做的和我说的是一样的,由于打印机的PixelsPerInch为600,而屏幕PixelsPerInch为96,所以image1.canvas上的文本较大,image1.canvas容纳
的文本行数减少,与真实的打印情况不同?
但是一些商业软件为什么能做到如:WORD,Fastreport,预览和打印一样
 
看来你只有自已控制字体了,给你一段代码,看有没有用:
Font_Name:=TinyTable2.FieldByName('字体').AsString;
Font_height:=trunc(TinyTable2.FieldByName('字高').Asfloat*scale*1.42222);
font_width:=trunc(TinyTable2.FieldByName('字宽比例').Asfloat*font_height*0.5);
getobject(canvas.Font.Handle,sizeof(logfont),addr(logfont));
logfont.lfHeight:=font_height;
logfont.lfWidth:=font_width;
logfont.lfEscapement:=round(TinyTable2.FieldByName('旋转角度').Asfloat*10);
strpcopy(logfont.lfFaceName,font_name);
hnewfont:=createfontindirect(logfont);
holdfont:=selectobject(canvas.handle,hnewfont);
 
你下载以下程序我再告诉你:
http://www.onlinedown.net/soft/30223.htm
 

Similar threads

后退
顶部