dBASE DOS mit USB-Drucker und PDF-Treiber

Aufgrund der vielen Anfragen zu dieser Problemstellung geht es hier etwas ausführlicher um die alten DOS-Versionen von dBASE. Allerdings betrifft das Problem nicht nur dBASE, sondern grundsätzlich alle DOS-Programme und deren zumeist problematische Anbindung an moderne USB-Drucker oder auch an Fax- und PDF-Druckertreiber unter Windows.

Alle gezeigten Lösungen wurden mit der DOS-Version dBASE 5, Windows XP Professional und einem Epson Stylus Scan 2500 USB-Drucker getestet. Bei anderen DOS-Programmen bzw. anderen USB-Druckern sollten die gezeigten Lösungen in vielen Fällen auch so oder ähnlich funktionieren. Eine 100%ige Garantie für alle Fälle kann natürlich nicht gegeben werden.

1. LÖSUNGSWEG: DRUCKERPOOL

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

Der sich öffnende Eigenschaften-Dialog wird je nach Drucker-Hersteller, Treiber-Version und Windows-Version anders aussehen. Doch es wird wohl meist eine Seite Anschlüsse geben. Für Ihren 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 Option ist meist ausgeschaltet, aktivieren Sie sie bitte.

Jetzt können Sie in der Liste der Anschlüsse mehrere Anschlüsse auf einmal für den Drucker aktivieren. Lassen Sie den bestehenden Anschluss aktiv und unverändert, damit Windows-Programme, die bisher mit dem Drucker problemlos arbeiten, das auch weiterhin tun. Aktivieren Sie 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). Durch diese zusätzliche Aktivierung wird der Drucker 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, doch wenn es nicht auf Anhieb klappt können Sie ggf. dennoch mal neu booten, denn Sie wissen ja: ein Neustart löst 99% aller Windows-Probleme …

2. LÖSUNGSWEG: NETZWERK-DRUCKER

Dieser Weg setzt voraus, dass Ihr PC einen Namen hat. Damit meine ich keinen Kosenamen wie “Blechkiste” oder “Puterchen”, sondern den Namen unter dem er im Netz als “Server” angesprochen werden kann. Das gilt auch dann, wenn Sie garkein Netzwerk bzw. nur diesen einen Computer haben. Unter Windows XP finden Sie den Namen so heraus:

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, z. B. in Form von

Computername: irgendwas

ist das schon mal sehr gut, dann hat Ihr PC bereits einen Namen. Merken Sie ihn sich. Sonst einfach auf Ändern klicken und der Kiste einen Namen geben. Wer mich kennt weiss was jetzt kommt: bitte keine Umlaute und keine Leerzeichen verwenden, das macht nur Ärger. Die Änderung mit OK bestätigen, je nach Windows-Version ist danach evtl. ein Neustart nötig.

Als zweites braucht auch Ihr Drucker einen Namen, unter dem er im Netz freigegeben wird. Dazu müssen Sie nochmal in die Eigenschaften des Druckers, da waren Sie ja schon beim 1. Lösungsweg oben. Diesmal geht es auf die Seite Freigabe. Dort die Option Drucker freigebenaktivieren und bei Freigabename einen Namen eingeben (auch wenn´s nervt, es ist wichtig: bitte keine Umlaute und keine Leerzeichen). Mit OK bestätigen, Neustart von Windows ist im Regelfall nicht nötig, bzw. wenn doch lassen Sie Windows seinen Willen und booten eben neu, das passiert ja eh so selten …

Nun haben Sie einen Servernamen (der Name des PCs) und einen Druckernamen (Name des Druckers). Damit können Sie den Drucker im Netz (und eben auch an Ihrem eigenen lokalen PC!) über die allgemeine Syntax

\\servername\druckername

ansprechen. “Im Netz” ist bei Windows also auch direkt an diesem (evtl. einzigen) PC!

Nun gilt es, diesen Netzwerkdrucker einer logischen Schnittstelle wie LPT1 oder LPT2zuzuordnen. 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 egal. Der Befehl kann übrigens auch 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. Eigentlich ganz einfach, oder? Wieder entfernt wird das Ganze übrigens 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, wenn Sie gern tippen.

Übrigens, den Doppelpunkt hinter der Schnittstelle können Sie sich meistens schenken. Zumindest unter XP und in den von mir geprüften Fällen. Falls es bei Ihnen nicht klappt versuchen Sie es doch mal mit Doppelpunkt, also so:

net use lpt1: \\servername\druckername

3. LÖSUNGSWEG: UMWEG ÜBER DATEI

