Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Und ewig grüsst das PDF... (https://www.delphipraxis.net/198153-und-ewig-gruesst-das-pdf.html)

Delbor 8. Okt 2018 15:53

Und ewig grüsst das PDF...
 
Hi Zusammen
Nach etlichen Versuchen mit diversen Engines bin ich jetzt wieder bei der Fernsteuerung des PDFCreators gelandet - allerdings benuze ich jetzt - anders als hier die beim Import automatisch generierten Komponenten-Wrapper.

Aberr auch da steh ich schon wieder auf dem Schlauch...
Bislang habe ich in einem Frame folgendes:
Delphi-Quellcode:
type
  TPDFCreatorFrame = class(TFrame)
    PdfCreatorObj1: TPdfCreatorObj;
    OutputFiles1: TOutputFiles;
    Printers1: TPrinters;
    PrintJob1: TPrintJob;
    PrintJobInfo1: TPrintJobInfo;
    Queue1: TQueue;
  private
   { Private-Deklarationen }
   FInputFileName: String;
   FOutputFileName :String;
   FFileName : WideString;

   procedure ImageToPDF;

  public
    { Public-Deklarationen }
    Property InputFile: String read FInputFileName write FInputFileName;
    Property OutputFleName : String read FOutputFileName write FOutputFileName;
  end;
Soweit mal der Aufbau des Frames mit allen importierten Wrappern. In einer ersten Prozedur versuche ich nun ein PDF zu erzeugen - die Zeile, in der abgebrochen wird, ist markiert und mit der Fehlermeldung ergänzt:

Delphi-Quellcode:
procedure TPDFCreatorFrame.ImageToPDF;
begin
  Showmessage('Initializing PDFCreator queue...');
  Queue1.Initialize;
  Showmessage('Setting up target path to: ' + Self.FFileName);
  Showmessage('Printing one windows test page...');
  if not Self.Queue1.WaitForJob(10)then
    Showmessage('The print job did not reach the queue within ' + IntToStr(10) + ' seconds')
  else
    Showmessage('Currently there are ' + IntToStr(Queue1.Count) + ' job(s) in the queue');
  Showmessage('Getting job instance');
  PrintJob1 := Queue1.NextJob;       //<==[dcc32 Fehler] PDFCreatorFrameUnit.pas(70): E2010 Inkompatible Typen: 'TPrintJob' und 'IPrintJob'
  Self.PrintJob1.SetProfileByGuid('DefaultGuid');
  Showmessage('Converting under \"DefaultGuid\" conversion profile');
  Self.PrintJob1.ConvertTo(FFileName);
  if not Self.PrintJob1.IsSuccessful and not Self.PrintJob1.IsFinished then
    Showmessage('Could not convert the file: ' + FFileName)
  else
    Showmessage('Job finished successfully');
  Queue1.ReleaseCom;

end;
Die entsprechenden Zeilen in dem Beispielscript:
Delphi-Quellcode:
//   var job = PDFCreatorQueue.NextJob;
//
//   //Alternative: job.SetProfileByName("DefaultGuid");
//   //For converting to other formats than pdf set here the appropriate conversion profile
//   job.SetProfileByGuid("DefaultGuid");
Was mache ich falsch?

Gruss
Delbor

Hobbycoder 8. Okt 2018 16:26

AW: Und ewig grüsst das PDF...
 
Woher stammt der Type TPrintJob?

Möglicherweise gibt es noch irgendwo eine Typ TPrintJob.

Überprüf mal, ob ein Type TPrintJob noch über eine andere Unit definiert ist, welche du im Suchpfad hast. Gleiches Problem hatte ich erst vor einigen Tagen mit einer Twainkomponente.
Wenn der Compiler den Type zuerst findet, nimmt er den, und schon passt der Type nicht mehr.

hoika 8. Okt 2018 16:55

AW: Und ewig grüsst das PDF...
 
Hallo,
steht doch da Inkompatible Typen: 'TPrintJob' und 'IPrintJob
T<>I

Du musst bei Deiner Variable oben wohl auch IPrintJob statt TPrintJob nehmen.

Vielleicht hilft auch ein
UnitName.TPrintJob (jetzt wieder mit T)
wobei UnitName der Name der TLB (?) des PDFCreators ist.

Delbor 8. Okt 2018 17:39

AW: Und ewig grüsst das PDF...
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Hobbycoder

In diesem Thread hab ich in Beitrag 7 mal die fragliche TLB hochgeladen - da ist

Ich hab soeben entdeckt, dass zwischen der damals hochgeladenen Tlb und der heutigen ein Unterschied besteht. Da ich jetzt Komponenten-Wrapper verwende, sind in der Tlb Klassen für diese Wraapper deklariert. Da sich die Ubits unterscheiden, lade ich die aktuelle nochmal hoch.
Anhang 50076
Zitat:

Du musst bei Deiner Variable oben wohl auch IPrintJob statt TPrintJob nehmen.
Wär unter 'normalen Umständen' wohl mein erster Gedanke. (ZB bei sowas wie TStrings vs. String). Aber hier geht es (zumindest nach meinem bisherigen Verständnis) um eine Klasse, die eben genau diese Schnittstelle repräsentiert.

Ich habs auch schon mit
Delphi-Quellcode:
PrintJob1.DefaultInterface := Queue1.NextJob;
versucht. Defaultinterface ist zwar vom Typ IPrintJob, aber leider ReadOnly.

Gruss
Delbor


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:44 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