Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Wie ändere ch die PDF Infos bei sdPDF ? (https://www.delphipraxis.net/160050-wie-aendere-ch-die-pdf-infos-bei-sdpdf.html)

thomas2009 25. Apr 2011 19:46

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

mkinzler 25. Apr 2011 19:51

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Ist die Frage ernst gemeint?

Zacherl 25. Apr 2011 19:53

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')

thomas2009 25. Apr 2011 20:12

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Zitat:

Zitat von Zacherl (Beitrag 1096862)
Delphi-Quellcode:
SetDocumentInfo(4, 'Neuer Title')

Dann bekomme ich undeclared SetDocumentInfo
Ich habe gedacht, die Funktion ist externe Funktion in der Unit dspdf

mkinzler 25. Apr 2011 20:13

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Hast du auch die entsprechende Unit eingebunden?

thomas2009 25. Apr 2011 20:18

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Zitat:

Zitat von mkinzler (Beitrag 1096883)
Hast du auch die entsprechende Unit eingebunden?

Ja natürlich, sonst konnte ich nicht das Dokument als PDF speichern

mkinzler 25. Apr 2011 20:19

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.

thomas2009 25. Apr 2011 20:26

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

mkinzler 25. Apr 2011 20:29

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Aber in irgendeiner Unit muss der Wrapper-Code:
Delphi-Quellcode:
function SetDocumentInfo(what: Integer; Value: PChar): Integer; stdcall;
ja stehen, und diese muss eingebunden sein.

thomas2009 25. Apr 2011 20:39

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Wenn ich sie in Private zusätzlich einzubinden versuche:

Delphi-Quellcode:
Private
function SetDocumentInfo(what: Integer; Value: PChar): Integer; stdcall;
dann erscheint diese Fehlermeldung :
Code:
 Ungenügende Forward- oder External-Deklaration: 'TForm2.SetDocumentInfo'

mkinzler 25. Apr 2011 20:45

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!!!!

Sir Rufo 25. Apr 2011 21:21

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Also mit etwas Grundlagenwissen und diesem Link bekommt man das hin

thomas2009 25. Apr 2011 22:33

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1096900)
Also mit etwas Grundlagenwissen und diesem Link bekommt man das hin


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;

Luckie 25. Apr 2011 22:49

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Informiere dich mal über if-Bedingungen und Blöcke mit Begin und End.

Zacherl 25. Apr 2011 22:59

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:

thomas2009 25. Apr 2011 23:27

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Zitat:

Zitat von Zacherl (Beitrag 1096916)
Außerdem musst du die Funktion schon noch aus der DLL importieren bevor du sie aufrufst :roll:

Das stimmt
Delphi-Quellcode:
  H := LoadLibrary('dspdf.dll');
  if H > 0 then
  begin
    @BeginDocF := GetProcAddress(H, 'BeginDoc');
...
Ich weiß nicht wie ich diese externe Funktion richtig importiere

Sir Rufo 26. Apr 2011 00:07

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Zitat:

Zitat von thomas2009 (Beitrag 1096920)
Zitat:

Zitat von Zacherl (Beitrag 1096916)
Außerdem musst du die Funktion schon noch aus der DLL importieren bevor du sie aufrufst :roll:

Das stimmt
Delphi-Quellcode:
  H := LoadLibrary('dspdf.dll');
  if H > 0 then
  begin
    @BeginDocF := GetProcAddress(H, 'BeginDoc');
...
Ich weiß nicht wie ich diese externe Funktion richtig importiere

Augen auf ... Es ist nur noch ein Schritt entfernt ... Transferleistung einschalten.
(Warum steht da oben jetzt BeginDoc? Was muss man für SetDocumentInfo ändern?)

thomas2009 26. Apr 2011 00:22

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');

Zacherl 26. Apr 2011 00:55

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

thomas2009 26. Apr 2011 01:25

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;

Zacherl 26. Apr 2011 01:29

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Delphi-Quellcode:
BeginDocF('');
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:

