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
Mit
1 | $ lpoptions -l |
2 | PageSize/Media Size: Letter Legal Executive Statement FanFoldGermanLegal 3x5 4x6 5x7 5x8 *A4 A5 A6 B5 B6 Env3.5x5 Env4x6 Oficio 195x270mm 184x260mm 7.75x10.75 Postcard DoublePostcardRotated Env10 EnvMonarch EnvISOB5 EnvC5 EnvC6 EnvDL EnvChou3 EnvChou4 Custom.WIDTHxHEIGHT |
3 | Duplex/Two-Sided: *None DuplexNoTumble DuplexTumble |
4 | InputSlot/Paper Feed: *Auto Tray1 Tray2 Tray3 Tray4 ManualFeed |
5 | ... |
findet man unter InputSlot/Paper Feed die Namen der Papierschächte heraus, mit
1 | $ lp media=A4 -o InputSlot=Tray2 /pfad/zur/datei.pdf |
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.
:
Bearbeitet durch User
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
:
Bearbeitet durch User
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
Packt man eben Briefkopf und Footer jeweils mit ins PDF wo es gebraucht wird und drückt das ganze aus einem Schacht
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.