Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi PDF-Dokumente aus Delphi drucken (https://www.delphipraxis.net/6729-pdf-dokumente-aus-delphi-drucken.html)

Grim Fandango 20. Jul 2003 11:58


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:

Christian Seehase 20. Jul 2003 12:25

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.

HellAngel666 22. Jul 2003 07:44

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

Alexander 22. Jul 2003 08:02

Re: PDF-Dokumente aus Delphi drucken
 
Kuck dir mal GhostScript an. Am besten google mal danach

Grim Fandango 22. Jul 2003 09:48

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:

ketraun 22. Jul 2003 11:01

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

ketraun 22. Jul 2003 12:22

Re: PDF-Dokumente aus Delphi drucken
 
hi
ich nehm alles zurück. Da treten mysteriöse Fehler auf.
Vergiss meinen Beitrag einfach.
ketraun

hacki 8. Okt 2003 09:55

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:

Vielleicht hilft es Dir schon mal weiter das Acrobat Reader ActiveX Control zu importieren (Komponente\ActiveX importieren).
Zitat:

installiere Acrobat reader 6.0
imporitere das active X ( wo oben beschrieben ) und du kannst ansehen
und ausdrucken.
Wie genau funktioert das ? Gibt es unter Delphi 6 Professional bereits ein entsprechendes ActiveX oder verstehe ich es richtig, daß man das ActiveX aus dem Acrobat Reader 6 importieren soll (wie?) ?

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

Alexander 8. Okt 2003 13:54

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

hacki 8. Okt 2003 18:34

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

Alexander 8. Okt 2003 18:58

Re: PDF-Dokumente aus Delphi drucken
 
Gibt es vielleicht sowas wie Update oder so?

fredi 9. Okt 2003 08:56

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

jziersch 9. Okt 2003 12:50

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

hacki 9. Okt 2003 13:31

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

Alexander 9. Okt 2003 14:11

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

hacki 9. Okt 2003 16:48

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 ?

Matze 9. Okt 2003 16:59

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;

hacki 9. Okt 2003 17:11

Re: PDF-Dokumente aus Delphi drucken
 
Super vielen Dank,

es funzt !!

grüsse
hacki

Glühwürmchen 31. Okt 2003 14:06

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:
if OpenDialog1.Execute then
begin
PDF1.src:=OpenDialog1.FileName;
PDF1.LoadFile(OpenDialog1.FileName);
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.

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]

fredi 31. Okt 2003 15:15

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:
  with Pdf1 do
    begin
    LoadFile(myfile);
    print;
    end;
Ist deine importierte OCX aus dem installierten AcrobatReader ?
Die Versionen müssen zusammenpassen !

fredi

[edit=sakura][delphi]-Tags gesetzt. Mfg, sakura[/edit]

skorsi 9. Mär 2004 09:26

Re: PDF-Dokumente aus Delphi drucken
 
Hallo,

kann man diese PDF Dokumente auch ausdrucken ohne sie öffnen zu müssen??

Danke, skorsi

Luckie 12. Jun 2004 22:02

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:

---------------------------
Acrobat plug-in.
---------------------------
Could not find Acrobat External Window Handler.
---------------------------
OK
---------------------------
Gebe ich zusätzlich vorher als src die Datei an bevor ich sie lade, dann kommt keine Fehlermeldung aber es tut sich nichts.

In einem Demo projekt hab eich es ohne Thread probiert, da geht es. Ich poste hie rmal meinen Code:
Thread:
Delphi-Quellcode:
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;
Start des Thread:
Delphi-Quellcode:
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;
Ach so und noch was: printAll oder nur Print geht auch nicht.

Luckie 12. Jun 2004 22:17

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

Thomas Feichtner 7. Jul 2020 14:38

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.

himitsu 7. Jul 2020 15:00

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.

Bernhard Geyer 7. Jul 2020 15:22

AW: PDF-Dokumente aus Delphi drucken
 
Zitat:

Zitat von Thomas Feichtner (Beitrag 1469036)
Hallo, ich zeige mir die PDF-Dateien über ActiveX an. Das funktioniert soweit auch.

Das Funktioniert noch - Glück gehabt. Adobe garantiert nur entweder den direkten Start oder Anzeige im IE

Zitat:

Zitat von Thomas Feichtner (Beitrag 1469036)
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.

Wie oben geschrieben. Die Nutzung des Reader über ActiveX ist Adobe sch*** egal.
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

Frickler 8. Jul 2020 09:16

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