AGB  ·  Datenschutz  ·  Impressum  







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

PDF Listing mit SynPDF

Ein Thema von oldmann · begonnen am 11. Mai 2020 · letzter Beitrag vom 13. Mai 2020
Antwort Antwort
Seite 1 von 3  1 23      
oldmann

Registriert seit: 10. Okt 2008
Ort: Weyhe
138 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

PDF Listing mit SynPDF

  Alt 11. Mai 2020, 12:48
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
  Mit Zitat antworten Zitat
Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#2

AW: PDF Listing mit SynPDF

  Alt 11. Mai 2020, 13:53
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.
Der Weg ist das Ziel aber man sollte auf dem Weg niemals das Ziel aus den Augen verlieren.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#3

AW: PDF Listing mit SynPDF

  Alt 11. Mai 2020, 14:46
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
oldmann

Registriert seit: 10. Okt 2008
Ort: Weyhe
138 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: PDF Listing mit SynPDF

  Alt 11. Mai 2020, 15:22
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#5

AW: PDF Listing mit SynPDF

  Alt 11. Mai 2020, 15:24
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}
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#6

AW: PDF Listing mit SynPDF

  Alt 11. Mai 2020, 15:36
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.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
oldmann

Registriert seit: 10. Okt 2008
Ort: Weyhe
138 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: PDF Listing mit SynPDF

  Alt 11. Mai 2020, 15:43
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
  Mit Zitat antworten Zitat
oldmann

Registriert seit: 10. Okt 2008
Ort: Weyhe
138 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: PDF Listing mit SynPDF

  Alt 11. Mai 2020, 16:05
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
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
930 Beiträge
 
#9

AW: PDF Listing mit SynPDF

  Alt 11. Mai 2020, 16:42
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).


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.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#10

AW: PDF Listing mit SynPDF

  Alt 11. Mai 2020, 16:59
Zitat:
fBackgroundException := AcquireExceptionObject;
Der Teil ist aber auch falsch, so wie es die Fehlermeldung richtig nennt.
fBackgroundException := AcquireExceptionObject as Exception;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 15:52 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