Das ist die bisher umständlichste Lösung und nur sinnvoll wenn die bisherigen Kniffe nicht funktionieren. Wieder brauchen Sie einen Servernamen und einen im Netzwerk freigegebenen Drucker, bzw. den Freigabenamen des Druckers (siehe 2. Lösungsweg).

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 können Sie beliebig anpassen, das Verzeichnis muss natürlich existieren. Und bitte möglichst keine Umlaute, Leerzeichen oder Sonderzeichen verwenden.

Die so erstellte Datei wird danach mit dem DOS-Befehl copy an den Drucker geschickt. Entweder direkt auf der DOS-Ebene mit

copy c:\temp\druck.txt \\servername\druckername /b

oder gleich 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 am Ende gehört zum copy-Befehl. Es bewirkt ein binäres kopieren, und das ist sehr wichtig, vorallem wenn auch Steuerbefehle zu drucken sind. Statt am Ende des Befehls kann /bauch direkt nach dem copy stehen, probieren Sie diese Varianten, falls obige nicht funktioniert (je nach DOS bzw. Windows-Version kann das unterschiedlich sein):

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. Jedoch ist /k nur relevant, wenn Sie den Befehl im Befehlsfenster von dBASE absetzen und nicht in der Eingabeaufforderung.

4. LÖSUNGSWEG: PRINTFIL

Hilft alles nichts? Führte Sie keiner der oben vorgeschlagenen Lösungswege zum Ziel? Sind Sie mit Ihren Nerven am Ende? Das ist selten, kann aber vorkommen. Vielleicht geht es dann mit dem Programm Printfil, das Druckausgaben von DOS-Programmen abfängt und an einen beliebigen Windows-Drucker weiterleitet. Es ist günstig, es funktioniert auch, allerdings ist es teilweise etwas umständlich über Textdateien zu konfigurieren. Für hartgesottene DOS-Fans ist sowas aber sicher kein Problem. Ich habe es erfolgreich unter XP mit dBASE getestet, und Sie können auch erstmal eine Testversion laden und es in Ruhe ausprobieren. Alles weitere dazu direkt beim Hersteller von » Printfil.

SONDERFALL PDF-DRUCKERTREIBER

Ein ganz eigenes Thema sind PDF-Druckertreiber für Windows, die unter DOS angesprochen werden sollen. Ich habe es unter Windows XP mit den Programmen Adobe Acrobat Professional 7.0 und mit FinePrint pdfFactory getestet. Hier das Ergebnis:

Lösung 1 (Druckerpool) funktioniert unter XP bei keinem der beiden PDF-Treiber! Sorry.

Lösung 2 (Netzwerk-Drucker) funktioniert, aber nur bei pdfFactory, nicht bei Adobe Acrobat. Und selbst bei pdfFactory war noch etwas zusätzliches “Feintuning” nötig:

Zuerst musste in den Eigenschaften des PDF-Treibers dieser im Netzwerk 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. Also wie bei der 2. Lösung beschrieben.

Zusätzlich musste dann aber auch noch auf der Seite Erweitert der Button Druckprozessorgeklickt werden. Dort musste der Standarddatentyp von anfangs RAW auf TEXT umgestellt werden. Nur so funktioniert es (bei mir), und deshalb funktioniert es mit Adobe Acrobat wohl nicht, denn der Adobe-Treiber stellt sich immer wieder von selbst auf RAW zurück.

Lösung 3 (Umweg über Datei) brachte dasselbe wie beim Netzwerk-Drucker ohne Datei.

Lösung 4 (Printfil) funktioniert mit pdfFactory nach dem oben beschriebenem Feintuning.

Den PDF-Druckertreiber pdfFactory erhalten Sie » hier, dort gibt es auch eine Testversion. Ich nutze pdfFactory seit vielen Jahren und hatte damit noch nie Probleme. Sehr schön ist auch, dass man damit mehrere Druckaufträge sammeln und in einer PDF-Datei speichern kann. Ebenso nützlich ist übrigens finePrint vom selben Hersteller.

SCHLUSSBEMERKUNGEN

Für alle bisherigen Lösungen gilt: LPT1 ist vorzuziehen und funktioniert am ehesten. Bei LPT2kann oft funktionieren, das wird aber schon kritisch wenn Ihr PC keine physikalische Schnittstelle LPT2 hat und eine logische deshalb nicht so leicht simuliert werden kann. Und ab LPT3 ist nichts mehr genormt und es wird ein Glücksspiel, ob es funktioniert oder nicht.

In seltenen Fällen kann es auch noch helfen (oder gar nötig sein), dass Sie die jeweilige LPTx-Schnittstelle erst unter Windows deaktivieren, bevor Sie sie per net use … umleiten. 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. Bei mir war das nicht nötig, bei einem Kunden ging es dagegen erst dann. Beide male lief Windows XP und warum diese zusätzliche “Kleinigkeit” nötig war konnte nie abschliessend geklärt werden. Egal, am Ende hat es funktioniert, nur das zählt.

(Stand dieser Info: 2011)