AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fastreport: ExportPDF im TTask

Ein Thema von haentschman · begonnen am 2. Dez 2021 · letzter Beitrag vom 3. Dez 2021
Antwort Antwort
Benutzerbild von haentschman
haentschman

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

Fastreport: ExportPDF im TTask

  Alt 2. Dez 2021, 15:34
Hallöle...

Delphi-Quellcode:
function TPrintBase.ExportPDF(FilePath, FileName: string): Boolean;
begin
  Result := FReport.Export(FReportPDFExport); // in TPrintBase erstellt - Fehler: hier

  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;
der Aufruf sollte so sein:
Delphi-Quellcode:
TTask.Run(procedure
          begin
            ExportPDF(Print.PDF.FilePath, Print.PDF.FileName); // Archiv
          end);
Fehler:
Im Projekt XX.exe ist eine Exception der Klasse EClassNotFound mit der Meldung 'Klasse Picture nicht gefunden' aufgetreten.

:74f7a8b2 KERNELBASE.RaiseException + 0x62
System.Classes.ClassNotFound('Picture')
System.Classes.FindClass('Picture')
frxXMLSerializer.TfrxXMLSerializer.ReadComponentSt r($25192D50,'Picture',True)
frxPreviewPages.DoObjects($28781730,$25192D50)
frxPreviewPages.TfrxPreviewPages.GetPage(0)

im Report:
Code:
<TfrxPictureView Name="TitleImageFirstPage" AllowVectorExport="True" Left="0" Top="0" Width="699,21305" Height="170,07885" Hyperlink.Value="" Frame.Typ="0" HightQuality="False" Transparent="False" TransparentColor="16777215"/>
sonst kein 'Picture'


PS: Ohne den TTask wird normal das PDF exportiert.

Was habe ich übersehen?

Geändert von haentschman ( 2. Dez 2021 um 15:42 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.447 Beiträge
 
Delphi 12 Athens
 
#2

AW: Fastreport: ExportPDF im TTask

  Alt 2. Dez 2021, 15:47
Was habe ich übersehen?
  • FReport.Export (oder FReport an sich) ist vielleicht nicht thread-sicher?
  • FGhostscript.PDFShrink ist nicht thread-sicher?
  • Print.PDF.FilePath und/oder Print.PDF.FileName enthalten bei Ausführen der Task nicht mehr den erwarteten Wert?

Letzteres könnte man mit folgendem Code beheben:
Delphi-Quellcode:
function TPrintBase.MakeExportPDF(FilePath, FileName: string):TProc;
begin
  Resulr :=
    procedure
    begin
      ExportPDF(FilePath, FileName); // Archiv
    end)
end;

...

TTask.Run(MakeExportPDF(Print.PDF.FilePath, Print.PDF.FileName)); // FilePath und FileName sofort auflösen
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: Fastreport: ExportPDF im TTask

  Alt 2. Dez 2021, 16:02
Zitat:
FReport.Export (oder FReport an sich) ist vielleicht nicht thread-sicher?
...vermute ich. Weil der Export u.a. auch eine Dialog Form kennt.
Zitat:
FGhostscript.PDFShrink ist nicht thread-sicher?
FGhostscript.PDFShrink...das ist ja nur ein "Wrapper" für die GhostscriptDLL. Ghostscript nicht Thread sicher...kann ich mir nicht vorstellen.
Zitat:
Print.PDF.FilePath und/oder Print.PDF.FileName enthalten bei Ausführen der Task nicht mehr den erwarteten Wert?
...es sollten noch die Werte drin stehen...ich probiere.

Nachtrag:

MakeExportPDF: das PDF wird nicht exportiert...aber keine Fehlermeldung.

PS: Diese Optimierung auf Eis gelegt...das mit dem Copy reicht erst mal.

Danke

Geändert von haentschman ( 2. Dez 2021 um 16:30 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Fastreport: ExportPDF im TTask

  Alt 2. Dez 2021, 16:28
CoInitializeEx(nil,COINIT_MULTITHREADED); und CoUninitialize; innerhalb des Task/Threadkontextes aufrufen?

Delphi-Quellcode:
function TPrintBase.MakeExportPDF(FilePath, FileName: string):TProc;
begin
  Result :=
    procedure
    begin
      CoInitializeEx(nil,COINIT_MULTITHREADED);
      ExportPDF(FilePath, FileName); // Archiv
      CoUninitialize;
    end)
