我在FastReports上遇到问题,它无法在包含韩文字符的页面上正确打印。它仅适用于打印机HP K5300喷气机,T使用rave进行测试并且没有任何问题。我认为这是快速报告的一个错误。我已经将所有报告从狂野转换为FastReports,并且没有计划搬回来。
我打算将生成的页面作为图像,而不将其保存到硬盘驱动器,然后生成新的预览。这次,生成的图像将被使用和打印。我知道这个解决方案并不好。现在可以等待他们的回应。
任何人都知道如何从生成的页面中获取图像?
答案 0 :(得分:1)
您可以使用TfrxBMPExport(frxExportImage unit)组件将报告另存为BMP。
例如,此代码将导出报告:
procedure ExportToBMP(AReport: TfrxReport; AFileName: String = '');
var
BMPExport: TfrxBMPExport;
begin
BMPExport := TfrxBMPExport.Create(nil);
try
BMPExport.ShowProgress := True;
if AFileName <> '' then
begin
BMPExport.ShowDialog := False;
BMPExport.FileName := AFileName;
BMPExport.SeparateFiles := True;
end;
AReport.PrepareReport(True);
AReport.Export(BMPExport);
finally
BMPExport.Free;
end;
end;
在这种情况下,Export组件为每个页面使用不同的文件名。如果传递'c:\ path \ report.bmp'作为文件名,导出组件将生成c:\ path \ report.1.bmp,c:\ path \ report.2.bmp等。
像往常一样,如果您愿意,可以在任何表单/数据模块上删除并手动配置组件。
答案 1 :(得分:1)
如果您只是想避免保存大量文件,可以创建一个新的导出类,以便在创建文件后立即打印该文件并立即将其删除。
您可以创建一个全新的导出类,从内存中打印位图(例如,使用TPrinter类并直接在打印机画布中绘制位图)...您将学习如何检查TfrxBMPExport类的源文件
以这个未经测试的代码为例,它将指导您如何创建一个新类来保存/打印/删除:
type
TBMPPrintExport = class(TfrxBMPExport)
private
FCurrentPage: Integer;
FFileSuffix: string;
protected
function Start: Boolean; override;
procedure StartPage(Page: TfrxReportPage; Index: Integer); override;
procedure Save; override;
end;
{ TBMPPrintExport }
procedure TBMPPrintExport.Save;
var
SavedFileName: string;
begin
inherited;
if SeparateFiles then
FFileSuffix := '.' + IntToStr(FCurrentPage)
else
FFileSuffix := '';
SavedFileName := ChangeFileExt(FileName, FFileSuffix + '.bmp');
//call your actual printing routine here. Be sure your the control returns here when the bitmap file is not needed anymore.
PrintBitmapFile(SavedFileName);
try
DeleteFile(SavedFileName);
except
//handle exceptions here if you want to continue if the file is not deleted
//or let the exception fly to stop the printing process.
//you may want to add the file to a queue for later deletion
end;
end;
function TBMPPrintExport.Start: Boolean;
begin
inherited;
FCurrentPage := 0;
end;
procedure TBMPPrintExport.StartPage(Page: TfrxReportPage; Index: Integer);
begin
inherited;
Inc(FCurrentPage);
end;
在生产代码中,您需要覆盖其他方法来初始化和完成打印机作业,清理等等。
代码基于TfrxCustomImageExport的FastReport v4.0实现,专门用于页面编号和文件命名。可能需要调整其他FastReport版本。