打印多份问题。(50分)

  • 主题发起人 主题发起人 fu_qi_ming
  • 开始时间 开始时间
F

fu_qi_ming

Unregistered / Unconfirmed
GUEST, unregistred user!
首先我的打印机支持打印多份。这个打印多份不用程序写吧(也就是程序上处理跟打印一份一样吗)。
可是我这样处理出了问题。每次打印2页2份可以的。而1页2份就错了,老打一份不知为何。
帮我分析分析好吗?(附程序代码)
PrintDlg := TPrintDialog.Create(Self);
PrintDlg.MinPage := 1;
PrintDlg.MaxPage := FPageCount;
PrintDlg.FromPage := 1;
PrintDlg.ToPage := FPageCount;
PrintDlg.Copies := 1;
PrintDlg.Options := [poPageNums];
try
if PrintDlg.Execute then
begin
Printer.begin
Doc;
for I := PrintDlg.FromPage to PrintDlg.ToPagedo
begin
FCurrentPage:=I;
PaintOnePage(Printer.Handle,FCurrentPage-1);
if (I < PrintDlg.ToPage) then
Printer.NewPage;
end;
Printer.EndDoc;
end;
finally
PrintDlg.Free;
end;
 
for I := PrintDlg.FromPage to PrintDlg.ToPagedo
这里只是你从第一页打印到第几页,在你这段代码中没有体现出要打印多少份?
 
这个打印多份不用程序写吧(也就是程序上处理跟打印一份一样吗)。
我想打印多份是打印机实现的(打印2页时,打印机的表现是对的,想发正确,可是打印
一页时,不对的。)
所以我想程序上跟打印一份一样。
请高手指正。到底程序上怎么处理打印多份问题(确定打印机支持打印多份)
 
使用FastReport就可以解决此问题啊!!
 
使用FastReport就可以解决此问题啊!!
不要控件,要自己的代码实现。
 
难道用PrintDialog就不能吗?
我用程序控制是可以的。但是在用PrintDialog时发现:
当选择打印多份并选好自动分页或不选时,PrintDialog的Collate 的一直都是返回False。
不知为何。(难道打印窗体也不能用系统,要自己设计吗?)
 
procedure PrintAllPage;
var
FirstPage,LastPage:Integer;
CopyCount: Integer;
i, j: Integer;
OffsetLenght: longint;
nFullPageWidth, nFullPageHeight: longint;
CanPrintSize: TRect;
CannotMargin: TRect;
procedure IniPrintDialog;
//初始化打印机对话框开始
begin
with MainForm.PrintDialog1do
begin
MinPage:=1;
MaxPage:=iTotalPageCount;
FromPage:=MinPage;
ToPage:=MaxPage;
end;
//初始化打印机对话框结束
end;
procedure InitAllPrintParameters;
//初始化打印页面开始
begin
if MainForm.PrintDialog1.PrintRange = prAllPages then
begin
FirstPage:=1;
LastPage:= iTotalPageCount;
end else
begin
FirstPage:=MainForm.PrintDialog1.FromPage;
LastPage:=MainForm.PrintDialog1.ToPage;
end;
end;
//初始化打印页面结束
begin
{ Place thread code here }
try
if not Printer.Printing then
begin
InitPages(CannotMargin, PrintSwitch);
MainForm.PrintDialog1.Options:=[poPageNums];
MainForm.PrintDialog1.PrintRange:= prPageNums;
IniPrintDialog;
if MainForm.PrintDialog1.Execute=true then
begin
CopyCount:= Printer.Copies;
SetPrinttingPageSize(false, PrinterPpiX, PrinterPpiY, nFullPageWidth, nFullPageHeight, CanPrintSize, CannotMargin, OffsetLenght);
InitAllPrintParameters;
Printer.begin
Doc;
for i:=1 to CopyCountdo
for j:=FirstPage to LastPagedo
begin
//Application.MessageBox(PChar('页码:'+IntToStr(j)), szProgramTitle, MB_OK+MB_ICONSTOP);
try
Printting(OffsetLenght, CannotMargin, j);
finally
if j < LastPage then
Printer.NewPage;
end;
end;
Printer.EndDoc;
end;
end else
Application.MessageBox('打印机忙,请等一会再打印!', szProgramTitle, MB_OK+MB_ICONSTOP);
except
Application.MessageBox('打印选择页错误!', szProgramTitle, MB_OK+MB_ICONSTOP);
end;
end;
 
示例如下:
http://www.onlinedown.net/soft/25472.htm
 
楼上的有打印多份的吗?
主要是通过打印机自己实现或者能取道PrintDialog.Collate的值也可。
 
我在“房地产开发估价管理系统”和“房屋安全鉴定管理系统”用以上代码实现了打印多份和多页的功能,不会错的。如不信,请下载试用。
 
我做“房地产开发估价管理系统”时(也是我第一个软件)打印程序(包括预览)用了差不多5000行代码,打印部分花了不少的心血,我是模仿word来做的。
 
其实自己写代码我早就实现了。
我主要是想直接利用打印机和系统提供的功能。不用程序实现。
 
最后还是,所有写代码实现的。
算了,结了吧。
 

Similar threads

后退
顶部