Einzelnen Beitrag anzeigen

Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.300 Beiträge
 
Delphi 12 Athens
 
#1

Fastreport: Optimierung

  Alt 30. Nov 2021, 14:01
Hallöle...

Durch eine Anforderung des Kunden habe ich statt 1x Drucken jetzt 2x Drucken pro Rechnung. 1x Original + 1x mit "Kopie" im Text.

Das Ganze kostet mich doppelte Zeit, weil der Report nun 2x Prepared + Export nach PDF + Verkleinern ist. Bei einer RE ist das noch verschmerzbar. Aber der Stapeldruck mit ~1000 Rechnungen braucht fast eine Stunde.

Aktuell Test: 800 Rechnungen(Ordner) mit 2.9GB Anhängen -> ca. 1 Stunde
Delphi-Quellcode:
function ExportPDF(FilePath, FileName: string): Boolean;
begin
  Result := dmReport.frxReport1.Export(dmReport.frxPDFExport1);

  if Result then
  begin
    try
      if not FGhostscript.PDFShrink(FilePath + FileName) then // Fehler über Event
      begin
        Result := False;
      end;
    except
      Result := False;
    end;
  end;
end;
...
if AllowPrint and dmReport.frxReport.PrepareReport(True) then
begin
  FillReportPDF; // Vorgaben PDF
  ExportPDF(Print.PDF.FilePath, Print.PDF.FileName); // Archiv

  Print.IsReceiptCopy := True; // + "Kopie" -> das 2. Mal :-(
  dmReport.FillReportVariable('IsReceiptCopy', Print.IsReceiptCopy); // im Report wird das Feld eingeblendet/ausgeblendet
  if dmReport.frxReport.PrepareReport(True) then
  begin
    FillReportTransus; // Vorgaben Dienstleister
    if ExportPDF(Print.Transus.FilePath, Print.Transus.FileName) then // Transus
    begin
      if Transus.ExportXML(Print.Receipt, Print.Transus.FilePath) then // schreiben XML
      begin
        if Print.Transus.WithAttachments then
        begin
          if CopyAttachments(Print.Transus.FilePath) then // Kopie der Anhänge PDF 2-5 Anhänge 120KB je PDF Seite, Schnitt = 3 Seiten je Anhang
          begin
            WriteMiscToDB(Print.ID); // DB Einträge setzen
            WriteSendToDB(dmReport.frxReport1.ReportOptions.Name, sdtFolder); // DB Einträge setzen
          end;
        end;
      end;

      if Assigned(FOnPrintConfirmation) then
      begin
        FOnPrintConfirmation(Self, ReportType, Print, FFileList); // nur wenn benötigt, in diesem Falle nicht eingehängt
      end;
    end;
  end;
end;
Frage:
1. Wo kann ich noch was rausholen?
2. Alternative?

Geändert von haentschman (30. Nov 2021 um 14:12 Uhr)
  Mit Zitat antworten Zitat