Delphi-Quellcode:
BeginDocF: function(FileName: PChar): Integer; stdcall;

thomas2009 26. Apr 2011 01:35

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
drin soll normalerweise Filename aber welchen ?!

Zacherl 26. Apr 2011 01:38

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Zitat:

Zitat von thomas2009 (Beitrag 1096931)
drin soll normalerweise Filename aber welchen ?!

Gut erkannt Sherlock :thumb: Wie wärs mit dem Dateinamen vom PDF, das du ändern willst? Nur sone Idee. Vielleicht muss da aber auch der DLL Dateiname rein. Den musst du aber dann erst duch 0 teilen.

s.h.a.r.k 26. Apr 2011 01:39

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Zitat:

Zitat von Zacherl (Beitrag 1096932)
Zitat:

Zitat von thomas2009 (Beitrag 1096931)
drin soll normalerweise Filename aber welchen ?!

Gut erkannt Sherlock :thumb: Wie wärs mit dem Dateinamen vom PDF, das du ändern willst? Nur sone Idee. Vielleicht muss da aber auch der DLL Dateiname rein. Den musst du aber dann erst duch 0 teilen.

[OT] Oh wie geil ist das denn! Noch nie so viel Spass um die Uhrzeit gehabt :mrgreen: [/OT]

thomas2009 26. Apr 2011 01:42

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:
    BeginDocF('c:\1.pdf');
    SetPageF(2, 0, 0, 0);
...
Ich verstehe nicht wie so ?

s.h.a.r.k 26. Apr 2011 01:43

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.

Zacherl 26. Apr 2011 01:44

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Zitat:

Zitat von thomas2009 (Beitrag 1096935)
Ich ändere aber keine PDF sondern ich erstelle eine neue !

Das geht mit Delphi nicht.

thomas2009 26. Apr 2011 01:56

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

Zacherl 26. Apr 2011 02:00

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

thomas2009 26. Apr 2011 02:04

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 ?

Zacherl 26. Apr 2011 02:08

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:
http://delphistep.cis.si/dspdf.htm

thomas2009 26. Apr 2011 02:16

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;

Zacherl 26. Apr 2011 02:22

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Zitat:

Zitat von thomas2009 (Beitrag 1096942)
Ja, wir reden die ganze Zeit doch über das Demo

So .. ? Gut zu wissen ..

Zitat:

Zitat von thomas2009 (Beitrag 1096942)
was ist nun hier falsch ?

1) du rufst BeginDoc auf, ohne es importiert zu haben
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?

thomas2009 26. Apr 2011 02:37

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

Zacherl 26. Apr 2011 02:38

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Zitat:

Zitat von thomas2009 (Beitrag 1096944)
Kommentare nach // oder zwischen { } und so weiter tauchen nie in exe Datei. das haben wie schon lang hier im Forum diskutiert und mit hex Programme die exe Dateien nach Kommentare gesucht.

Echt jetzt? :mrgreen: (http://www.delphipraxis.net/159082-a...-loeschen.html)

Gute Nacht anyways ..

thomas2009 26. Apr 2011 12:23

AW: Wie ändere ch die PDF Infos bei sdPDF ?
 
Zitat:

Zitat von Zacherl (Beitrag 1096945)

Ja. Der Compiler ignoriert alle Kommentare und nicht mit der Anwendung kompiliert. Mindestens habe ich personlich mit einem Hex-Programm nach meinen Kommentaren in meine exe Datei gesucht und nichts gefunden.

Nun zurück zum Thema
Ich speicher die Datei als Komplette PDF-Datei so:
Delphi-Quellcode:
PrintPreview.SaveAsPDF('temp.pdf');
Du hast gesagt, so kann man die Datei danach nicht mehr ihre Infos ändern kann. OK

wie kann ich die Datei in Printpreview als PDF speichern, indem man später mit dem Code wie im Demo bearbeiten kann ?

Daniel 26. Apr 2011 12:47

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