![]() |
Wie ändere ch die PDF Infos bei sdPDF ?
Hi
in der Hilfe steht, dass man die PDF infos ändern kann und zwar mit dieser externe Funktion :
Delphi-Quellcode:
function SetDocumentInfo(what: Integer; Value: PChar): Integer; stdcall;
... SetDocumentInfo what: 0=Producer 1=Author 2=Creator 3=Subject 4=Title |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Ist die Frage ernst gemeint?
|
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Ehm, eventuell indem du die Funktion mit entsprechenden Parametern aufrufst? :shock: :mrgreen:
Beispiel:
Delphi-Quellcode:
SetDocumentInfo(4, 'Neuer Title')
|
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Zitat:
Ich habe gedacht, die Funktion ist externe Funktion in der Unit dspdf |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Hast du auch die entsprechende Unit eingebunden?
|
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Zitat:
|
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Möglichweise befindet sich diese Funktion in einer anderen Unit, die Komponenet wird ja nicht nur aus einer Unit bestehen.
|
AW: Wie ändere ch die PDF Infos bei sdPDF ?
In unit preview.pas gibt es nicht
sicher in dspdf.dll Die Infos stehen in dspdf.txt:
Code:
exported functions:
function BeginDoc(FileName: PChar): Integer; stdcall; function EndDoc: Integer; stdcall; function NewPage: Integer; stdcall; function PrintPageF(FileName: PChar): Integer; stdcall; function PrintPageM(Data: Pointer; Size: Integer): Integer; stdcall; function SetPage(page_size, orientation, page_width, page_height: Integer): Integer; stdcall; function SetDocumentInfo(what: Integer; Value: PChar): Integer; stdcall; SetPage page_size: UserDefined=0 Letter=1 A4=2 A3=3 Legal=4 B5=5 C5=6 8x11=7 B4=8 A5=9 Folio=10 Executive=11 EnvB4=12 EnvB5=13 EnvC6=14 EnvDL=15 EnvMonarch=16 Env9=17 Env10=18 Env11=19 SetPage orientation: Portrait=0 Landscape=1 SetDocumentInfo what: 0=Producer 1=Author 2=Creator 3=Subject 4=Title |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Aber in irgendeiner Unit muss der Wrapper-Code:
Delphi-Quellcode:
ja stehen, und diese muss eingebunden sein.
function SetDocumentInfo(what: Integer; Value: PChar): Integer; stdcall;
|
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Wenn ich sie in Private zusätzlich einzubinden versuche:
Delphi-Quellcode:
dann erscheint diese Fehlermeldung :
Private
function SetDocumentInfo(what: Integer; Value: PChar): Integer; stdcall;
Code:
Ungenügende Forward- oder External-Deklaration: 'TForm2.SetDocumentInfo'
|
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Das ist auch eine Funktion und keine Methode.
Es wird glaube mal Zeit, dass du die Grundlagen lernst und dich nicht auf die Gutrmütigkeit anderer verlässt!!!! |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Also mit etwas Grundlagenwissen und diesem
![]() |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Zitat:
Ich habe genauso wie im Link steht, aber die Anwendung schliesst sicht, wenn ich folgendes tue !
Delphi-Quellcode:
var
SetDocumentInfoF: function(what: Integer; Value: PChar): Integer; stdcall; begin if SavePDFDialog.Execute then SetDocumentInfoF(0,'Blabla1'); SetDocumentInfoF(4,'Blabla2'); PrintPreview.SaveAsPDF(SavePDFDialog.FileName); end; |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Informiere dich mal über if-Bedingungen und Blöcke mit Begin und End.
|
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Außerdem musst du die Funktion schon noch aus der DLL importieren bevor du sie aufrufst :roll:
|
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Zitat:
Delphi-Quellcode:
Ich weiß nicht wie ich diese externe Funktion richtig importiere
H := LoadLibrary('dspdf.dll');
if H > 0 then begin @BeginDocF := GetProcAddress(H, 'BeginDoc'); ... |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Zitat:
(Warum steht da oben jetzt BeginDoc? Was muss man für SetDocumentInfo ändern?) |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
importieren ist nun klar
aber wie ändere ich die Werte nachdem importieren ?
Delphi-Quellcode:
H := LoadLibrary('dspdf.dll');
if H > 0 then begin @SetDocumentInfoF := GetProcAddress(H, 'SetDocumentInfoF');// funk. importieren SetDocumentInfoF(4,'Blabla'); |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Nah dran, verdammt nah dran :D Vor dem SetDocumentInfo() noch ein BeginDoc() und danach ein EndDoc() Aufruf, dann sollte es das gewesen sein :P
|
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Ging auch nicht
Delphi-Quellcode:
var
H: THandle; BeginDocF: function(FileName: PChar): Integer; stdcall; EndDocF: function: Integer; stdcall; SetDocumentInfoF: function(what: Integer; Value: PChar): Integer; stdcall; begin H := LoadLibrary('dspdf.dll'); if H > 0 then begin @SetDocumentInfoF := GetProcAddress(H, 'SetDocumentInfoF'); BeginDocF(''); SetDocumentInfoF(4,'Blabla'); EndDocF(); if SavePDFDialog.Execute then begin PrintPreview.SaveAsPDF(SavePDFDialog.FileName); end; end; FreeLibrary(H); end; |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Delphi-Quellcode:
Sorry dazu sage ich jetzt nichts mehr :roll: Schau nochmal GANZ GENAU hin, was da wohl falsch sein könnte. Zum Vergleich nochmal der Funktionsrumpf mit PARAMETERN:
BeginDocF('');
Delphi-Quellcode:
BeginDocF: function(FileName: PChar): Integer; stdcall;
|
AW: Wie ändere ch die PDF Infos bei sdPDF ?
drin soll normalerweise Filename aber welchen ?!
|
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Zitat:
|
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Zitat:
|
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Ich ändere aber keine PDF Datei sondern ich erstelle eine neue !
Darum habe ich nicht wie in Hilfe gemacht
Delphi-Quellcode:
Ich verstehe nicht wie so ?
BeginDocF('c:\1.pdf');
SetPageF(2, 0, 0, 0); ... |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Ganz ehrlich: Wenn du keine Ahnung hast, was du da tust, dann lass es einfach. Du siehst doch den Wald vor lauter Bäumen nicht. :evil:
Dir ist schon klar, dass du die PDF lädst und dann an anderer Stelle speichern kannst? Ein ganz kleiner Wink mit einem ganzen Baum: FilenameSource, FilenameTarget. |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Zitat:
|
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Ich lade keine PDF sondern eine externe Funktion von dsPDF.dll und dann bearbeiten
damit dsPDF.dll eine Datei mit meiner Infos erstellt |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Nur so als kleiner Denkanstoß. Versuch mal folgenden temporären Ablauf in deinem Programm einzuhalten:
1) PDF mit dsPDF.dll erstellen UND speichern 2) BeginDoc aufrufen UND den Speicherort als FileName übergeben 3) Mit SetDocumentInfo die gewünschten Infos ändern 4) EndDoc aufrufen |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Dann ist das eine ganz andere methode !
warum importiere ich dann die externe Funktion von dsPDF mit @SetDocumentInfoF ? |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Ich komm mir hier langsam echt verarscht vor du Luftpump. Nochmal zum mitschreiben:
1) PDF mit dsPDF.dll erstellen UND speichern 2) BeginDoc, SetDocumentInfo und EndDoc importieren (bei dir heißen sie dann BeginDocF, EndDocF, etc.) 3) BeginDoc aufrufen UND den Speicherort als der PDF Datei FileName übergeben (zur Erinnerung bei dir heißt es BeginDocF) 4) Mit SetDocumentInfo die gewünschten Infos ändern (heißt bei dir SetDocumentInfoF) 5) EndDoc aufrufen (heißt bei dir EndDocF) Hier gibts sogar ne Demo: ![]() |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Ja, wir reden die ganze Zeit doch über das Demo
was ist nun hier falsch ?
Delphi-Quellcode:
var
H: THandle; BeginDocF: function(FileName: PChar): Integer; stdcall; EndDocF: function: Integer; stdcall; SetDocumentInfoF: function(what: Integer; Value: PChar): Integer; stdcall; begin PrintPreview.SaveAsPDF('temp.pdf');// ;) if SavePDFDialog.Execute then begin H := LoadLibrary('dspdf.dll'); if H > 0 then begin @SetDocumentInfoF := GetProcAddress(H, 'SetDocumentInfoF'); BeginDocF('temp.pdf'); SetDocumentInfoF(4,'Blabla'); EndDocF(); PrintPreview.SaveAsPDF(SavePDFDialog.FileName); end; FreeLibrary(H); end; end; |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Zitat:
Zitat:
2) du rufst BeginDoc mit leerem Dateinamen auf 3) du rufst EndDoc auf, ohne es importiert zu haben 4) du importierst SetDocumentInfo unter dem Namen 'SetDocumentInfoF' 5) .. soll ich weitermachen oder gehst du erstmal Grundlagen lernen? Ganz nebenbei versuchst du wie ich das sehe das PDF einerseits mit PrintPreview.SaveAsPDF zu speichern und anderseits irgendwie im Code verwurschtelt mit der dsPDF.dll eine weitere PDF Datei zu erzeugen. Du weißst schon, dass die SaveAsPDF Methode eine komplette PDF Datei speichert? Nach Betrachten der dsPDF.dll Demo kam ich zu dem Schluss, dass man mit dieser DLL keine PDF Metainfos bearbeiten kann. Diese DLL ist dafür gemacht eine komplette PDF Datei mit Infos anhand von Metafile Grafiken zu speichern. Das heißt jede Seite musst du in einem TMetaFile Image haben und der PDF Datei hinzufügen. Edit: Ahso ich habe bemerkt, dass du einen Smilie Kommentar im Quelltext hast. Stört dich das nicht, wenn der später in der EXE auftaucht? |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Kommentare nach // oder zwischen { } und so weiter tauchen nie in exe Datei. das haben wie schon lang hier im Forum diskutiert und mit hex Programmen die exe Dateien nach Kommentare gesucht getestet.
Nun bin Müde. Gute Nacht |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Zitat:
![]() Gute Nacht anyways .. |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Zitat:
Nun zurück zum Thema Ich speicher die Datei als Komplette PDF-Datei so:
Delphi-Quellcode:
Du hast gesagt, so kann man die Datei danach nicht mehr ihre Infos ändern kann. OK
PrintPreview.SaveAsPDF('temp.pdf');
wie kann ich die Datei in Printpreview als PDF speichern, indem man später mit dem Code wie im Demo bearbeiten kann ? |
AW: Wie ändere ch die PDF Infos bei sdPDF ?
Das hat so alles keinen Wert.
Du wirst Dich bitte mit der Komponente und ihrer Dokumentation auseinandersetzen. Wenn Du dies nicht möchtest, ist das Deine Entscheidung, aber in diesem Fall bliebe Dir dann auch dieses Forum als Unterstützung verwehrt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:48 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-2025 by Thomas Breitkreuz