AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Liste von Dokumenten (doc, pdf) drucken

Ein Thema von niko022 · begonnen am 5. Dez 2007 · letzter Beitrag vom 5. Dez 2007
Antwort Antwort
niko022

Registriert seit: 2. Okt 2007
46 Beiträge
 
#1

Liste von Dokumenten (doc, pdf) drucken

  Alt 5. Dez 2007, 13:27
Hallo,
ich hätte eine Frage zum drucken von Dokumeten aus Delphi heraus.

Ich habe zu dem Thema schon einige Sachen gefunden und auch ausprobiert, bin aber noch nicht auf die richtige Variante gestoßen die ich für meinen Fall nutzen kann.

Mein Problem:

Ich habe über Delphi ein Array aufgefüllt in dem Pfade + Filenamen zu Dokumenten abgelegt sind.
z.B.
Delphi-Quellcode:

 C:\Dokumente\Handbücher\Thema1\Handbuch1.pdf
 C:\Dokumente\Handbücher\Thema2\Handbuch1.doc
 C:\Dokumente\Handbücher\Thema2\Handbuch2.doc
 C:\Dokumente\Handbücher\Thema3\Handbuch1.pdf
 
 ...
Danach möchte ich dieses Array abarbeiten und jedes File im Hintergrund ausdrucken. Habe versucht
über Shellexecute den Ausdruck zu erreichen.

Delphi-Quellcode:

ShellExecute(Application.Handle, 'print', PChar('C:\Dokumente\Handbücher\Thema1\Handbuch1.pdf'), NIL, NIL, SW_SHOWNORMAL);

...
Das dumme nur ich kann keinen speziellen Drucker beim ShellExecute mitgeben. Sollte einen Drucker aus einer Druckerliste übergeben können. Bzw. ich bekomme vom Drucker auch keine Rückmeldung auf das ich warten könnten
um das nächste File zu übergeben.

Zweiter Versuch dann über TPrinter von Delphi. Dort habe ich was gefunden mit dem Texte, Bilder, ... aus Delphi
heraus ausgedruckt werden können. Man kann über eine ComboBox einen Printer auswählen und dem Printer dann den
Text übergeben. Habe nur das wesentlich dazu als Bsp. eingefügt.

Delphi-Quellcode:
  ...

  printer.printerindex:= combobox1.itemindex;

  printer.begindoc;
  printer.canvas.textout(100,100,'Testzeile');
  printer.enddoc;

  ...
Habe dort aber nichts gefunden um z.B. dann ein Doc oder pdf - File zu übergeben und dieses dann auszudrucken.

Dritter Versuch habe was speziell über WordDokumente gefunden. Dazu muß man ein TWordDocument und ein TWordApplication in das Projekt einfügen. Danach kann dann das File über eine Connection über diese Komponenten übergeben werden.

