ReportPdfHelper.pas 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. unit ReportPdfHelper;
  2. interface
  3. uses
  4. classes, PrintCom, PDF;
  5. type
  6. TReportPdfHelper = class
  7. private
  8. public
  9. procedure ExportPages(APrintCom: TPrintCom; const AFileName: string; ABeginPage, AEndPage: Integer);
  10. procedure ExportAllPages(APrintCom: TPrintCom; const AFileName: string);
  11. end;
  12. function PdfHelper: TReportPdfHelper;
  13. implementation
  14. uses
  15. Windows, SysUtils, Forms, Controls;
  16. var _ReportPdfHelper: TReportPdfHelper;
  17. function PdfHelper: TReportPdfHelper;
  18. begin
  19. if not Assigned(_ReportPdfHelper) then
  20. _ReportPdfHelper := TReportPdfHelper.Create;
  21. Result := _ReportPdfHelper;
  22. end;
  23. { TReportPdfHelper }
  24. procedure TReportPdfHelper.ExportAllPages(APrintCom: TPrintCom;
  25. const AFileName: string);
  26. begin
  27. ExportPages(APrintCom, AFileName, 1, APrintCom.TotalPages);
  28. end;
  29. procedure TReportPdfHelper.ExportPages(APrintCom: TPrintCom;
  30. const AFileName: string; ABeginPage, AEndPage: Integer);
  31. var
  32. sPdf: TPDFDocument;
  33. iPage, iImage, I: Integer;
  34. begin
  35. Screen.Cursor := crHourGlass;
  36. sPdf := TPDFDocument.Create(nil);
  37. try
  38. I := GetDeviceCaps(sPdf.UsedDC, LOGPIXELSX);
  39. sPdf.AutoLaunch := False;
  40. sPdf.DocumentInfo.CreationDate := Now;
  41. sPdf.FileName := AFileName;
  42. sPdf.PageLayout := plSinglePage;
  43. sPdf.BeginDoc;
  44. for iPage := 0 to AEndPage - ABeginPage do
  45. begin
  46. if sPdf.PageCount <= iPage then
  47. sPdf.NewPage
  48. else
  49. sPdf.SetCurrentPage(iPage);
  50. if sPdf.PageHeight <> APrintCom.PrintHeight then
  51. sPdf.CurrentPage.Height := MulDiv(APrintCom.PrintHeight, 72, I);
  52. if sPdf.PageWidth <> APrintCom.PrintWidth then
  53. sPdf.CurrentPage.Width := MulDiv(APrintCom.PrintWidth, 72, I);
  54. APrintCom.PrintPreviewCanvas(ABeginPage + iPage, 0, sPdf.Canvas, false);
  55. end;
  56. sPdf.EndDoc;
  57. finally
  58. sPdf.Free;
  59. Screen.Cursor := crDefault;
  60. end;
  61. end;
  62. initialization
  63. finalization
  64. _ReportPdfHelper.Free;
  65. end.