自己摸索一下

  RMReport1.SaveReportOptions.AutoLoadSaveSetting := True;
RMReport1.SaveReportOptions.UseRegistry := False;
RMReport1.SaveReportOptions.IniFileName := 'S:\rm.ini';//和每个报表文件一一对应 //下面这行FileName 一定要加,而且在LoadFromFile 前面
//原因是,程序运行,首次执行LoadFromFile,其调用LoadFromStream, 在LoadFromStream的最后部分会调用  FSaveReportOptions.LoadReportSetting(Self, '', False);
这时FFileName的值是'Untitled'。
而LoadFromFile 中在调用LoadFromStream(lStream);后才会设置 文件名。FileName := aFileName;

所以,必须 在 LoadFromFile  前 先设置FileName值。

RMReport1.FileName := 'd:\mydoc\桌面\测试背景图片.rmf';

  RMReport1.LoadFromFile('d:\mydoc\桌面\测试背景图片.rmf');

    RMReport1.ShowReport;
或者
RMReport1.PrintReport; 这样无论是先预览 再点击工具栏的打印按钮 还是 直接打印 ,最后的打印对话框上,都会显示 过去调试的 打印偏移值。 要把 模版导出到 其他电脑,或者 相同电脑的其他文件夹 内容使用。
只要复制2个文件,*.rm 和 *.ini

男 lynu (lynu) ▲▲▲▲▲ -
盒子活跃会员
-- ::
楼: 这个我看过源码,PrepareReport会将PrintOffset归零的.
如果你不动手改rm源码,可以在
reportObj.PrepareReport;
//放在这里才有效
setoffset;
reportObj.PrintPreparedReport
procedure TRMReport.OnTimerPrepareReportEvent(Sender: TObject);
begin
FTimer.Enabled := False;
while FCurPreview = nil do
Application.ProcessMessages; PrepareReport;//这里,好像是线程准备报表
end;
procedure TRMReport.ShowReport;//
var
lSaveThreadFlag: Boolean;
// tmp: DWORD;
begin
if FBusy then Exit; if FTimer = nil then
begin
FTimer := TTimer.Create(nil);
with FTimer do
begin
Enabled := False;
Interval := ;
OnTimer := OnTimerPrepareReportEvent;//
end;
end;
  procedure _RestoreReport;
var
i: Integer;
lSaveErrorFlag: Boolean;
lSaveErrorMsg: string;
lStream: TMemoryStream;
lReport: TRMReport;
begin
lSaveErrorFlag := ErrorFlag;
lSaveErrorMsg := ErrorMsg;
try
if Self is TRMCompositeReport then
begin
for i := to TRMCompositeReport(Self).Reports.Count - do
begin
lStream := lReportList[i];
lStream.Position := ;
lReport := TRMReport(TRMCompositeReport(Self).Reports[i]);
if Assigned(lReport.FOnEndDoc) then
lReport.FOnEndDoc(lReport);
lReport.LoadFromStream(lStream);
end;
end
else
begin
lStream := lReportList[];
lStream.Position := ;
LoadFromStream(lStream);//这里 第二次调用
end;
finally
for i := to lReportList.Count - do
begin
TMemoryStream(lReportList[i]).Free;
end;
lReportList.Free;
lReportList := nil;
ErrorFlag := lSaveErrorFlag;
ErrorMsg := lSaveErrorMsg;
end;
end;
TRMReport.PrepareReport

。。。

  finally
