我对 Rave Reports 完全陌生,并且很难掌握它。
目标是拥有一个包含封面的 PDF,然后是任意数量的基本上相同的页面,但包含不同的图像。
我已经使用设计器设置了页面,并且可以将报告打印或保存为 PDF。
我无法弄清楚如何动态复制/添加将包含图像的页面。
该过程将是:
- 添加封面
- 迭代图像列表并从现有布局/模板添加图像页面
- 保存为 PDF
任何帮助或正确方向的观点将不胜感激。
谢谢
- - 更新 - -
我使用了以下代码,但无法弄清楚如何让它工作。报告每页应该有 4 张图片,所以如果有 9 张图片,则应该有 3 页。循环创建了正确数量的页面,但列表中的最后一个图像在每一页上重复。
有任何想法吗?
procedure TForm1.Button1Click(Sender: TObject);
var
ReportPages : array of TRavePage;
CoverPage : TRavePage;
MyProject : TRaveReport;
PageList : TRaveComponentList;
staffImage : TRaveBitmap;
numberOfPages : Integer;
numberOfImages : Integer;
imageNumber : Integer;
pageNumber : Integer;
imagesPerPage : Integer;
pageImageCounter : Integer;
isFirstImage : Boolean;
isLastImage : Boolean;
begin
buildImageList;
imageNumber := 0;
imagesPerPage := 4;
numberOfImages := imageList.count;
numberOfPages := ceil(numberOfImages / imagesPerPage);
RvSystem1.DoNativeOutput := false;
RvSystem1.RenderObject := RvRenderPDF1;
RvSystem1.OutputFileName := 'Project1.pdf';
RvProject1.Open;
RvProject1.SetParam('Name1', Name1Edit.Text);
RvProject1.SetParam('Name2', Name2Edit.Text);
MyProject := RvProject1.ProjMan.FindReport('staffImageProof', true) as TRaveReport;
CoverPage:= RvProject1.ProjMan.FindRaveComponent('coverPage', MyProject) as TRavePage;
PageList:= TRaveComponentList.Create;
PageList.Add(CoverPage);
pageNumber := 0;
pageImageCounter := 0;
setLength(ReportPages, numberOfPages);
for imageNumber := 0 to numberOfImages - 1 do
begin
inc(pageImageCounter);
if pageImageCounter = 1 then
begin
ReportPages[pageNumber] := RvProject1.ProjMan.FindRaveComponent('imagePage', MyProject) as TRavePage;
end;
staffImage := ReportPages[pageNumber].FindComponent('staffImage' + intToStr(pageImageCounter)) as TRaveBitmap;
staffImage.Image.LoadFromFile(imageList[imageNumber]);
if (pageImageCounter = imagesPerPage) or (imageNumber = (numberOfImages - 1)) then
begin
PageList.Add(ReportPages[pageNumber]);
pageImageCounter := 0;
inc(pageNumber);
end;
end;
MyProject.PageList := PageList;
RvProject1.SelectReport('staffImageProof', false);
RvProject1.StoreRAV := true;
RvProject1.Execute;
RvProject1.Close;
Finalize(ReportPages);
end;