Entwickler-Ecke
Sonstiges (Delphi) - Delphi -> PostScript -> PDF
mcbain - Do 17.03.11 12:38
Titel: Delphi -> PostScript -> PDF
Hallo,
ich würde gerne aus Delphi heraus ein PDF erstellen, ohne, dass der Anwender etwas davon bemerkt. Da sich das Dokument recht häufig ändern kann, dachte ich mir es ist das geschickteste ein Word-Dokument per OLE Fernseteuerung und Textmarken auszufüllen und anschließend unter einem anderen Namen abzuspeichern. Dies funktioniert bereits.
Allerdings habe ich noch Probleme mit der PDF-Erstellung. Ghostscript habe ich mir bereits installiert und kann auch über die CMD aus Postscript(.ps) eine PDF erstellen. Leider weiß ich aber noch nicht wie ich eine solche Postscript-Datei zuvor erzeuge. Ich weiß, dass man eine erzeugen kann über den Druckertreiber (in Datei drucken), aber dies muss ja der User zuvor auswählen und widerspricht sich mit meinem oben genannten Kriterium, dass der User von der PDF-Erstellung nichts mitbekommen soll.
Hat jemand einen Tip für mich? Oder geht das ganze einfacher?
Vielen Dank.
Moderiert von
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 17.03.2011 um 13:12
Reinhard Kern - Do 17.03.11 15:52
mcbain hat folgendes geschrieben : |
Hallo,
ich würde gerne aus Delphi heraus ein PDF erstellen, ohne, dass der Anwender etwas davon bemerkt. |
Hallo,
es gibt Bibliotheken zur direkten Erstellung von PDF, aber die sind i.d.R. nicht kostenlos.
Mal abgesehen davon: eine Software, die etwas tut, von dem ich nichts wissen soll, würde ich gegen Rückzahlung des Kaufpreises zurückgeben, notfalls per Gerichtsverfahren. My PC is my castle.
Gruss Reinhard
mcbain - Do 17.03.11 16:07
Der User bekommt am Ende schon mit, dass eine PDF erstellt wurde, nur soll der User nicht im Prozess eingreifen müssen, um dies zu bewerkselligen. Er soll nur auf einen Button drucken, dann wird ein Word-Dokument mit Textmarken im Hintergrund geöffnet, die Textmarken werden mit entsprechenden Inhalten versehen, das Word-Dokument anschließend abgespeichert unter einem anderen Namen und dann soll daraus per Ghostscript ein PDF erstellt werden. Ist dies alles erfolgreich gewesen, so erscheint ein Popup und sagt: "PDF erstellt".
Dies müsste ja auch gehen, ich weiß eben nur nicht, wie ich eine Postscript Datei aus dem Word-Dokument erzeugen kann, ohne, dass der User irgendwas beim Druckertreiber auswählen muss.
Eine Postscript Datei in ein PDF umwandeln kann ich bereits, dies geschieht über die cmd und ghostscript...
Ein kommerzielles Produkt möchte ich dafür eher nicht erwerben.
Es gibt hier schon so einen ähnlichen Beitrag
http://www.delphi-library.de/viewtopic.php?t=39372&highlight=pdf+ghostscript
, allerdings muss man dafür mit Canvas eine PostScript-Datei zeichnen und das will ich ja eben nicht, das ganze soll aus einem Word-Dokument erstellt werden.
Hat noch jemand einen Rat?
Delete - Do 17.03.11 16:36
- Nachträglich durch die Entwickler-Ecke gelöscht -
mcbain - Di 22.03.11 13:07
So, habe mein Problem gelöst.
Am Besten geht man so vor, man installiert sich Ghostscript und einen Drucker der PostScript Dateien schreiben kann. Dies Kann z.B. der PDFCreator oder FreePDF.
Dann erstellt man sich ein Word-Dokument, z.B. C:\test.doc.
Anschließend schreibt man sich noch folgenden Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33:
| procedure TForm2.btn1Click(Sender: TObject); var Doc, WordApp: OleVariant; begin try WordApp := CreateOleObject('Word.Application');
WordApp.Documents.Open('C:\test.doc'); Doc := WordApp.ActiveDocument;
if not VarIsEmpty(WordApp) then begin WordApp.DisplayAlerts := 0; WordApp.ActiveDocument.SaveAs('C:\test_neu.doc');
WordApp.ActiveDocument.PrintOut(Background:=False, Copies:=1, PrintToFile:=True, OutputFileName:='C:\test_neu.ps');
Sleep(1000); ShellAPI.ShellExecute(Handle,'open',PChar('C:\Programme\gs\gs9.01\bin\test.bat'),nil,nil,SW_NORMAL);
WordApp.Quit; WordApp := Unassigned; end;
except on E: Exception do ShowMessage(e.Message); end;
end; |
Jetzt wurde aus C:\test.doc ein C:\test_neu.doc und daraus wurde C:\test_neu.ps.
Da wir jetzt die benötigte Postscript-Datei haben, kann man einfach eine Batch-Datei aufrufen, um die *.ps mit Ghostscript umwandeln zu lassen.
Die Batch kann bspw. so aussehen:
Quelltext
1: 2: 3:
| cd C: cd C:\Programme\gs\gs9.01\bin gswin32c.exe -sDEVICE=pdfwrite -o c:/test_neu.pdf c:/test_neu.ps |
Der Pfad zur gswin32c.exe varriert natürlich von Benutzer zu Benutzer und Ghostscript Version.
Edit: Ich vergas zu erwähnen, dass natürlich PDFCreator oder FreePDF als StandardDrucker ausgewählt sein muss. Ansonsten muss man halt über den Code den Drucker zuvor auswählen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!