Google Maps Within Subreport Printing To PDF
We've recently upgraded to v19 and have begun to implement the new Google Maps Component.
We have a GMap component within a SubReport that prints for each stop on our manifest. Through RAP we configure the map to display a marker at the Stops address.
This works excellent when printing to Screen and Printer. Unfortunately it does not work when printing to PDF. Instead all of the maps take on the marker of the first Stop in the manifest.
Sample of our RAP code (we've tried this on Detail BeforePrint BeforeGenerate, and Map.OnPrint).
GMap1.Address := TRIM(PLLoadConfirmStops['Street']) + ', ' + TRIM(Variable2.Value); //Variable2 is a city/state/zip combo
GMapMarker1.Address := TRIM(PLLoadConfirmStops['Street']) + ', ' + TRIM(Variable2.Value);
Ideas?
We have a GMap component within a SubReport that prints for each stop on our manifest. Through RAP we configure the map to display a marker at the Stops address.
This works excellent when printing to Screen and Printer. Unfortunately it does not work when printing to PDF. Instead all of the maps take on the marker of the first Stop in the manifest.
Sample of our RAP code (we've tried this on Detail BeforePrint BeforeGenerate, and Map.OnPrint).
GMap1.Address := TRIM(PLLoadConfirmStops['Street']) + ', ' + TRIM(Variable2.Value); //Variable2 is a city/state/zip combo
GMapMarker1.Address := TRIM(PLLoadConfirmStops['Street']) + ', ' + TRIM(Variable2.Value);
Ideas?
Comments
The PDF device uses image optimization logic to reduce file size which is likely causing this issue since the maps are being changed on the fly. Try disabling the optimization by setting the PDFSettings.OptimizeImageExport property to False.
Nico Cizik
Digital Metaphors
http://www.digital-metaphors.com
I've tried creating a RAP Function that toggles the OptimizeImageExport. Something like this:
{ TmyTogglePDFOptimizeImageExport }
procedure TmyTogglePDFOptimizeImageExport.ExecuteFunction(
aParams: TraParamList);
var
lbToggle : Boolean;
lReport : TppReport;
begin
inherited;
GetParamValue(0, lReport);
GetParamValue(1, lbToggle);
lReport.PDFSettings.OptimizeImageExport := lbToggle;
end;
class function TmyTogglePDFOptimizeImageExport.GetSignature: String;
begin
result := 'procedure TogglePDFOptimizeImageExport(aReport : TppReport; aToggle : Boolean);';
end;
class function TmyTogglePDFOptimizeImageExport.HasParams: Boolean;
begin
Result := True;
end;
class function TmyTogglePDFOptimizeImageExport.IsFunction: Boolean;
begin
Result := False;
end;
We've tried implementing this on OnPrintDialogCreate, OnFileDeviceCreate, OnBeforePrint and others. And while the RAP function does fire and seems to set the property, it's still not behaving as we'd like.
Is there anything you can think of that would allow us to do this at Runtime / via RAP?
Thanks again
The events you are using may be firing too late to make changes to the Report.PDFSettings and still take effect. Try using an earlier event such as OnInitializeParameters and see if that helps.
Otherwise, before the report prints, you can try setting the PDFSettings of the file device itself rather than the report.
Nico Cizik
Digital Metaphors
http://www.digital-metaphors.com
Thank you Nico.