 |
 |
 |
USB/PDF-Drucker mit dBASE/DOS ansprechen
|
Einführung
|
Nicht nur dBASE unter MS-DOS, sondern auch viele andere DOS-Programme können nicht richtig mit USB-Druckern oder speziellen Windows-Druckern (auch PDF- und Fax-Treiber etc.) umgehen.
Lösung am Beispiel von dBASE 5 für DOS, Windows XP und Epson Stylus Scan 2500 (USB), sowie mit dem PDF-Druckertreiber FinePrint pdfFactory. Die hier beschriebenen Lösungen funktionieren bei mir und sind reproduzierbar. Das heisst noch lange nicht, dass sie auch bei Ihnen funktionieren, aber als Programmierer wissen Sie das ...
Am Ende der Seite gibt´s übrigens auch noch einen Download der Lösung als PDF.
Auch ja, und bevor ich es vergesse: auch Kunden brauchen Grenzen! (-W-)
|
|
|
-Werbung-
NEU! Wellaria- Ihr freundlicher Online-Shop für Fitness und Wellness! NEU!
|
|
|

|
|
|
Absätze direkt anwählen
|
Problembeschreibung 1. Lösungsmöglichkeit, Druckerpool mit Windows XP 2. Lösungsmöglichkeit, LPTx im Netzwerk simulieren 3. Lösungsmöglichkeit, der Umweg über eine Datei Sonderfall PDF-Druckertreiber Anmerkungen zu 1 - 3 4. Lösungsmöglichkeit, externes Tool als letzte Rettung Download der kompletten Lösung als PDF
|
|
|
-Werbung-
Softwahn - Der etwas andere Software-LeiDfaden! Satirisch, bissig, gut!
|
|
|
Problembeschreibung
|
Grundsätzlich betrifft das Problem nicht nur dBASE (DOS) und nicht nur USB-Drucker. Sowohl das Problem, als auch die Lösungen gelten für sehr viele DOS-Programme, die Probleme mit dem Druck unter Windows haben, wenn der Drucker nicht an einer parallelen Schnittstelle (LPT1, LPT2) angeschlossen ist.
Ob das jetzt eine USB-Schnittstelle oder noch etwas anderes ist, z. B. ein PDF-Treiber, eine Fax-Software oder was auch immer, ist relativ egal, denn Problem und auch Lösung sind in all diesen Fällen sehr ähnlich. Fax und PDF sind aber dennoch kritisch.
Alle gezeigten Lösungen funktionieren bei mir mit dBASE 5 (DOS-Version) unter Windows XP Professional und einem Epson Stylus Scan 2500 USB-Drucker. Bei anderen DOS-Programmen sollten die Lösungen in vielen Fällen auch so oder ähnlich funktionieren.
Wichtig: damit der Epson Stylus Scan 2500 unter XP sauber läuft muss er per USB-Kabel angeschlossen werden, nicht parallel! Und selbst dann geht nur der Drucker, aber nicht der Scanner. Traurig, dass weder Microsoft noch Epson es nötig haben, einen vollständigen Treiber für diese Modellreihe bereitzustellen. Traurig, aber wahr. Und ein Grund, beim nächsten Kauf eines Druckers bzw. eines Kombigerätes den Hersteller gut zu überdenken ...
Immer und überall wird´s aber nicht gehen, z. B. nicht bei Hardcore-Programmen, die so "trickreich" und/oder "unsauber" programmiert sind, dass sie direkt auf die Portadressen der Schnittstellen zugreifen. Früher war sowas unter DOS weit verbreitet, aber Windows fängt das gnadenlos ab und unterbindet jegliche direkten Hardware-Zugriffe dieser Art.
Bei Windows NT oder Windows 2000 sollte es ähnlich funktionieren, kleinere Abweichungen sind aber möglich (vorallem in den Details der Netzwerk- und Treiber-Konfiguration). Gleiches gilt für Windows 95/98/ME, aber mit diesen Relikten wird ja heute wohl niemand mehr ernsthaft arbeiten wollen ... Ich habe es jedenfalls nur unter XP geprüft, alles andere sind Altlasten, die längst entsorgt werden sollten.
Zum Anfang der Seite
|
|
|
-Werbung-
Softmaker-Office, die preisgünstige Office-Alternative made in Germany!
|
|
|
1. Lösungsmöglichkeit
|
Aktivieren Sie die Eigenschaften des betreffenden Druckers. Unter XP geht das z. B. über Start - Drucker und Faxgeräte. Dann öffnet sich ein Fenster mit allen installierten Druckern. Dort den störrischen Drucker mit der rechten Maustaste anklicken und im Mausmenü auf Eigenschaften gehen.
Der sich öffnende Eigenschaften-Dialog wird je nach Drucker(treiber), Windows-Version und sonstigen vom Umfeld abhängenden Details etwas anders aussehen. Aber es wird wohl immer eine Seite Anschlüsse geben, die Sie bitte aktivieren (diese Dialogseite öffnen, indem Sie den Karteireiter Anschlüsse klicken).
Für den Drucker ist dort vermutlich nur ein Anschluss angekreuzt, z. B. ein Anschluss namens USBxxx bei einem USB-Drucker. Weiter unten in diesem Dialog (unterhalb der Liste der Anschlüsse) gibt es eine Option mit der Bezeichnung Druckerpool aktivieren. Diese ist vermutlich ausgeschaltet, aktivieren Sie sie bitte.
Jetzt können Sie in der Liste der Anschlüsse mehrere Anschlüsse für den Drucker aktivieren.
Lassen Sie den bestehenden Anschluss aktiv und unverändert, damit Windows-Programme, die bisher mit dem Drucker vermutlich problemlos arbeiten, das auch weiterhin tun!
Aktivieren Sie aber zusätzlich einen der LPTx-Anschlüsse, vorzugsweise LPT1 oder LPT2, da diese am wenigsten Probleme machen. Diesem neuen Anschluss sollte bis dahin aber noch kein anderer Drucker zugewiesen sein (die Spalte Drucker rechts ist dort bisher noch leer), und durch die Aktivierung wird der USB-Drucker (oder welchen auch immer Sie ausgewählt haben) nun ebenfalls dort eingetragen.
Bestätigen Sie die Änderungen mit OK und mit etwas Glück können Sie fortan auf LPT1 (oder LPT2) mit Ihrem guten alten DOS-Programm drucken. Ein Neustart von Windows ist dabei meist nicht nötig, besonders bei XP nicht, wenn´s aber nicht auf Anhieb klappt können Sie ggf. ja dennoch mal neu booten.
Zum Anfang der Seite
|
|
|
-Werbung-
Softwahn - Der etwas andere Software-LeiDfaden! Satirisch, bissig, gut!
|
|
|
2. Lösungsmöglichkeit
|
Diese Variante setzt voraus, dass Ihr PC einen Namen hat, unter dem er im Netz als "Server" angesprochen werden kann. Auch wenn Sie garkein Netzwerk bzw. nur diesen einen Computer haben, das ist ganz egal.
2a) einen Server-Namen für den PC, am Beispiel von Windows-XP Klicken Sie mit der rechten Maustaste auf das Symbol Arbeitsplatz auf dem Desktop (meist oben in der linken Ecke des Desktops zu finden). Dann im Mausmenü auf Eigenschaften und im sich öffnenden Dialog die Seite Computername aktivieren. Wenn dort bereits ein Name steht in Form von
Computername: <was auch immer>
ist es ok, dann hat Ihr PC bereits einen Namen. Merken Sie ihn sich. Sonst einfach auf Ändern klicken und der Kiste einen Namen geben (bitte keine Umlaute und keine Leerzeichen, das macht nur Ärger).
Die evtl. Änderung mit OK bestätigen, je nach Windows-Version ist evtl. ein Neustart nötig oder auch nicht.
Als zweites braucht nun auch noch Ihr Drucker einen Namen, unter dem er im Netz freigegeben wird. Dazu müssen Sie in die Eigenschaften des Druckers (siehe 1. Lösung, dort steht wie Sie da hinkommen).
2b) einen Namen für den Drucker, am Beispiel von Windows-XP Diesmal geht´s im Eigenschaften-Dialog des Druckers auf die Seite Freigabe. Dort bitte die Option Drucker freigeben aktivieren und bei Freigabename einen Namen eingeben (bitte keine Umlaute und keine Leerzeichen). Sofern Sie etwas geändert haben mit OK bestätigen, Neustart von Windows ist (im Regelfall) nicht nötig. Wenn dort bereits ein Freigabename drin war auch gut, den dann bitte merken.
Nun haben Sie einen Servernamen (der Name des PCs) und einen Druckernamen (Freigabename für den Drucker im Netzwerk). Damit können Sie den Drucker im Netz über die allgemeine Syntax
\\servername\druckername
ansprechen. "Im Netz" geht aber auch direkt von diesem (evtl. einzigen) PC aus, und nur darauf kommt´s an.
Nun gilt es, diesen Netzwerkdrucker einer logischen Schnittstelle wie LPT1 oder LPT2 zuzuordnen. Das geht über einen DOS-Befehl, den Sie in einem DOS-Fenster (MS-DOS Eingabeaufforderung) eingeben:
net use lpt1 \\servername\druckername
Konkretes Beispiel, mein PC heisst mars und mein Drucker ist als EpsonStylus freigegeben, also heisst es:
net use lpt1 \\mars\epsonstylus
Gross/Kleinschreibung ist dabei egal. Der Befehl kann auch direkt in dBASE eingegeben werden:
! cmd /c net use lpt1 \\servername\druckername
wobei das /c bewirkt, dass sich das DOS-Fenster, das dBASE zur Ausführung des Befehls öffnet, danach gleich wieder schliesst. Sie können stattdessen auch /k verwenden, dann bleibt es danach geöffnet.
Jetzt haben Sie eine LPT1 (oder LPT2) und die kann "ganz normal" für DOS-Drucke verwendet werden. Wieder entfernt wird das ganze mit
net use lpt1 /d
das /d steht für delete, damit wird die im Netz "simulierte" LPTx-Schnittstelle wieder entfernt. Sie können statt /d auch /delete schreiben, das bleibt gleich.
Den Doppelpunkt hinter der Schnittstelle können Sie sich (unter XP zumindest) schenken. Falls es nicht klappt versuchen Sie es einfach noch mal mit Doppelpunkt, also so:
net use lpt1: \\servername\druckername
Zum Anfang der Seite
|
|
|
-Werbung-
dBASE-Daten konvertieren von und nach Excel, Access, HTML und XML!
|
|
|
3. Lösungsmöglichkeit (speziell für dBASE/DOS)
|
Das ist die umständlichste und nur sinnvoll wenn die bisherigen Kniffe nicht funktionieren. Wieder brauchen Sie einen Servernamen und einen im Netz freigegebenen Drucker, bzw. den Freigabenamen des Druckers. Wie das geht steht ja schon bei der 2. Lösung.
Diesmal wird der Druck in dBASE zuerst in eine Datei umgeleitet, z. B. so:
set printer to c:\temp\druck.txt set printer on ... (hier die diversen Druckbefehle)... ? chr ( 12 ) && ein Formfeed (Seitenvorschub) am Ende des Drucks ist nützlich set printer off close printer
Damit haben Sie eine Datei namens druck.txt im Verzeichnis c:\temp\ erstellt. Datei- und Verzeichnisname müssen Sie natürlich entsprechend anpassen, das oben ist ja nur ein Beispiel. Das Verzeichnis muss auch schon existieren!
Die Datei wird danach mit dem DOS-Befehl copy an den Drucker geschickt. Entweder direkt auf DOS mit
copy c:\temp\druck.txt \\servername\druckername /b
oder auch im dBASE-Befehlsfenster mit
! cmd /c copy c:\temp\druck.txt \\servername\druckername /b
Das /c bedeutet wieder, dass sich das DOS-Fenster danach gleich wieder schliesst, mit /k bleibt es offen. Das ist besonders dann nützlich wenn es nicht gleich klappt, dann sehen Sie die evtl. Fehlermeldung von DOS besser.
Das /b dagegen gehört zum copy-Befehl. Es bewirkt ein binäres kopieren, und das ist wichtig wenn auch Steuerzeichen zu drucken sind. Statt am Ende des Befehls kann /b auch direkt nach dem copy stehen, probieren Sie diese Varianten, falls obige nicht gehen (je nach DOS/Windows-Version unterschiedlich):
copy /b c:\temp\druck.txt \\servername\druckername ! cmd /c copy /b c:\temp\druck.txt \\servername\druckername
Evtl. Fehlermeldungen sehen Sie besser, wenn Sie statt /c den Parameter /k verwenden, dann bleibt das DOS-Fenster danach offen (nur relevant, wenn Sie den Befehl im Befehlsfenster von dBASE absetzen).
Zum Anfang der Seite
|
|
|
-Werbung-
NEU! Wellaria- Ihr freundlicher Online-Shop für Fitness und Wellness! NEU!
|
|
|
4. Lösungsmöglichkeit
|
Hilft alles nichts? Vielleicht geht´s dann mit dem Programm PrintFil, das DOS-Drucker für Windows umleiten soll und den Zugriff auf DOS-Anschlüsse unter Windows erlauben soll. Es kostet je nach Version ab ca. 50,-- Euro, Sie können aber eine Testversion kostenlos im Internet laden und vor dem Kauf ausprobieren. Mehr dazu siehe bitte direkt beim Hersteller unter www.printfil.com.
Zum Anfang der Seite
|
|
|
-Werbung-
dBASE programmieren für Windows! Mit dBASE Plus und dBASE Personal!
|
|
|
Sonderfall PDF-Druckertreiber
|
Ein ganz eigenes Thema sind PDF-Druckertreiber für Windows, die unter DOS angesprochen werden sollen. Ich habe das ganze mal unter Windows XP mit Adobe Acrobat Professional 7.0 und mit FinePrint pdfFactory getestet. Hier das Ergebnis:
Die Lösung 1 mit dem Druckerpool von XP funktioniert bei keinem der beiden PDF-Treiber.
Die Lösung 2 mit dem simulierten Netzwerkdrucker funktioniert, aber nur bei pdfFactory, nicht bei Adobe Acrobat 7.0. Damit es funktioniert und man den PDF-Treiber von pdfFactory auch unter MS-DOS als LPTx benutzen kann bin ich so vorgegangen:
- In den Eigenschaften des PDF-Treibers muss dieser als Netzwerk-Drucker freigegeben werden. Das erfolgt auf der Seite Freigabe der Eigenschaften von FinePrint pdfFactory. Dort die Option Drucker freigeben aktivieren und bei Freigabename einen Namen eingeben, z. B. "pdftreiber" oder was auch immer. Bis hierhin ist es mit der Lösung 2 identisch.
- Zusätzlich muss noch auf der Seite Erweitert der Button Druckprozessor geklickt werden. Dort muss der Standarddatentyp von bislang vermutlich RAW auf TEXT umgestellt werden. Nur so funktioniert es (bei mir ...), und deshalb funktioniert es mit Adobe Acrobat 7.0 wohl nicht, denn der Adobe-Treiber stellt sich danach immer wieder von selbst auf RAW zurück.
Jetzt das ganze per DOS-Befehl als Netzwerk-Drucker freigeben. Nehmen wir an Sie haben pdfFactory unter dem Namen pdftreiber im Netzwerk freigegeben und wollen den Treiber als LPT2 benutzen. Ihr PC (Server) hört auf den Namen mars, dann lautet der DOS-Befehl so:
net use lpt2 \\mars\pdftreiber
So konnte ich bei mir über LPT2 unter DOS ein PDF erstellten, auch mit dBASE 5 für DOS:
set printer to lpt2 set printer on ? "Hallo PDF-Treiber" set printer off close printer
Wenn´s nicht gleich klappt und dBASE/DOS z. B. meldet dass es auf LPT2 (oder gar auf nicht vorhandene Laufwerksbuchstaben, diesen Fall hatte ich plötzlich auch mal beim testen) zugreifen kann, dann schliessen Sie das DOS-Fenster mit exit und öffnen es neu.
Hier finden Sie den Hersteller von pdfFactory, Sie können das Programm aber auch gern bei meiner Firma bestellen.
Zum Anfang der Seite
|
|
|
-Werbung-
NEU! Wellaria- Ihr freundlicher Online-Shop für Fitness und Wellness! NEU!
|
|
|
Anmerkungen zu 1 bis 3
|
Für alle bisherigen Lösungen gilt: LPT1 ist vorzuziehen und ist am einfachsten. LPT2 kann oft funktionieren, wird aber schon kritisch wenn Ihr PC keine physikalische Schnittstelle LPT2 hat und eine logische nicht so einfach simuliert werden kann. Ab LPT3 ist nichts mehr genormt und es wird ein Glücksspiel, ob es funktioniert oder nicht. Überhaupt, Sie wissen ja, es kann alles funktionieren, es kann aber auch alles schief gehen, Windows eben ...
Je nach Version Ihres Windows XP und dem Umfeld (Treiber, Systemerweiterungen etc.) kann es auch noch helfen (oder gar nötig sein), dass Sie die jeweilige LPTx-Schnittstelle deaktivieren, bevor Sie sie per net use ... umleiten können. Dazu im Gerätemanager von XP (Arbeitsplatz - Eigenschaften - Hardware - Gerätemanager) unter Anschlüsse den betreffenden LPTx-Anschluss auswählen, rechts klicken, auf Eigenschaften und auf der Dialogseite Allgemein ganz unten die Option Gerät nicht verwenden auswählen. Tun Sie das aber nur, wenn es ohne nicht funktioniert. Bei mir geht´s auch so und grundlos deaktivieren sollten Sie den Anschluss für XP dann besser nicht.
Zum Anfang der Seite
|
|
|
-Werbung-
Softwahn - Der etwas andere Software-LeiDfaden! Satirisch, bissig, gut!
|
|
|
Download der Lösung
|
Komplette Lösung als PDF zum Download
Übrigens, am 21. Dezember 2012 geht mal wieder die Welt unter ... (-W-)
Zum Anfang der Seite
|
|
|
-Werbung-
NEU! Wellaria- Ihr freundlicher Online-Shop für Fitness und Wellness! NEU!
|
|
|

|
|
|
(C) 2006 - Alle Rechte vorbehalten |
|
Diese Seite drucken
|