PDF-Dokumente aus Delphi drucken
Hallo,
ich habe folgendes Problem. Ich möchte aus einem Delphi-Programm heraus ein oder mehrere PDF-Dokumente drucken und dabei den Drucker jeweils frei bestimmen können. Sollte es noch eine Funktion geben die mir die Anzahl der gedruckten Seiten ermittelt wäre das natürlich perfekt. Vielen Dank im Voraus Grim Fandango :coder: |
Re: PDF-Dokumente aus Delphi drucken
Moin Grim Fandango,
erst einmal herzlich willkommen hier in der Delphi-PRAXiS. Vielleicht hilft es Dir schon mal weiter das Acrobat Reader ActiveX Control zu importieren (Komponente\ActiveX importieren). Ausserdem wirst Du wohl den TPrinterDialog benötigen um den Drucker auswählen zu können, falls Du so etwas nicht "zu Fuss" machen willst. |
Re: PDF-Dokumente aus Delphi drucken
Hallo !!!
Also der ActiveX Acrobat Reader wird Dir nicht viel helfen, weil Du mit diesem nur Anzeigen kannst. Wenn Du also in PDF ausdrucken willst, mußt Du schon einen PDF-Druckertreiber haben (Adobe Acrobat -> nicht den Reader) oder ähnliche Produkte. Außerdem gibt es einige Delphi-Componenten (z.B. PowerPDF) mit dehnen Du dann direkte Ausdrucke als PDF machen kannst. Hoffe ich habe Dir geholfen... |
Re: PDF-Dokumente aus Delphi drucken
Kuck dir mal GhostScript an. Am besten google mal danach
|
Re: PDF-Dokumente aus Delphi drucken
Hallöchen,
irgendwie ist bei meiner Problemerklärung was nicht richtig rübergekommen. Also, ich programmiere gerade an einem Programm zur Lieferschein erstellung. Das Programm durschsucht die Festplatte nach bestimmten Dokumenten (.doc und zukünftig leider auch nach .pdf) und drucke sie auf einem bestimmten Drucker aus. Ich möchte also fertige PDF-Dokumente ausdrucken und deren Seitenanzahl ermitteln. Es wäre optimal wenn ich noch eine Möglichkeit finden könnte in dem PDF-Dokument nach bestimmten Wörtern und deren Häufigeit zu suchen. Der Ansatz mit dem ActiveX war schon gar nicht so übel, da ich damit schon mal drucken kann, aber Seitenzahl ermitteln uns Suchen nach Wörtern geht damit glaube ich nicht. Weiterhin vielen Dank im Voraus für jeden erdenklichen Tip Grim Fandango :coder: |
Re: PDF-Dokumente aus Delphi drucken
hi
installiere Acrobat reader 6.0 imporitere das active X ( wo oben beschrieben ) und du kannst ansehen und ausdrucken. Alles ausprobiert. gruss ketraun |
Re: PDF-Dokumente aus Delphi drucken
hi
ich nehm alles zurück. Da treten mysteriöse Fehler auf. Vergiss meinen Beitrag einfach. ketraun |
Re: PDF-Dokumente aus Delphi drucken
Hallo Leute,
ich fand die bisherigen Beiträge hierzu sehr interessant, da ich aus einem Delphi Programm ebenfalls PDF-Dateien drucken möchte, die sich bereits als feritge PDF's auf der Festplatte befinden. Allerdings habe ich das mit dem Importieren der ActiceX nicht verstanden: Zitat:
Zitat:
Wie gehe ich dann mit diesem ActiveX um ? Ist es eine herkömmliche Delphi Komponente, deren Procedures und Properties ich nutzen kann ? Oder kann ich mit dem ActiveX einen installierten Reader starten ? Stellt das ActiveX dann auch fest, ob der Anwender einen Reader bereits installiert hat oder braucht er das gar nicht ? Wäre super, wenn ihr mir auf die Sprünge helfen könntet. Danke und Grüsse hacki |
Re: PDF-Dokumente aus Delphi drucken
Ich habe es jetzt nciht importiert, also kann ich dir nicht beschreiben wie es genau funktioniert, aber:
Zur Installation der Komponente: Du musst ganz normal den Acrobat-REader installiert haben (auch auf dem Rechner auf dem später ein mal dein Programm laufen soll...) Dann gehst du bei Delphi auf Komponente -> ActiveX importieren und suchst dir die Acrobat Reader Komponente raus. Bei mir heißt es glaube ich "Acrobat Control for ActiveX", wenn es das ist, aber ihc gehe stark davon aus :mrgreen: DAnn noch ebend auf installieren klicken und tada... ;-) Sie müsste installiert sein... |
Re: PDF-Dokumente aus Delphi drucken
Hallo Alexander,
ich habe es nun ausprobieren können. Es geht wohl so, wie du sagtest. Komponente -> ActiveX importieren dann die Acrobat Reader Komponente auswählen:"Acrobat Control for ActiveX" ! Allerdings muß man anschließend noch eine OCX-Datei auswählen. Ich habe sie unter dem Installetionsverzeichnis des Readers im Verzeichnis ActiveX gefunden (D:\Programme\Adobe\Acrobat 5.0\Reader\ActiveX) "pdf.ocx" ! Dann kann man die entsprechende Komponente installieren und verwenden. Allerdings habe ich noch Probleme eine PDF-Datei aus dem Programm zu öffnen (function LoadFile). Tut sich nix - bleibe weiter dran Danke und Grüsse hacki |
Re: PDF-Dokumente aus Delphi drucken
Gibt es vielleicht sowas wie Update oder so?
|
Re: PDF-Dokumente aus Delphi drucken
Hallo Leute,
wichtig: das activex-controll funktioniert nur mit Adobe Acrobat 4.0 zusammen wirklich gut. dann ist das laden, drucken etc. kein problem. Laden geht dann so: if OpenDialog1.Execute then begin PDF1.src:=OpenDialog1.FileName; PDF1.LoadFile(OpenDialog1.FileName); fredi |
Re: PDF-Dokumente aus Delphi drucken
Von der WPCubed GmbH ("wPDF, "WPTools") gibts seit 1.10.2003 ein control das PDF Dateien anzeigt und auch ausducken kann: WPViewPDF.
Es erfordert keinen Acrobat und auch keine OCX registrierung, ist in der standard version allerdings als DLL implementiert (was es auf der anderen Seite aber einsetzbar unter Delphi, .NET, VC .. macht). Eine demo steht zum Download bereit unter http://www.wpcubed.com/products/pdfviewer/index.htm Grüsse, Julian Ziersch |
Re: PDF-Dokumente aus Delphi drucken
Hey Leute,
kleines Update ! Ich hab's nun zum funzen gebracht: Der "Trick" daran ist, das die Darstellung des PDF's in der auf die Form gezogenen Komponente erfolgt. Man muß die Komponente entsprechend plazieren und auf die vorgesehen Grösse bringen - dann kann man es auch sehen :oops: leider hatte ich die Komponente so minimiert, daß ich nichts darin sehen konnte. Also es funzt ! Was aber muß man bei einer Programmauslieferung beachten ? Muß man das PDF.ocx mit ausliefern ? Muß man irgendetwas registrieren (was und wie) ? Oder ??? Danke für Eure Hilfe hacki |
Re: PDF-Dokumente aus Delphi drucken
Das ist jetzt auch wieder ne rechtliche Frage...
Denn ich weiß nicht, ob du diese OCX Datei einfach so weitergeben darfst. Aber du kannst ja einfach sagen, der Acrobat Reader muss installiert sein bzw. bei der Installation mit installieren.... |
Re: PDF-Dokumente aus Delphi drucken
Wie kann man denn aus dem Prog abfragen, ob der Acrobat Reader installiert ist ? Falls nicht installiert -> kann ja dann ein Meldungsfenster mit dem entsprechenden Hinweis aufpoppen.
Jemand eine Anhnung ? |
Re: PDF-Dokumente aus Delphi drucken
Delphi-Quellcode:
function IsAcrobatInstalled: Boolean; //Adobe Acrobat Reader
var reg: TRegistry; begin Result := false; reg := TRegistry.Create(KEY_READ); with reg do begin try RootKey := HKEY_CLASSES_ROOT; if OpenKey('CLSID\{CA8A9780-280D-11CF-A24D-444553540000}', False) then Result := true finally CloseKey; Free end end end; |
Re: PDF-Dokumente aus Delphi drucken
Super vielen Dank,
es funzt !! grüsse hacki |
Re: PDF-Dokumente aus Delphi drucken
Hallo Allerseits,
habe da ein ganz ähnliches Problem, bin aber, wie's scheint, etwas Begriffsstutzig: http://www.delphipraxis.net/images/smiles/gruebel.gif Grübelnd... Ich möchte mir aus einem Delphi-Programm heraus eine Informationsmappe drucken. Die einzelnen Seiten der Mappe sind fertige PDF-Dokumente, Excel-Tabellen und Word-Dokumente. Wenn ich auf meinem Formular den Drucken-button drücke, soll der Drucker der Reihe nach alle Seiten dieser Info-Mappe drucken, ohne noch mal extra nachzufragen, wo denn die Dateien liegen. Fakt ist: Ich kriege das Programm nicht mal dazu mir eine solche Seite anzuzeigen, geschweige denn auszudrucken. Oben genannten Quellcode habe ich einfach mal kopiert
Delphi-Quellcode:
mit dem Erfolg, daß beim Start des Programmes der Acrobat Reader gestartet wird. Was dann passiert finde ich etwas seltsam: Der Acrobat Reader und mein Programm werden klamm heimlich wieder geschlossen. Mein Formblatt habe ich gar nicht zu Gesicht bekommen.
if OpenDialog1.Execute then
begin PDF1.src:=OpenDialog1.FileName; PDF1.LoadFile(OpenDialog1.FileName); Kann mir jemand sagen, was ich tun muß, daß das geht? Wie müßte der Code aussehen, eine Seite auszudrucken? Gruß Glühwürmchen [edit=sakura][delphi]-Tags gesetzt. Mfg, sakura[/edit] |
Re: PDF-Dokumente aus Delphi drucken
du mußt auf alle fälle eine schleife bauen die durch das zielverzeichnis skipt
und wenn es ein pdf findet, laden und drucken. Einfach so:
Delphi-Quellcode:
Ist deine importierte OCX aus dem installierten AcrobatReader ?
with Pdf1 do
begin LoadFile(myfile); print; end; Die Versionen müssen zusammenpassen ! fredi [edit=sakura][delphi]-Tags gesetzt. Mfg, sakura[/edit] |
Re: PDF-Dokumente aus Delphi drucken
Hallo,
kann man diese PDF Dokumente auch ausdrucken ohne sie öffnen zu müssen?? Danke, skorsi |
Re: PDF-Dokumente aus Delphi drucken
Ich will mich mal hier dranhängen. Ich versuche auch ein PDF mit dem ActiveX Control auszudrucken. Klappt eigentlich ganz gut, nun ja mehr schlecht als recht. Nur wenn ich es aus einem Thread versuche bekomme ich folgende fehlermeldung zu sehen:
Zitat:
In einem Demo projekt hab eich es ohne Thread probiert, da geht es. Ich poste hie rmal meinen Code: Thread:
Delphi-Quellcode:
Start des Thread:
function Thread(p: Pointer): Integer;
var Loop: Cardinal; MemStream: TMemoryStream; URL: string; PN: string; StartPage, MaxPages: Cardinal; SB: TStatusbar; IdHTTP: TIdHTTP; FileExt: string; PDF: TPdf; bPrint: Boolean; Dir: string; btnDownload, btnCancel: TButton; Filename: String; begin Result := 0; Loop := 0; URL := PThreadParams(p)^.URL; PN := PThreadparams(p)^.PN; StartPage := PThreadParams(p)^.StartPage; MaxPages := PThreadParams(p)^.MaxPages; SB := PThreadParams(p)^.SB; IdHTTP := PThreadParams(p)^.IdHTTP; FileExt := PThreadParams(p)^.FileExt; Pdf := PThreadParams(p)^.PDF; bPrint := PThreadParams(p)^.bPrint; Dir := PThreadParams(p)^.Dir; btnDownload := PThreadParams(p)^.btnDownload; btnCancel := PThreadParams(p)^.btnCancel; Filename := Dir + PN + '_' + IntToStr(Loop) + '.' + FileExt; for Loop := StartPage to MaxPages do begin if bCancel = 1 then break; MemStream := TMemoryStream.Create; try SB.Panels[0].Text := 'Seite: ' + IntToStr(Loop); SB.Refresh; try IdHTTP.Get(URL + IntToStr(Loop), MemStream); except on E: Exception do begin Messagebox(0, Pointer(e.Message), APPNAME, MB_ICONSTOP); break; end; end; MemStream.SaveToFile(Filename); finally FreeAndNil(MemStream); end; if bPrint then begin //Form1.Pdf1.src := Filename; Form1.Pdf1.LoadFile(Filename); //PDF.printWithDialog; end; end; SB.Panels[0].Text := 'Seiten:'; SB.Panels[1].Text := 'Fortschritt:'; btnDownload.Enabled := True; btnCancel.Enabled := False; FreeMem(p, sizeof(TThreadParams)); end;
Delphi-Quellcode:
Ach so und noch was: printAll oder nur Print geht auch nicht.
procedure TForm1.DownloadEspacenet;
var URL: string; ThreadParams: PThreadParams; hThread: THandle; ThreadID: Cardinal; begin GetMem(ThreadParams, sizeof(TThreadParams)); if Assigned(ThreadParams) then begin URL := ESPACENETURL + '?PN=' + edtPN.Text + '&ID=' + edtID.Text + '&PG='; ThreadParams.URL := URL; ThreadParams.PN := edtPN.Text; ThreadParams.StartPage := StrToInt(edtPagesStart.Text); ThreadParams.MaxPages := StrToInt(edtPages.Text); ThreadParams.SB := Statusbar1; ThreadParams.IdHTTP := IdHTTP1; ThreadParams.FileExt := 'pdf'; ThreadParams.Dir := edtDir.Text; ThreadParams.btnDownload := btnDownload; ThreadParams.btnCancel := btnCancel; ThreadParams.PDF := PDF1; ThreadParams.bPrint := chkPrint.Checked; hThread := BeginThread(nil, 0, Thread, ThreadParams, 0, ThreadID); if hThread <> 0 then begin btnDownload.Enabled := False; btnCancel.Enabled := True; end; end; end; |
Re: PDF-Dokumente aus Delphi drucken
Ich noch mal. Qick and dirty Lösung:
Delphi-Quellcode:
ShellExecute(0, 'open', 'acrord32', PChar('/p /h ' + Filename), nil, SW_HIDE);
|
AW: PDF-Dokumente aus Delphi drucken
Hallo, ich zeige mir die PDF-Dateien über ActiveX an. Das funktioniert soweit auch.
Jedoch funktioniert hier das Drucken nicht. Der Button ist Enabled. Ich verwende derzeit den Acrobat Reader DC 2020.009.20074 Mit einer alten Version funktioniert das Drucken ebenfalls. Rein über den Acrobat Reader funktioniert der Druck-Button. |
AW: PDF-Dokumente aus Delphi drucken
DevExpress hat auch eine PDF-Komponente, die kann man zur Anzeige verwenden und deren TPdfDocument auch auch einzeln intern zum Drucken.
Sowie zum Bearbeiten von PDFs. https://docs.devexpress.com/OfficeFi...f-document-api Die setzen wir inzwischen vermehrt ein (seitdem sie auch bissl scheller wurde), da es immer wieder Probleme mit Acrobat bei den Kunden gab, womit es somit keine externen Abhängigkeiten mehr gibt, die urplötzlich kaputt gehn können. aber Achtung * es wird nicht alles Unterstützt, was der Acrobat kann * und es ist auch "bissl" langsamer, beim Laden und Anzeigen/Verarbeiten von PDFs * aber da wird ständig dran weiterentwickelt und es bessert sich z.B. nervt es auch ständig, dass ständig die SideBar von Acrobat auftaucht (weil da mal wieder dran rumgepfuscht wurde), wenn wir PDFs eingebettet als Vorschau anzeigen wollen und auch im Konflikt mit MS Office gab es schon Probleme, sodass die Anzeige des Acrobat nicht funktionierte. Wenn man da dann das Drucken vom DevExpress über Delphis TPrinter vornimmt, dann hat man auch sämtliche Freiheiten, was z.B. Papierformat, Ausrichtung und Druckerschacht betrifft. Ansonsten wäre meine Idee mal zu schauen wie man PDF.js im Delphi nutzen kann, als quelloffene Alternative zum Acrobat, ohne pervese Programminstallationen. |
AW: PDF-Dokumente aus Delphi drucken
Zitat:
Zitat:
Wenn was nicht geht, dann geht es halt nicht. Mussten schon bei Adobe einige "broken Features" miterleben Alternative sind - Lade das PDF im TWebbrowser und steuere den Druck über die API an (OLECMDID_PRINT) - Lade das PDF im Chromium(CEF4) und Drucke darüber - Lade das PDF über Edge Chromium (D10.4 nötig) und Drucke darüber |
AW: PDF-Dokumente aus Delphi drucken
In einem der Firebird-Seminare (vom 5.6.20; etwa ab 01:27:00) von Holger Klemt wurde gezeigt, wie man den Standalone PDF Viewer "Sumatra PDF" in Delphi- und Lazarus-Programme einbettet: Indem man ihn mit Parameter "-plugin" aufruft und das Handle eines TPanels übergibt, auf dem der Viewer dann angezeigt wird.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:07 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