打印高手请进 (使用 Printer.NewPage 换页无效!!!) (200分)

  • 主题发起人 主题发起人 xuri
  • 开始时间 开始时间
X

xuri

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一个打印程序在 HP DJ1000C 型打印机上
使用 以下程序只能打印出一页,我的本意是要打印 10 页,也就是 Printer.NewPage 命令无效
with Printerdo
begin
begin
Doc;
for i := 1 to 10do
begin
Canvas.TextOut(100,100, 'Hello World');
if i < 10 then
NewPage;
EndDoc;
end;
我试着用 FastReport, ReportMachine, ExpressPrintSystem 2.1 打印效果都是一样,不能换页
各位高手,小生先在此谢过了!!!
 
with Printerdo
begin
begin
Doc;
for i := 1 to 10do
begin
Canvas.TextOut(100,100, 'Hello World');
if i < 10 then
NewPage;
EndDoc;
end;
这段程序有问题
应该是:
with Printerdo
begin
begin
Doc;
for i := 1 to 10do
begin
Canvas.TextOut(100,100, 'Hello World');
if i < 10 then
//可以不要
NewPage;
end;
//这样的话在每页的(100,100)的地方打印 Hello World,打印9页,实际上这一句if i<10then
//可以不要。
EndDoc;
end;
另外:“不能只能打印一页”是什么意思,你是希望之打印一页吗?
 
chuguozhen: 你可能理解错了, 我的程序就是要打印 10 页在大部分的打印机上没有问题
但是就我上面写的那种 HP DJ1000C 打印机会有问题,出现不能分页的情况!
 
换一种写法
with Printerdo
begin

for i := 1 to 10do
begin
begin
Doc;
Canvas.TextOut(100,100, 'Hello World');
// if i < 10 then
// NewPage;
EndDoc;
end;
end;

我发现你的好像少了一个end
 
yanghai0437: 这种方法并不是我想要的,会有很多的缺点,
如: 会产生多个打印任务,打印速度变慢 等等
这几天我试了很多方法,有一些进展了,发现了以下结论:
1. 在 Win2000/XP 上无此问题
2. 全部使用 Api 函数处理打印不会出现该问题, 如一下代码:
var
DocInfo: TDocInfo;
DC: HDC;
begin
//... Process Printer DC
DC := Printer.Handle;
FillChar(DocInfo, SizeOf(DocInfo), 0);
withdo
cInfodo
begin
cbSize := SizeOf(DocInfo);
lpszDocName := PChar('打印测试');
end;
StartDoc(DC,do
cInfo);
StartPage(DC);
TextOut(DC, 100,100, 'Page 1', 6);
EndPage(DC);
StartPage(DC);
TextOut(DC, 100,100, 'Page 2', 6);
EndPage(DC);
EndDoc(DC)
end;
3. 只要程序例使用了 Printer.Canvas 处理打印信息就会有问题,
打印的问题就出在 Delphi 的 Printers 的单元上, 难道 真的就没法 使用 TCanvas 了吗???
 
我想問以下
你想敢甚麼?
 
dragonlee007:
我的软件需要自己做了一个打印程序,现在程序完成了,
就是打印机的兼容性问题没有解决好!
Delphi 的相关打印控件又不能解决好我的问题,希望各位朋友帮帮忙,
不然就要用 Api 函数全部重写,那就很痛苦了。
 
后退
顶部