end;

...

TTask.Run(MakeExportPDF(Print.PDF.FilePath, Print.PDF.FileName)); // FilePath und FileName sofort auflösen
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Fastreport: ExportPDF im TTask

  Alt 2. Dez 2021, 16:35
Vielleicht hilfreich: https://www.danysoft.com/estaticos/f...on%20hilos.pdf
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: Fastreport: ExportPDF im TTask

  Alt 2. Dez 2021, 16:40
Danke...

Im Prinzip habe ich das auch so...bis auf das CoInitialize.
...heute nicht mehr.
  Mit Zitat antworten Zitat
Amanda

Registriert seit: 31. Mär 2019
20 Beiträge
 
#7

AW: Fastreport: ExportPDF im TTask

  Alt 2. Dez 2021, 22:05
[QUOTE=Uwe Raabe;1498564]
Was habe ich übersehen?

Fastreport Export ist Threadsicher möglich.

Beispiel:

frxReport := TfrxReport.Create(nil);
try

if not loadReport(fr3Lieferliste, frxReport) then begin
log(messageVarStr(reportNichtGeladenMsg, [fr3Lieferliste]), true);
exit;
end; // if

thr:= TThread.CurrentThread;
frxReport.EngineOptions.ReportThread := thr;
frxReport.EngineOptions.SilentMode := true;
frxReport.EngineOptions.NewSilentMode := simSilent;
frxReport.EngineOptions.EnableThreadSafe := true;
frxReport.EngineOptions.DestroyForms := false;
frxReport.PrintOptions.Printer := drucker;
frxReport.PrintOptions.ShowDialog := false;
frxReport.ReportOptions.Name := titelLieferliste+' '+fdAuftragAUFTRAGNR.DisplayText;
frxReport.PrepareReport();

if frxReport.Errors.Count<>0 then begin
log(fr3Lieferliste+' '+frxReport.Errors.Text, true);
exit;
end; // if

finally
frxReport.Free;
end; // try
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.447 Beiträge
 
Delphi 12 Athens
 
#8

AW: Fastreport: ExportPDF im TTask

  Alt 3. Dez 2021, 00:47
Fastreport Export ist Threadsicher möglich.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

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

AW: Fastreport: ExportPDF im TTask

  Alt 3. Dez 2021, 09:06
Moin...

Ich hätte was Vernünftiges lernen sollen...

Das hat gestern funktioniert:
Delphi-Quellcode:
TTask.Run(procedure
          var
            I: Integer;
            Success: Boolean;
          begin
            Success := True;

            for I := 0 to FFileList.Count - 1 do
            begin
              NewFile := CurrentNewFilePath + ExtractFileName(FFileList[I]);

              if TFile.GetSize(FFileList[I]) > 0 then // keine leeren Dateien kopieren
              begin
                if CopyFileEx(PChar(FFileList[I]),
                              PChar(NewFile),
                              nil, nil, nil, COPY_FILE_NO_BUFFERING) then
                begin
                  TThread.Synchronize(nil,
                                      procedure
                                      begin
                                        WriteSendToDB(FFileList[I], sdtFolder); // Transus
                                      end);
                  end
                  else
                  begin
                    ...
...heute mache ich das Delphi an und "Erzeuge": Fehler: siehe Bilder

Eingegrenzt (Test):
Delphi-Quellcode:
    TTask.Run(procedure
              var
                Success: Boolean;
              begin
                Success := True;
              end);

// TTask.Run(procedure
// var
// I: Integer;
Fehler: Fehler: siehe Bilder

Lasse ich TTask komplett weg...alles gut.
Miniaturansicht angehängter Grafiken
error1.png   error2.png  

Geändert von haentschman ( 3. Dez 2021 um 09:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.447 Beiträge
 
Delphi 12 Athens
 
#10

AW: Fastreport: ExportPDF im TTask

  Alt 3. Dez 2021, 10:59
Das sieht mir nach einer verkorksten FastReport Installation aus. Eventuell werden Units unterschiedlicher Versionen verwendet.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz