Question
“How can I shrink the font to force the report to produce a single page?”
Solution
This example contains a pre-processing step that generates the report pages to a dummy output device. If more than one page is produced, then the font size is adjusted. Following the pre-processing step, Report.Print is called to generate the report to preview.
Download: ForceFontToOnePageReport.zip
Sample Delphi code:
procedure TForm1.Button1Click(Sender: TObject); var lDevice: TppDevice; lbReduceFont: Boolean; begin if FPrinting then Exit; FPrinting := True; lDevice := TppDevice.Create(nil); lbReduceFont := True; while lbReduceFont do begin ppReport1.PrintToDevices; if (ppReport1.AbsolutePageCount > 1) then lbReduceFont := ReduceFont(ppReport1) else lbReduceFont := False; end; lDevice.Free; ppReport1.Print; FPrinting := False; end; function TForm1.ReduceFont(aReport: TppReport): Boolean; var liBand: Integer; liObject: Integer; lObject: TppComponent; begin Result := True; for liBand := 0 to aReport.BandCount-1 do begin for liObject := 0 to aReport.Bands[liBand].ObjectCount-1 do begin lObject := aReport.Bands[liBand].Objects[liObject]; if lObject.HasFont then begin lObject.Font.Size := lObject.Font.Size - 1; if (lObject.Font.Size <= 2) then Result := False; end; end; end; end;