Hallo allerseits,
hier gibt es so viele erfahrene Programmierer, da ist eventuell einer
dabei, der mir einen Rat geben kann, wie man in einer PHP-Anwendung am
besten PDF-Dokumente erzeugt und dann die Seiten auf verschiedenen
Druckerschächten ausdrucken kann. Es geht also z.B. um Dokumente, bei
denen einige Seiten auf speziellem Briefpapier gedruckt werden müssen
und andere auf normalem Druckerpapier.
Ich habe schon lange nichts mehr mit Druckerprogrammierung gemacht, aber
ich glaube mich zu erinnern, dass ich damals in C++ über das
Drucker-Handle auf die Eigenschaften eines installierten Druckers
zugreifen konnte, wo dann neben vielen anderen Eigenschaften auch die
Druckerschächte aufgezählt und für den Druck ausgewählt werden konnten.
Das wirkt auch mich im Nachhinein so, als wäre die Ansteuerung des
Druckerschachtes eher eine Aufgabe der druckenden Anwendung, die bei
jeder zu Druckenden Seite den richtigen Schacht festlegt, und nicht die
des auszudruckenden Dokuments.
Ich frage mich, wie sich dieses Problem überhaupt bei der Benutzung
einer rein Server-Basierten Anwendung bzw. mit der Abgabe der Kontrolle
durch das Übergeben des PDFs an den Browser lösen lässt?
Die Dokumente sollen nicht nur ausgedruckt werden, sondern auch auf dem
Server gespeichert und der Dateipfad dann in der DB gespeichert werden,
damit die Dokumente jederzeit 1:1 erneut angezeigt und ausgedruckt
werden können.
Viele Grüße
Nachteule
schickt man die pdf Datei zum Schacht 2. Stellt auch von PHP heraus kein
Problem dar.
Zum Erzeugen von PDFs gibts (zu) viele Optionen, was PHP-spezifisches
kenne ich nicht. Ich verwende z.B. recht gerne wkhtmltopdf und
weasyprint, das nimmt HTML+CSS und spuckt PDF aus.
Nachteule schrieb:> , als wäre die Ansteuerung des Druckerschachtes eher eine Aufgabe der> druckenden Anwendung, die bei jeder zu Druckenden Seite den richtigen> Schacht festlegt,
Nein, die Anwendung ruft den Einstellungsdialog des Druckertreiber auf
(wenn der Nutzer die Druckeinstellungsschaltfläche in der Anwendung
drückt). Die Anwendung hat eigentlich keine Ahnung was der Drucker alles
kann (Die Anwendung kann aber diese Konfiguration (Die der Nutzer in
diesen Einstellungsdialog vornimmt) sichern und wiederherstellen).
Hier kannst du dich reinlesen
https://docs.microsoft.com/en-us/windows/desktop/printdocs/printing-and-print-spooler-functions
Nur so als Idee... Den Drucker mehrmals installieren. Dann in jeden
Drucker den gewünschten Schacht als Default festlegen. Dann die Seite je
nach Wunsch zum richtigen Drucker schicken.
Oder, den Drucker konfigurieren (halt mit dem Druckerdialog), dann die
Konfiguration sichern. Dann die nächste Konfiguration sichern usw.
Dann vor dem Druck die passende Konfiguration wiederherstellen.
Hi, interessantes Thema, hab evtl. ein ähnliches Problem.
Geht sogar um mehrere Drucker die aus verschiedenen Schächten bedient
werden müssen.
Verstehe ich den Ansatz von User test so :
Ein Physikalischer Drucker mit 3 Slots installiere ich als drei einzelne
logische Drucker:
LP1_Slot1
LP1_Slot2
LP1_Slot3
Dann kann ich jeweils die Einzeldokumente dort hin schicken.
Finde ich ne gute Idee.
Übrigens als Anregung für Nachteule, für eine gute PDF-Ausgabe, schau
Dir mal Apache-FOP an mit XSLT
Gruß
Hallo zusammen,
vielen Dank für eure ausführlichen Antworten. Ich befürchte, dass wir
zumindest teilweise über verschiedene Sachen reden. Es handelt sich in
meinem Fall NICHT um eine Firmenumgebung, in der direkt am Server die
Drucker angeschlossen sind. In meinem Fall gibt es lediglich eine
WebAnwendung bei einem WebHoster, die vom Verein aus aus über Firefox
genutzt wird. Die darüber erstellten PDF-Dokumente sollen über unseren
Vereins-PC bzw. den daran angeschlossenen Drucker mit mehreren
Papierfächern ausgedruckt werden. Deshalb auch mein anfänglicher Hinweis
mit der Abgabe der Kontrolle an den Browser. Das hätte ich vielleicht
ausführlicher schreiben sollen und dafür bitte ich um Entschuldigung.
Ich fange aber auch erst gerade an mich so halbwegs daran zu erinnern,
dass in diesem Zusammenhang unterschiedliche Umgebungen existieren und
in welcher ich mich befinde. :)
Den Ansatz mit den verschiedenen Druckern halte ich ebenfalls für
Sinnvoll, da man so unabhängig von den tatsächlich dahinter befindlichen
Druckern und Einstellungs-Dialogen arbeiten kann. Aber irgendetwas muss
ja auch bei verschiedenen virtuellen Druckern seitenbasiert eine
automatische Unterscheidung vornehmen. Meine Frage zielte also darauf
ab, wie man diesen Workflow abstrakt betrachtet am besten umsetzt:
Man könnte die seitenbezogenen Druckerschacht-Informationen ja z.B. im
PDF in irgendwelchen Meta-Informationen speichern (z.B. JSON ?), oder
aber in der Datenbank. Unabhängig davon wo man es speichert, kann man
theoretisch entweder für jedes Dokument Seite für Seite den Schacht
definieren, oder aber Dokumenten-Arten definieren, wo diese
Informationen global hinterlegt und geändert werden können (sofern
Aussagen darüber auch bei variabler Seiten-Anzahl möglich sind). In
keinem Fall scheine ich jedoch um ein Hilfs-Programm auf dem Vereins-PC
herum zu kommen, dass beim Ausdruck die Aufteilung der Seiten auf die
Papierfächer bzw. virtuellen Drucker steuert. An der Stelle stellt sich
auch die Frage, wie komfortabel die Lösung sein muss, wenn nicht ich am
Vereins-PC sitze, sondern jemand der weniger IT-Affin ist? Für mich
würde vermutlich ein selbst gebasteltes Phyton-Script reichen - andere
hier kennen vielleicht nur den Windows Druck-Dialog, von daher wäre z.B.
ein eigener virtueller Drucker denkbar, der dann die weitere Verteilung
übernimmt. Aber das ist ja auch eine Frage des Aufwandes, da es "nur"
für unseren Verein ist. Der Vorteil ist aber, dass ich das selbst in
meiner Freizeit umsetze und mir kein Chef mit einer Deadline im Nacken
sitzt. Ich wäre auch durchaus in der Lage, einen Linux-Server zu
installieren und hier aufzubauen, wenn das alles deutlich vereinfacht.
Die Lösung mit dem Webhoster hatte ich aber bewußt gewählt, weil ich
auch nicht immer im Verein bin und der WebHoster sich 24/7 um den
laufenden Betrieb kümmert. Zudem bricht für uns auch keine Welt
zusammen, wenn wir mal einen Tag lang nicht mit dem Programm arbeiten
können. Genau wegen dieser mir vielleicht noch nicht bekannten
Möglichkeiten, die ich dann weiter verfolgen würde, hatte ich meine
Anfrage gestellt.
Besten Dank und viele Grüße
Nachteule
Also wenn das eine klassische Client-Server-Umgebung ist
und das PHP auf dem Server die Drucker nicht kennt, hast
du keine Chance verschiedene Drucker automatisch auszuwählen.
Die Drucker-Ansteuerung obliegt dann einzig und allein dem
Browser bzw. dem PDF-Reader, wenn die PDFs heruntergeladen
und angeschaut werden.
Das Erzeugen der PDFs ist kein Hexenwerk. Wenn du da Hilfe
brauchst kann ich heute Abend mal nachschauen, was ich da
mal verwendet hatte.
merciless
Dirk K. schrieb:> Das Erzeugen der PDFs ist kein Hexenwerk. Wenn du da Hilfe> brauchst kann ich heute Abend mal nachschauen, was ich da> mal verwendet hatte.
Vielen Dank, aber das habe ich zwischenzeitlich hinbekommen (mit
DomPDF).
Viele Grüße
Nachteule
Nachteule schrieb:> In> keinem Fall scheine ich jedoch um ein Hilfs-Programm auf dem Vereins-PC> herum zu kommen, dass beim Ausdruck die Aufteilung der Seiten auf die> Papierfächer bzw. virtuellen Drucker steuert
Das ist wohl so. Natürlich kann man beim Drucken den Schacht angeben,
das habe ich schon unter MSDOS gelöst, um Rechnungen mit 3 Durchschlägen
auf verschiedenes Papier zu drucken, aber man kann auch mehrere Drucker
einrichten, wenn man sich die direkte Druckerprogrammierung nicht
zutraut. Diese Drucker muss man dann aber auch seitenweise ansprechen.
Ich würde verschiedene "Modelle" vorsehen, z.B. Seite 1 aus Schacht 1
und die Seiten 2 und 3 aus Schacht 2, und für jedes Modell ein
serverseitiges Script oder Programm erstellen. Der Browser muss zur
PDF-Datei das zu verwendende Script an den Server übermitteln. D.h.
dieses Script oder Programm druckt dann die PDF-Datei aus.
Die Alternative wäre, die Auftrennung in Einzelseiten schon auf dem
Client vorzunehmen, aber das ist annähnernd die gleiche
Programmierarbeit, man muss das auf jedem Client installieren, und wenn
dann noch IOS oder Androidgeräte verwendet werden artet das in Arbeit
aus. Das Konzept der serverseitigen Programmierung ist da überlegen.
Georg