// if ErrorFlag then
// EndPages.Clear; if (FCurPreview <> nil) then
begin
THackPreview(FCurPreview).EndPrepareReport(Self, FThreadPrepareReport);
end
else if FPreview <> nil then
begin
THackPreview(FPreview).EndPrepareReport(Self, False);
end; FreeProgressForm;
_RestoreReport;
procedure TRMReport.LoadFromStream(aStream: TStream);
var
lPos: Integer;
lStr: string;
begin
ConvertNulls := False;
RMCurReport := Self;
ErrorFlag := False;
ErrorMsg := '';
FDocMode := rmdmDesigning;
Clear;
if aStream.Size < then Exit; lStr := RMReadString(aStream);
if (lStr <> RM_ReportFlagStr + #) and (lStr <> RM_ReportFlagStr1 + #) then
begin
ErrorFlag := True;
ErrorMsg := 'Not ReportMachine Report File!';
Application.MessageBox(PChar(RMLoadStr(SNotRMFFile)), PChar(RMLoadStr(SError)),
mb_Ok + mb_IconError);
Pages.Clear;
Pages.AddReportPage;
Exit;
end; FReportVersion := RMReadWord(aStream);
if FReportVersion > RMCurrentVersion then
begin
Application.MessageBox(PChar(RMLoadStr(SRMFError)), PChar(RMLoadStr(SError)),
mb_Ok + mb_IconError);
Exit;
end; if FReportVersion > then
begin
RMReadWord(aStream); // HVersion
lPos := RMReadInt32(aStream);
end
else
lPos := ; ReportInfo.Title := RMReadString(aStream);
ReportInfo.Author := RMReadString(aStream);
ReportInfo.Company := RMReadString(aStream);
ReportInfo.CopyRight := RMReadString(aStream);
ReportInfo.Comment := RMReadString(aStream);
FColorPrint := RMReadBoolean(aStream);
FmmPrintOffsetTop := RMReadInt32(aStream);
FmmPrintOffsetLeft := RMReadInt32(aStream);
FmmPrintOffsetTop := ;//这里先读取后 又自己清0了
FmmPrintOffsetLeft := ;
FPageCompositeMode := TRMCompositeMode(RMReadByte(aStream));
PrintBackGroundPicture := RMReadBoolean(aStream);
DoublePass := RMReadBoolean(aStream);
PrinterName := RMReadString(aStream);
if FReportVersion >= then
RMReadWideMemo(aStream, FScript)
else
FScript.Text := RMReadAnsiMemo(aStream); if FReportVersion > then
begin
FReportFlags := RMReadWord(aStream);
if FReportVersion >= then
ConvertNulls := RMReadBoolean(aStream); aStream.Position := lPos;
end
else
begin
FReportFlags := ;
AutoSetPageLength := False;
end; try
Pages.LoadFromStream(FReportVersion, aStream);
except
on E: EClassNotFound do
Application.MessageBox(PChar('Opened report contains the following non-plugged components:' +
# + E.Message + 'Use appropriate component from RM component palette'), PChar(RMLoadStr(SError)),
mb_Ok + mb_IconError);
else
end; FSaveReportOptions.LoadReportSetting(Self, '', False);//读取报表文件外的设置
if FReportVersion < then
FPageCompositeMode := rmReportPerReport;
end;

RM报表的打印偏移的更多相关文章

  1. RM报表 实际打印的判断

    procedure TFormDZMD.RMReport1PrintReportEvent(Sender: TObject); begin // Log('RMReport1PrintReportEv ...

  2. 关于Web报表FineReport打印的开发应用案例

    报表打印是报表使用和开发过程中经常碰到的问题,这里汇总了关于Web报表开发打印功能的一些典型应用案例,以应用最广泛的FineReport为例. 案例一:java直接调用报表打印 当java后台定义定时 ...

  3. 吉特仓储管系统(开源WMS)--Web在线报表以及打印模板分享

    很早之前就想写这篇文章与大家分享一下自己在吉特仓储管理系统中开发打印和报表的功能,在GitHub(https://github.com/hechenqingyuan/gitwms)上公开下载的代码中很 ...

  4. php部分:网页中报表的打印,并用CSS样式控制打印的部分;

    网页中报表的打印,是通过调用window对象中的print()方法实现打印功能的: 调用浏览器本身的打印功能实现打印 <a href="#" onclick="wi ...

  5. ASP环境下轻松实现报表的打印 (转)

    作者:zcg2000 一.前言 ASP在电子商务上应用广泛,报表的处理又有一些麻烦.本文介绍了在ASP中利用 本人写的Report Server Page脚本解释器实现报表的显示.打印. 二.准备工作 ...

  6. .NET下Excel报表的打印

    说明:这是一个实验的小例子,在实际项目中使用时,一般Object[,] 对象的数据来源于数据库. 1. 实验环境 开发平台:Visual Studio 2010 测试模板:JBtest Excel:O ...

  7. Jmeter_打印当前时间戳&打印偏移时间戳

    Jmeter中提供了一种函数,可以打印时间戳,如下图 年: yyyy 月:MM 日:dd 时: HH 分: mm 秒:ss 关于时间戳的格式,可以自由组合定义,这里我写成这样 yyyy-MM-dd H ...

  8. 大数据量报表APPLET打印分页传输方案

     1 . 问题概述 当报表运算完成时,客户端经常需要调用润乾自带的runqianReport4Applet.jar来完成打印操作, 然而数据量比较大的时候,会导致无法加载完成,直至applet内存 ...

  9. 润乾V4报表批量打印

     背景说明 在应用中,经常遇到,批量打印的需求,批量打印,顾名思义,就是点击一次打印按钮,能打印多张报表. 下面,我们来介绍一下怎么样实现批量打印的 应用举例: Jsp代码 <% //rep ...

随机推荐

  1. Linux命令之nslookup

    http://www.computerhope.com/unix/unslooku.htm About nslookup The nslookup command is used to query i ...

  2. GO语言中间的derfer

    defer Go语言中有种不错的设计,即延迟(defer)语句,你可以在函数中添加多个defer语句.当函数执行到最后时,这些defer语句会按照逆序执行, 最后该函数返回.特别是当你在进行一些打开资 ...

  3. Java 如何得到 JVM 虚拟机的 System Properties

    Java 6 jps 命令得到进程号 jinfo -sysprops <PID> > sysprops.txt 打开 sysprops.txt 就可以查找 Language Time ...

  4. azure git 托管

    azure git上传部署步骤:(首次提交)cd 至本地代码路径git initgit add .git commit –m "initial commit"git remote ...

  5. Selenium处理时间控件

    Web网页的时间控件往往嵌入到一个iframe里,抓取页面元素时,总是失败? 不要慌,WebDriver已经有相应的处理方法了. driver.switchTo().frame(driver.find ...

  6. 【转】 Linux下的多线程编程

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/原文链接:http://www.cnblogs.com/gnuhpc/archive/2012/12/07/280 ...

  7. robotframework笔记23

    远程库接口 远程库接口提供了对在测试库 比机器人框架本身是在不同的机器上运行, 同时实现图书馆使用其他语言比 本机支持Python和Java. 为一个测试库用户远程 library看起来几乎一样的其他 ...

  8. spring来了-06-事务控制

    概述 编程式事务控制 自己手动控制事务,就叫做编程式事务控制. Jdbc代码: Conn.setAutoCommite(false);  // 设置手动控制事务 Hibernate代码: Sessio ...

  9. hive数据库的一些应用

    1.创建表格create table usr_info(mob string,reason string,tag string) row format delimited fields termina ...

  10. [HBuilder] 简介

    官网首页: http://www.dcloud.io/runtime.html 特点: 编码比其他工具快5倍 代码输入法:按下数字快速选择候选项 可编程代码块:一个代码块,少敲50个按键 内置emme ...