Delphi-Quellcode:
  ...

  WordApplication1.Connect;
  WordApplication1.Visible:=false;
  VarFileName:='C:\Dokumente\Handbücher\Thema2\Handbuch1.doc';
  WordApplication1.Documents.Open(VarFileName,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
                                  EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
  WordDocument1.ConnectTo(WordApplication1.ActiveDocument);
  Background:=false;
  Append:=false;
  Range:=wdPrintAllPages;
  WordDocument1.PrintOut(Background, Append, Range);
  WordDocument1.Close;
  WordDocument1.Disconnect;
  WordApplication1.Disconnect;

  ...
Hier das Problem kann natürlich nur Word Dokumente übergeben. Das andere ich muß speziell den Drucker mit OK
Button starten. Auch keine gute Lösung. Rückmeldung auf Erfolg gibt es auch nicht.

Bei allen drei Variante habe ich das Problem das ich vom Drucker keine Rückmeldung bekomme bevor ich das
nächste File dem drucker schicken kann. Sozusagen bleibe ich im Delphi Quellcode nicht stehen und kann
warten auf die rückmeldung eines erfolgreichen ausdrucks. Desweiteren muß ich speziell jedes Dokoment mit OK bestätigen damit es zum drucker gesendet wurde.

Hat jemand eine Lösung mit dem man ein Array abarbeiten kann und dort jedes Dokument schritt für schritt an
den drucker senden und ausdrucken kann? Vielleicht funktioniert es ja auch mit einer der oberen Varianten,
aber ich bin irgendwie nicht draufgekommen bzw. habe kein gutes Tutorial gefunden, mit dem ich dieses Problem
lösen könnte.

Vielleicht gibt es auch was ganz anderes wie man so was lösen kann.

Bin über jede Hilfe dankbar.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Liste von Dokumenten (doc, pdf) drucken

  Alt 5. Dez 2007, 13:37
Du kannst Dateien normalerweise nicht einfach so aus Delphi heraus drucken. Um ein Worddokument zu drucken, muss es ersteinmal geöffnet werden, und das kann nun mal nur Word. Und auch nur Word kann dieses File drucken... Gleiches gilt für PDF. Eventuell gibt es Komponenten, die du unter Delphi einbinden kannst (für PDF sicherlich), aber Word ist wirklich ein heisses Thema. Und genau aus dem Grund habe ich das Tool

PrintDoc

entwickelt. Ist ein Konsolenprogramm, das mit gewissen Parametern aufgerufen wird, um ein Word Dokument an einen Drucker zu schicken. Das Prinzip basiert auf OLE, d.h. Word muss auf dem Rechner installiert sein.

Was die PDF anbelangt, da kannst du GhostScript (als Zusatz GhostView) benutzen. Da gibt es ein Tool namens gsprint.exe, welches PDF direkt ausdrucken kann. Ghostscript muss auch hier auf dem Rechner installiert werden.
  Mit Zitat antworten Zitat
niko022

Registriert seit: 2. Okt 2007
46 Beiträge
 
#3

Re: Liste von Dokumenten (doc, pdf) drucken

  Alt 5. Dez 2007, 13:45
Vielen Dank erstmal für die Antwort.

Ich schaue mir gleich mal Ihr Tool an.

Das Word oder der Adobe Reader gestartet werden muß wäre ok. Bei ShellExecute macht er ja auch Word oder den
Adobe Reader auf.

Das einzigste was ich brauche ist das ich nach und nach das Array mit den Files abarbeiten und ausdrucken kann.
Ob da Word oder der Adobe Reader aufgemacht wird ist egal.

Nochmal Danke.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Liste von Dokumenten (doc, pdf) drucken

  Alt 5. Dez 2007, 13:49
(Nicht Acrobat... GhostScript bzw. gsprint.exe für die PDFs)

Zu den Word Dokumenten: Es wird immer eine Instanz von Word geöffnet->Dokument geladen->gedruckt->Dokument geschlossen->Word beendet... Das funktioniert, ist aber langsam, immer wieder eine neue Wordinstanz zu starten, wenn du mehrere Dokumente drucken willst. Es existiert aber ein Parameter in PrintDoc, bei dem du angeben kannst, ob Word geschlossen werden soll nach dem Drucken oder nicht.... Das beschleunigt die Sache erheblich.
  Mit Zitat antworten Zitat
niko022

Registriert seit: 2. Okt 2007
46 Beiträge
 
#5

Re: Liste von Dokumenten (doc, pdf) drucken

  Alt 5. Dez 2007, 16:05
Wie funktioniert das mit dem GhostScript gsprint.exe genau bei pdf Files?


Das ich mehrere Dokumente (docs) drucken kann funktioniert noch nicht wirklich. Wie kann ich eine
Liste (Array) abarbeiten und übergeben? Sollte bei jedem Dokument auf die Rückmeldung warten
das es fertiggedruckt wurde.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Liste von Dokumenten (doc, pdf) drucken

  Alt 5. Dez 2007, 16:07
Zitat von niko022:
Wie funktioniert das mit dem GhostScript gsprint.exe genau bei pdf Files?
Doku lesen


Zitat von niko022:
Wie kann ich eine Liste (Array) abarbeiten und übergeben? Sollte bei jedem Dokument auf die Rückmeldung warten
das es fertiggedruckt wurde.
Du kannst PrintDoc keine Liste übergeben, sondern immer nur ein Dokument.
  Mit Zitat antworten Zitat
niko022

Registriert seit: 2. Okt 2007
46 Beiträge
 
#7

Re: Liste von Dokumenten (doc, pdf) drucken

  Alt 5. Dez 2007, 16:14
Weist du vielleicht wo es eine gute Doku dazu gibt?

Das andere gibt es nicht die Möglichkeit eine ganze Liste an Files zu übergeben die abgearbeitet und gedruckt werden kann?
  Mit Zitat antworten Zitat
niko022

Registriert seit: 2. Okt 2007
46 Beiträge
 
#8

Re: Liste von Dokumenten (doc, pdf) drucken

  Alt 5. Dez 2007, 16:44
Also den Ausdruck habe ich soweit mit ShellExecute und GsPrint reicht mir eigentlich, ohne das ich irgendwas betätigen muß, aber wie kann ich nur eine Liste übergeben?

Delphi-Quellcode:

  ShellExecute(Handle, 'printto', PChar('D:\Test.doc'), nil, nil, SW_HIDE);
  ShellExecute(Handle, 'open', 'C:\Programme\Ghostgum\gsview\gsprint.exe', PChar('D:\Test.pdf'), '', SW_HIDE);

Vielleicht weis jemand wie man das realisieren kann? Möchte nicht alle Files auf einmal zum drucker
jagen. Eins nach dem anderen. Sollte irgendwie zwischendrin warten.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14: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