四、调用
在脚本中调用这个组件的方法:
(1)、利用createobject函数创建一个打印对象。
(2)、调用prtcustompage来指定定制的纸张的大小(以0.1毫米为基本单位)。如果,不是定制的纸张则不需要调用这个过程(即以打印默认的纸张大小进行打印)。
(3)、调用prtstart进行打印机的初始化工作。如果打印机初始化成功,则会将isinit属性置为真,表示初始化成功;否则,表示打印机正在忙或有别的应用程序正在使用打印机,初始化不能成功。
(4)、判断isinit标志。如果为真,则继续执行打印段。
(5)、执行打印段。可以在利用打印机画线、和在指定位置输出文字。
(注:在组件接中的所有位置单位都是0.1毫米。例?prtobject.prtdrawlien 0,0,1000,1000
表示从左上角(0,0)毫米到右下角(100,100)毫米处,画一条直线)
(6)、利用prtend结束打印任务。
< script language=vbscript>
< !--
sub testprtobject
dim prtobject
set prtobject=createobject(prttest3.prttest3)
prtobject.prtcustompage 1000,1000
prtobject.prtstart
if prtobject.isinit then
prtobject.prtdrawline 0,0,1000,1000,1
prtobject.prtdrawline 500,700,1000,1000,1
prtobject.prtsetfont 宋体,16
prtobject.prttextrect 2,2,0,0,1000,500,web应用程序打印测试
prtobject.prtend
end if
set prtobject=nothing
end sub
testprtobject()
//-->
< /script>
Delphi开发WEB应用程序打印组件(3)
五、代码解析
在这个组件中,我们所要解决的几个问题:
(1)、在delphi的应用程序设计中自定义打印纸张的设置,delphi中自身带了一个quickreport的打印设计程序,这个程序在一定的程度上方便了打印的设计,但这个设计程序对于自定义纸张的设定和打印支持却不是很好。因此,在这个组件中我们采用手工代码来设定自定义纸张大小。
function tprttest3.initprintpaper:boolean;
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
result:=true;
if prtiscustompaper then
begin
{设置打印机段}
printer.getprinter(device,driver,port,hdmode);
if hdmode<>0 then begin
try
pdmode:=globallock(hdmode);
if pdmode<>nil then begin
//设定打印的方向为纵向或横向
if paperorientation<>0 then
pdmode^.dmorientation:=dmorient_landscape
else pdmode^.dmorientation:=dmorient_portrait;
//设置拷贝份数为1份.
pdmode^.dmcopies:=1;
//以毫米为单位的纸张大小.
pdmode^.dmpaperlength:= paperheight*10;
pdmode^.dmpaperwidth:=paperwidth*10;
//设置纸张类型为用户自定义.
pdmode^.dmpapersize:=dmpaper_user;
end;
globalunlock(hdmode);
printer.setprinter(device,driver,port,hdmode);
except
result:=false;
end;
end else begin
result:=false;
end;
end;
end;
Delphi开发WEB应用程序打印组件(4)