ReportBuilder 打印国标码高度太高了。怎么调。在哪里调。 ReportBuilder 打印国标码高度太高了。怎么调。在哪里调。谢谢。 ReportBuilder或是谁有 ReportBuilder 手册什么的。也行。我网上找了好久都没找到。哪位知道的。提供个路径什么的也行。谢谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ReportBuilder 打印国标码高度太高了。怎么调。在哪里调。谢谢。 ReportBuilder或是谁有 ReportBuilder 手册什么的。也行。我网上找了好久都没找到。哪位知道的。提供个路径什么的也行。谢谢谢。 在DELPH 里搞的 ReportBuilder 控件。ReportBuilder 打印国标码高度太高了。怎么调。在哪里调。谢谢。 ReportBuilder或是谁有 ReportBuilder 手册什么的。也行。我网上找了好久都没找到。哪位知道的。提供个路径什么的也行。谢谢谢。 没有玩过这个玩意 .....我在网上看了下 你去这里http://wenku.baidu.com/view/84b0103231126edb6f1a10bd.html看看 看对你有帮助没有! 现在是高度 RBuilder 解决了。但是有个问题。就是打印的时候。每打一张会停两秒才打印下一张。这个怎么处理。谢谢 技术原理 通过在TppReport的BeforePrint事件中对TPrinterDevice的PageSetting属性和PageList属性进行赋值 为何要如此处理? 根据分析ReportBuilder,我们得到如下的调用顺序TppViewer -> TppProducer -> TppPrinterDevice -> TppPageRequest -> TppPublisher,其中 TppPageRequest 封装了打印页范围信息,而TppPrinterDevice 负责将指定的页发送到PrinterCanvas 实现步骤 1、在调用单元声明一个类私有变量,用于保存打印页范围 type ... private sPageRange: string; ... end; 2、在调用单元声明一个类私有过程,用于处理TppReport.BeforePrint事件 procedure TfrmMain.ppReportBeforePrint(Sender: TObject); begin if Sender is TppReport then if (Sender as TppReport).PrinterDevice <> nil then begin (Sender as TppReport).PrinterDevice.PageSetting := psPageList; ppTextToPageList(sPageRange, (Sender as TppReport).PrinterDevice.PageList, True); end; end; 3、在打印之前设置打印页范围,将TppReport.BeforePrint引导到自定义过程 sPageRange := '3-5 '; (ppViewer1.Report as TppReport).BeforePrint := ppReportBeforePrint; (ppViewer1.Report as TppReport).ShowPrintDialog := False; ppViewer1.Print; 注意事项 1,如果找不到TppReport类别,在接口引用单元添加ppReport单元 2,如果找不到psPageList类别,在接口引用单元添加ppTypes单元 3,如果找不到ppTextToPageList函数,在接口引用单元添加ppUtils单元 4,sPageRange可以定义三种类型的页范围 A:起止页: '3-10 '//连接线分隔 B:分隔页: '3,5,7 '//逗号分隔 C:单独页: '7 ' 对 于 每 一 个WINDOWS 应 用 程 序开 发 者 来 说, 打 印 功 能 的 实 现 都 是 极 为 棘 手 的, 因 为 要 涉及到 相 当 多 的 代 码 而 且 常 常 是 相 当 的 复 杂, 但 是 在DELPHI 中 实 现 文 本 和 图 象 的 打 印 功 能 却 是 非 常 容 易 的。 1、 文 本 的 打 印 功 能。DELPHI 中 文 本 的 打 印 功 能 就 如 同 在DOS 中 实 现 文 本 的 打 印 功 能 一样 容 易, 需 要 做 的 一 切 只 是 取 得 打 印 参 数, 打 开 打 印 机,然 后 发 送 文 本 的 每 一 行 内 容。 在DELPHI 中 提 供 了 一 个PRINTERS 程 序 单 元, 它 说 明 了 一 个TPRINTER 对 象, 封 装 了WINDOWS 打 印 工作 和 输 出 打 印 机 之 间 的 接 口, 并 提 供 常 用 的 属 性 和 方 法,其 中 画 布CANVAS 是 一 个 非 常 有 用 的 属 性, 它 代 表 了 当 前 打印 文 件 的 表 面, 是 以 图 形 方 式 来 工 作 的, 整 个 的 打 印 输 出工 作 仅 仅 是 将 你 打 印 的 内 容 输 出 到TPRINTER 的 属 性CANVAS 上,当 全 部 的 输 出 工 作 完 成 以 后, 打 印 对 象(TPRINTER) 把CANVAS 的 属 性 值 送 到 打 印 机 上 去。 下 面 举 例 来 说 明 如 何 通 过DELPHI 实 现 文 本 内 容 的 打 印。 在DELPHI 中 提 供 了PRINTDIALOG、PRINTERSETUPDIALOG 两 个 控 件 允 许 我 们 进 行 打 印 机 以 及 其 他 影 响 打 印 输 出 的选 择, 此 外 最 重 要 的 一 点 是 要 想 实 现 打 印 功 能 必 须 在 编译 程 序 以 前 将PRINTERS 加 入 到INTERFACE 或 者IMPLEMENTATION 的UESE 语 句 当 中, 因 为PRINTER 单 元 包 括ASSIGNPRN 和 其 他 控 制 打 印 机的 过 程。 首 先 在FORM 当 中 加 入MEMO、PRINTDIALOG、PRINTERSETUPDIALOG 和 两 个BUTTON 控 件, 两 个 BUTTON 的CAPTION 分 别 为“ 打 印 设 置” 和“ 打 印”。 然 后 编 写BUTTON 的 事 件 驱 动 程 序( 代 码 在 下 面),这 个 简 单 的 例 子 中 只 要 单 击“ 打 印” 按 钮 时 便 可 以 在 打 印机 上 输 出 文 件0S2.TXT, 打 印 事 件 的 清 单 如 下: implementation uses printers; {$R *.DFM} procedure TForm1.BitBtn1Click(Sender: TObject); begin printersetupdialog1.execute; //选择输出的打印机以及其他打印控制选项 end; procedure TForm1.BitBtn2Click(Sender: TObject); var lines:integer; prntext:system.text; //将PRNTEXT声名为一个在SYSTEM程序单元当中定义的文本文件 begin if printdialog1.execute then assignprn(prntext); //将PRNTEST分配给打印机 rewrite(prntext); //调用REWRITE函数,为输出打开已分配的文件 printer.canvas.font:=memo1.font; //把当前MEMO1的字体指定给打印对象的CANVAS的字体属性 for lines:=0 to memo1.lines.count-1 do writeln(prntext,memo1.lines[lines]); //把MEMO的内容写到打印机对象 system.close(prntext); //关闭打印文件 end; procedure TForm1.FormCreate(Sender: TObject); begin memo1.lines.loadfromfile( 'c:\dos\os2.txt '); //在FORM建立时读入C:\DOS\OS2.TXT文件 end; end. 2、 图 形 的 打 印 功 能, 简 单 的图 形 打 印 功 能 也 如 打 印 文 本 一 样 的 容 易, 只 是 告 诉 打 印机 对 象(TPRINTER) 开 始 打 印, 把 图 形 简 单 的 复 制 到 打 印 机上 去, 最 后 告 诉 打 印 机 结 束 打 印 工 作。 举 例 说 明: 将 上 面 的 例 子的MEMO 控 件 换 成IMAGE 控 件, 再 经 过 一 些 简 单 的 修 改, 图 形 打印 的 代 码 如 下: procedure TForm1.BitBtn1Click(Sender: TObject); begin if printdialog1.execute then begin printer.begindoc; printer.canvas.draw(0,0,image1.picture.graphic); printer.enddoc; end; end; 在 这 种 情 况 下, 使 用 的 是 打印 机 的 分 辨 率, 图 形 在 页 面 的 左 上 角 开 始 打 印 输 出, 打 出的 图 形 很 小, 在 很 多 的 情 况 下 不 能 符 合 要 求, 但 是 打 印 机画 布CANVAS 的STRETHDRAW 的 方 法, 可 以 让 我 们 对 图 形 进 行 灵 活的 处 理, 画 布(CANVAS) 的STRETCHDRAW 方 法 声 名 为: procedure StretchDraw(const Rect: TRect; Graphic: TGraphic); 其中的RECT参数代表图形输出区域的大小,TRECT的类型声名为: TRect = record case Integer of 0: (Left, Top, Right, Bottom: Integer); 1: (TopLeft, BottomRight: TPoint); end; 因 此 我 们 只 要 调 整RECT 的 大小 及 其 在 打 印 页 面 上 的 位 置, 进 而 达 到 自 己 满 意 的 效 果,下 面 的 代 码 是 不 断 的 放 大 图 形, 充 满 我 们 定 义 的 矩 形 区域, 并 将 其 定 位 在 打 印 机 画 布(CANVAS) 的 中 央 进 行 输 出。代 码 如 下: procedure TForm1.Button1Click(Sender: TObject); VAR strect:Trect; //定义打印输出矩形框的大小 temhi,temwd:integer; begin if printdialog1.execute then begin temhi:=image1.picture.height; temwd:=image1.picture.width; while (temhi printer.pageheight div 2)and //将图形放大到打印页面的1/2大小 (temwd printer.pagewidth div 2) do begin temhi:=temhi+temhi; temwd:=temwd+temwd; end; with strect do //定义图形在页面上的中心位置输出 begin left:=(printer.pagewidth -temwd) div 2; top:=(printer.pageheight-temhi) div 2; right:=left+temwd; bottom:=top+temhi; end; with printer do begin begindoc; canvas.stretchdraw(strect,image1.picture.graphic); //将放大的图形向打印机输出 enddoc; end; end; end; 如何解决插入Oracle数据中文为乱码问题? RvDataSetConnection1和RvProject1做随查询结果更新的报表 怎么也找不出错误原因,消息机制的问题. 如何用delphi将flash的swf文件转化成屏保? 怎样在ClientSocket发送数据时,在ProgressBar中显示进度? 送分:delphi中一个讨厌的问题,急 Delphi 的小问题 字符串问题! 让鼠标在所有控件上都为漏斗形? 在fastreport里面设计好一个报表,我要让他在预览的时候可以看见,但是打印的时候看不见怎么办? 介绍点资料来看看 求代码
谢谢。 ReportBuilder
或是谁有 ReportBuilder 手册什么的。也行。我网上找了好久都没找到。哪位知道的。提供个路径什么的也行。谢谢谢。
ReportBuilder 打印国标码高度太高了。怎么调。在哪里调。
谢谢。 ReportBuilder
或是谁有 ReportBuilder 手册什么的。也行。我网上找了好久都没找到。哪位知道的。提供个路径什么的也行。谢谢谢。
通过在TppReport的BeforePrint事件中对TPrinterDevice的PageSetting属性和PageList属性进行赋值
为何要如此处理?
根据分析ReportBuilder,我们得到如下的调用顺序TppViewer -> TppProducer -> TppPrinterDevice -> TppPageRequest -> TppPublisher,其中 TppPageRequest 封装了打印页范围信息,而TppPrinterDevice 负责将指定的页发送到PrinterCanvas 实现步骤
1、在调用单元声明一个类私有变量,用于保存打印页范围
type
...
private
sPageRange: string;
...
end;
2、在调用单元声明一个类私有过程,用于处理TppReport.BeforePrint事件
procedure TfrmMain.ppReportBeforePrint(Sender: TObject);
begin
if Sender is TppReport then
if (Sender as TppReport).PrinterDevice <> nil then
begin
(Sender as TppReport).PrinterDevice.PageSetting := psPageList;
ppTextToPageList(sPageRange, (Sender as TppReport).PrinterDevice.PageList, True);
end;
end;
3、在打印之前设置打印页范围,将TppReport.BeforePrint引导到自定义过程
sPageRange := '3-5 ';
(ppViewer1.Report as TppReport).BeforePrint := ppReportBeforePrint;
(ppViewer1.Report as TppReport).ShowPrintDialog := False;
ppViewer1.Print; 注意事项
1,如果找不到TppReport类别,在接口引用单元添加ppReport单元
2,如果找不到psPageList类别,在接口引用单元添加ppTypes单元
3,如果找不到ppTextToPageList函数,在接口引用单元添加ppUtils单元
4,sPageRange可以定义三种类型的页范围
A:起止页: '3-10 '//连接线分隔
B:分隔页: '3,5,7 '//逗号分隔
C:单独页: '7 '
容 易, 需 要 做 的 一 切 只 是 取 得 打 印 参 数, 打 开 打 印 机,然 后 发 送 文 本 的 每 一 行 内 容。 在DELPHI 中 提
供 了 一 个PRINTERS 程 序 单 元, 它 说 明 了 一 个TPRINTER 对 象, 封 装 了WINDOWS 打 印 工作 和 输 出 打 印
机 之 间 的 接 口, 并 提 供 常 用 的 属 性 和 方 法,其 中 画 布CANVAS 是 一 个 非 常 有 用 的 属 性, 它 代 表 了 当
前 打印 文 件 的 表 面, 是 以 图 形 方 式 来 工 作 的, 整 个 的 打 印 输 出工 作 仅 仅 是 将 你 打 印 的 内 容 输 出
到TPRINTER 的 属 性CANVAS 上,当 全 部 的 输 出 工 作 完 成 以 后, 打 印 对 象(TPRINTER) 把CANVAS 的 属 性
值 送 到 打 印 机 上 去。
下 面 举 例 来 说 明 如 何 通 过DELPHI 实 现 文 本 内 容 的 打 印。 在DELPHI 中 提 供
了PRINTDIALOG、PRINTERSETUPDIALOG 两 个 控 件 允 许 我 们 进 行 打 印 机 以 及 其 他 影 响 打 印 输 出 的选
择, 此 外 最 重 要 的 一 点 是 要 想 实 现 打 印 功 能 必 须 在 编译 程 序 以 前 将PRINTERS 加 入 到INTERFACE 或
者IMPLEMENTATION 的UESE 语 句 当 中, 因 为PRINTER 单 元 包 括ASSIGNPRN 和 其 他 控 制 打 印 机的 过 程。
首 先 在FORM 当 中 加 入MEMO、PRINTDIALOG、PRINTERSETUPDIALOG 和 两 个BUTTON 控 件, 两 个
BUTTON 的CAPTION 分 别 为“ 打 印 设 置” 和“ 打 印”。 然 后 编 写BUTTON 的 事 件 驱 动 程 序( 代 码 在 下
面),这 个 简 单 的 例 子 中 只 要 单 击“ 打 印” 按 钮 时 便 可 以 在 打 印机 上 输 出 文 件0S2.TXT, 打 印 事 件 的
清 单 如 下:
implementation
uses printers;
{$R *.DFM}
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
printersetupdialog1.execute; //选择输出的打印机以及其他打印控制选项
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
var
lines:integer;
prntext:system.text;
//将PRNTEXT声名为一个在SYSTEM程序单元当中定义的文本文件
begin
if printdialog1.execute then
assignprn(prntext); //将PRNTEST分配给打印机
rewrite(prntext); //调用REWRITE函数,为输出打开已分配的文件
printer.canvas.font:=memo1.font;
//把当前MEMO1的字体指定给打印对象的CANVAS的字体属性
for lines:=0 to memo1.lines.count-1 do
writeln(prntext,memo1.lines[lines]);
//把MEMO的内容写到打印机对象
system.close(prntext); //关闭打印文件
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
memo1.lines.loadfromfile( 'c:\dos\os2.txt ');
//在FORM建立时读入C:\DOS\OS2.TXT文件
end;
end.
2、 图 形 的 打 印 功 能, 简 单 的图 形 打 印 功 能 也 如 打 印 文 本 一 样 的 容 易, 只 是 告 诉 打 印机 对
象(TPRINTER) 开 始 打 印, 把 图 形 简 单 的 复 制 到 打 印 机上 去, 最 后 告 诉 打 印 机 结 束 打 印 工 作。
举 例 说 明: 将 上 面 的 例 子的MEMO 控 件 换 成IMAGE 控 件, 再 经 过 一 些 简 单 的 修 改, 图 形 打印 的
代 码 如 下:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if printdialog1.execute then begin
printer.begindoc;
printer.canvas.draw(0,0,image1.picture.graphic);
printer.enddoc;
end;
end;
在 这 种 情 况 下, 使 用 的 是 打印 机 的 分 辨 率, 图 形 在 页 面 的 左 上 角 开 始 打 印 输 出, 打 出的 图
形 很 小, 在 很 多 的 情 况 下 不 能 符 合 要 求, 但 是 打 印 机画 布CANVAS 的STRETHDRAW 的 方 法, 可 以 让 我
们 对 图 形 进 行 灵 活的 处 理, 画 布(CANVAS) 的STRETCHDRAW 方 法 声 名 为:
procedure StretchDraw(const Rect: TRect; Graphic: TGraphic);
其中的RECT参数代表图形输出区域的大小,TRECT的类型声名为:
TRect = record
case Integer of
0: (Left, Top, Right, Bottom: Integer);
1: (TopLeft, BottomRight: TPoint);
end;
因 此 我 们 只 要 调 整RECT 的 大小 及 其 在 打 印 页 面 上 的 位 置, 进 而 达 到 自 己 满 意 的 效 果,下 面
的 代 码 是 不 断 的 放 大 图 形, 充 满 我 们 定 义 的 矩 形 区域, 并 将 其 定 位 在 打 印 机 画 布(CANVAS) 的 中 央
进 行 输 出。代 码 如 下:
procedure TForm1.Button1Click(Sender: TObject);
VAR
strect:Trect; //定义打印输出矩形框的大小
temhi,temwd:integer;
begin
if printdialog1.execute then
begin
temhi:=image1.picture.height;
temwd:=image1.picture.width;
while (temhi printer.pageheight div 2)and
//将图形放大到打印页面的1/2大小
(temwd printer.pagewidth div 2) do
begin
temhi:=temhi+temhi;
temwd:=temwd+temwd;
end;
with strect do //定义图形在页面上的中心位置输出
begin
left:=(printer.pagewidth -temwd) div 2;
top:=(printer.pageheight-temhi) div 2;
right:=left+temwd;
bottom:=top+temhi;
end;
with printer do
begin
begindoc;
canvas.stretchdraw(strect,image1.picture.graphic);
//将放大的图形向打印机输出
enddoc;
end;
end;
end;