![]() |
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 |
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; 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. |
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. |
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. |
AW: PDF Listing mit SynPDF
Zitat:
Delphi-Quellcode:
{$elseif defined(VER260)} 'Delphi XE5'
{$else} 'Delphi unbekannt' {$ifend} |
AW: PDF Listing mit SynPDF
|
AW: PDF Listing mit SynPDF
Danke der Fehler ist ist damit schon mal erledigt.
Es gibt aber 2 weitere:
Delphi-Quellcode:
Die Fehlermeldung in er roten Zeile lautet:
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; 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 |
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 |
AW: PDF Listing mit SynPDF
Zitat:
Zitat:
|
AW: PDF Listing mit SynPDF
Zitat:
Delphi-Quellcode:
fBackgroundException := AcquireExceptionObject as Exception;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz