Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi PDF Listing mit SynPDF (https://www.delphipraxis.net/204253-pdf-listing-mit-synpdf.html)

oldmann 11. Mai 2020 12:48

PDF Listing mit SynPDF
 
Hallo Delphi Gemeinde,

ich bin am experimentieren ob ich eine kleine PDF-Routine für Delphi erstellen kann.
Es geht darum von Textpassagen und eventuell auch von Tabellen ein PDF zu erstellen.
Dazu habe ich ein kleines PDF Listing mit SynPDF von Youtube bei mir eingegeben.
Ich benutze Delphi Tokyo 10.2.2.
Beim Start kam aber eine Fehlermeldung.
Das Programm war mit Delphi 7 geschrieben.
Daher denke ich das es für meine Delphi-Version nicht geeignet ist.
Ich selbst habe keine Ahnung wie ich so etwas hinkriegen oder anpassen könnte.
Da ich auch kein Englisch kann, sind Beschreibungen in dieser Sprache nutzlos.
Vielleicht hat ja einer von Euch eine kleine Routine, die er mir fertig zur Verfügung stellen könnte.
Das man erst einmal was hat, dass läuft.
Ich würde mich freuen, wenn mir da jemand helfen könnte.

Oldmann

Moombas 11. Mai 2020 13:53

AW: PDF Listing mit SynPDF
 
Ich habe mir mit SYNPDF etwas gebastelt, das aus einer vorhandenen txt Datei eine PDF erzeugt.
Allerdings immer nur 1 Seite, da ich nicht mehr brauchte/wollte.

Delphi-Quellcode:
unit DoPDFU;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, ShellAPI, Jpeg, SynPDF;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  //TXT
   TXT : TStringlist;
   I  : integer;
  searchResult : TSearchRec;
  //PDF
  counter : integer;
  switch : string;
  pdffile: string;
  PDF   : TPDFDocumentGDI;
  Page  : TPDFPage;
  Image : TBitmap;
begin
//  ReportMemoryLeaksOnShutdown := True;
  TXT := TStringList.Create;
  try
    findfirst(ExtractFilePath(ParamStr(0)) + '*.txt', faAnyFile, searchResult);
    TXT.LoadFromFile(searchResult.Name);

    pdffile := 'Name.pdf';
    PDF    := TPDFDocumentGDI.Create();
    try
      PDF.Info.Author      := 'Autor';
      PDF.Info.CreationDate := now;
      PDF.Info.Subject     := 'Bla';
      Pdf.Info.Title       := 'Bla';
      //--
      Page := PDF.AddPage;
      Page.PageLandscape   := False;
      PDF.DefaultPaperSize := psA4;

      //--------Seite1-Start
      //--------Header-Start
      Pdf.VCLCanvas.Font.Color := cLHotLight;
      PDF.VCLCanvas.Font.Size := 10;
      PDF.VCLCanvas.TextOut(325, 25, 'Header');
      Pdf.VCLCanvas.Font.Color := clBlack;
      //--------Header-Ende
      PDF.VCLCanvas.Font.Size := 20;
      PDF.VCLCanvas.Font.Style := [fsBold, fsUnderline];
      PDF.VCLCanvas.TextOut(325, 65, 'Überschrift');
      PDF.VCLCanvas.Font.Size := 14;
      PDF.VCLCanvas.Font.Height:= PDF.VCLCanvas.Font.Height + 5;
      PDF.VCLCanvas.Font.Style := [];
      PDF.VCLCanvas.Font.Name := 'Courier New';
      TXT[1] := copy(TXT[1], 23, length(TXT[1]));
      for I := 1 to TXT.Count - 1 do
      begin
        if (TXT[I] <> '') and (I <> 2) then
        begin
          if I = 1 then
            PDF.VCLCanvas.Font.Color := clRed
          else
            PDF.VCLCanvas.Font.Color := clBlack;
          PDF.VCLCanvas.TextOut(75, 115 + (I * 14), TXT[I]);
        end;
      end;
      //--------Footer-Start
      Pdf.VCLCanvas.Font.Color := cLHotLight;
      PDF.VCLCanvas.Font.Size := 10;
      PDF.VCLCanvas.Font.Height:= PDF.VCLCanvas.Font.Height - 5;
      PDF.VCLCanvas.TextOut(225, 1085, 'Erstellt am: ' + datetimetostr(now));
      Pdf.VCLCanvas.Font.Color := clBlack;
      //--------Footer-Ende
      //--------Seite1-Ende
      //--------PDF-Ende
      PDF.SaveToFile(pdffile);
    finally
      PDF.Free;
      shellexecute(handle, 'open', PChar(pdffile),'','',SW_Normal);
    end;
  finally
    deletefile(searchResult.Name);
    TXT.Free;
    Application.Terminate;
  end;
end;

end.

himitsu 11. Mai 2020 14:46

AW: PDF Listing mit SynPDF
 
Wäre es nicht besser die DefaultPaperSize zu setzen, bevor man die neue Seite erstellt (AddPage), oder du wolltest etwas ändern, was sich z.B. irgendwie PaperSize nennt (ohne Default).


Es gibt auch PDF-Drucker, dann brauchst vom PDF im Programm nichts zu haben. Einfach über TPrinter oder sonstwie dort hin.

oldmann 11. Mai 2020 15:22

AW: PDF Listing mit SynPDF
 
Hallo Monbas,

danke für Dein Listing.
Es erzeugt die gleichen Fehlerneldungen wie das aus Youtube.
Hier mal ein Auszug einer Fehlermeldung:

function GetDelphiCompilerVersion: RawUTF8;
begin
result :=
{$ifdef FPC}
'Free Pascal'
{$ifdef VER2_4_0}+' 2.4.0'{$endif}
{$ifdef VER2_4_2}+' 2.4.2'{$endif}
{$ifdef VER2_4_3}+' 2.4.3'{$endif}
{$ifdef VER2_4_4}+' 2.4.4'{$endif}
{$ifdef VER2_5_0}+' 2.5.0'{$endif}
{$ifdef VER2_5_1}+' 2.5.1'{$endif}
{$ifdef VER2_6_0}+' 2.6.0'{$endif}
{$ifdef VER2_7_0}+' 2.7.0'{$endif}
{$ifdef VER2_7_1}+' 2.7.1'{$endif}
{$else}
{$ifdef VER90} 'Delphi 2'{$endif}
{$ifdef VER100} 'Delphi 3'{$endif}
{$ifdef VER120} 'Delphi 4'{$endif}
{$ifdef VER130} 'Delphi 5'
{$else}
{$if defined(VER140)}
{$ifdef LINUX}'Kylix 3'{$else}'Delphi 6'{$endif}
{$elseif defined(VER150)} 'Delphi 7'
{$elseif defined(VER160)} 'Delphi 8'
{$elseif defined(VER170)} 'Delphi 2005'
{$elseif defined(VER185)} 'Delphi 2007'
{$elseif defined(VER180)} 'Delphi 2006'
{$elseif defined(VER200)} 'Delphi 2009'
{$elseif defined(VER210)} 'Delphi 2010'
{$elseif defined(VER220)} 'Delphi XE'
{$elseif defined(VER230)} 'Delphi XE2'
{$elseif defined(VER240)} 'Delphi XE3'
{$elseif defined(VER250)} 'Delphi XE4'
{$elseif defined(VER260)} 'Delphi XE5'
{$ifend}
{$endif}
{$endif}
{$ifdef CPU64}
+' 64 bit'
{$endif}
end;

Die Fehlermeldung lautet:Ausdruck erwartet aber End gefunden.

himitsu 11. Mai 2020 15:24

AW: PDF Listing mit SynPDF
 
Zitat:

Delphi-Quellcode:
{$elseif defined(VER260)} 'Delphi XE5'
{$ifend}

die fehlenden Delphiversionen einfügen, oder einfach nur
Delphi-Quellcode:
{$elseif defined(VER260)} 'Delphi XE5'
{$else} 'Delphi unbekannt'
{$ifend}

Hobbycoder 11. Mai 2020 15:36

AW: PDF Listing mit SynPDF
 
In welcher Unit ist denn die Procedure GetDelphiCompilerVesion?

Ansonsten lad dir doch mal eine aktuelle Verion:
SynPDF: Hier
oder mORMot: Hier (ist SynPDF mit drin).

beides läuft unter 10.3 ohne Änderungen.

oldmann 11. Mai 2020 15:43

AW: PDF Listing mit SynPDF
 
Danke der Fehler ist ist damit schon mal erledigt.

Es gibt aber 2 weitere:

Delphi-Quellcode:
procedure TSynBackgroundThreadAbstract.Execute;
begin
  while not Terminated do
    case fProcessEvent.WaitFor(INFINITE) of
      wrSignaled:
        case GetPendingProcess of
        flagDestroying: begin
          fCallerEvent.SetEvent;
          break;
        end;
        flagStarted:
        try
          fBackgroundException := nil;
          try
            Process;
          except
            {$ifdef DELPHI5OROLDER}
            on E: Exception do
              fBackgroundException := Exception.CreateFmt('Redirected %s: "%s"',
                [PShortString(PPointer(PPtrInt(E)^+vmtClassName)^)^,E.Message]);
            {$else}
            [COLOR="Red"]fBackgroundException := AcquireExceptionObject;[/COLOR]
            {$endif}
          end;
        finally
          SetPendingProcess(flagFinished);
          fCallerEvent.SetEvent;
        end;
       end;
    end;
end;
Die Fehlermeldung in er roten Zeile lautet:
Inkompatiblr Typen: Exception und 'TObjekt'.

Eine weitere Fehlermeldung ist in meinem vorherigen Listing:

{$ifdef VER2_6_4}+' 2.6.4'{$endif}
{$ifdef VER2_7_0}+' 2.7.0'{$endif}
{$ifdef VER2_7_1}+' 2.7.1'{$endif}
{$else}
{$ifdef VER90} 'Delphi 2'{$endif}
{$ifdef VER100} 'Delphi 3'{$endif}

Bei {Selse} steht: Nicht abgeschlossene bedingte Direktive.

Gruss Oldmann

oldmann 11. Mai 2020 16:05

AW: PDF Listing mit SynPDF
 
Hallo Hobbycoder,

den folgenden Satz von Dir verstehe ich nicht:
In welcher Unit ist denn die Procedure GetDelphiCompilerVesion?
Was muss ich da wo nachschauen.

Ich habe mir die neue Version heruntergeladen.
Es kommen die gleichen 2 Fehler die ich zuletzt beschrieben habe.
Ich weiß allerdings nicht ob ich damit alles richtig gemacht habe.
Ich habe den Ordner mit den heruntergeladenen Dateien einfach in den Suchpfad bei Delphi eingeben.
Ist das richtig.

Gruss Oldmann

Hobbycoder 11. Mai 2020 16:42

AW: PDF Listing mit SynPDF
 
Zitat:

Zitat von oldmann (Beitrag 1464280)
Procedure GetDelphiCompilerVesion?

Naja, wenn dir das beim Compilieren in einen Fehler spring, dann landest du eigentlich in der Unit, in der der Fehler aufgetreten ist (der Reiter oben, der dann aktiv ist).


Zitat:

Zitat von oldmann (Beitrag 1464280)
Ich habe den Ordner mit den heruntergeladenen Dateien einfach in den Suchpfad bei Delphi eingeben.
Ist das richtig.

Sollte reichen. Ansonsten bekommst du auch eine passende Fehlermeldung "Unit nicht gefunden" oder so ähnlich. Wenn er dir schon in Code springt, sollte er es auch finden.

himitsu 11. Mai 2020 16:59

AW: PDF Listing mit SynPDF
 
Zitat:

Delphi-Quellcode:
fBackgroundException := AcquireExceptionObject;

Der Teil ist aber auch falsch, so wie es die Fehlermeldung richtig nennt.
Delphi-Quellcode:
fBackgroundException := AcquireExceptionObject as Exception;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 Uhr.
Seite 1 von 3  1 23      

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