Drucken schwer gemacht (VB6) (laaaang)

Hallo zusammen.

Ich bin momentan damit zugange, eine Prozedur zu programmieren, die ein existierendes, vorgegebenes Papier-Formular schreibt. Dies wird dann ausgedruckt und soll hundertprozentig genau so aussehen wie ein Original.
Auch das Original wird nur auf einem Drucker gedruckt, es handelt sich nicht um irgendein Zweckform-Formular, das mit Daten gefüllt werden soll, sondern um einen Ausdruck auf weißem DIN A4-Papier, auf dem auch Linien dargestellt werden.

Wer kennt sich nun mit den Tücken eines Druckers aus?

Vorerst eine paar grundsätzliche Tatsachen:
-HP LaserJet 1100
-Bei jedem Ausdruck befindet sich nur ein Bogen Papier im Schacht

-Printer.PaperSize = vbPRPSA4
-Printer.PrintQuality = 600
-Printer.ScaleMode = vbMillimeters
-Printer.Orientation = vbPRORPortrait
-Printer.ColorMode = vbPRCMMonochrome
-Printer.DrawWidth = 1
-Printer.DrawMode = vbBlackness
-Printer.DrawStyle = vbSolid
-Printer.Font.Name = „Arial“
-Printer.Font.Bold = False
-Printer.Font.Italic = False
-Printer.Font.Strikethrough = False
-Printer.Font.Underline = False

-Keine relativen Koordinaten
-Alle Koordinaten sind absolut
-Keine Koordinate wird durch eine Variable repräsentiert
-Bei der Druck-Qualität von 600 ergibt sich ein Raster von 0.04233 mm
-Ich verwende minimal 0,1 mm bei den Koordinaten-Angaben.
-Die Linien werden in Printer.DrawWidth = 6 und 8 gedruckt
-Nach dem Druck-Befehl für die Linien setze ich Printer.DrawWidth = 1

Hier kommt das Problem
So, nun habe ich mal so eine Seite ausgedruckt. Ich habe den Rand abgeschnitten und die Seite dann über eine Original-Seite gelegt.
Nach Vergleich der Linien, die ja hervorragend für die Ausrichtung geeignet sind, mußte ich noch ein paar Linien um 0,1 bis 0,2 mm nach oben positionieren. Also habe ich die Koordinaten entsprechend verändert und dann erneut eine Seite gedruckt. Dann kam das pure Entsetzen darüber, das diese Linien nicht dort erschienen, wo es geplant war. Im Ergebnis hat sich plötzlich alles nach unten verschoben. Nicht nur die Linien, sondern auch die Texte und das Ganze, oben beginnend, mit steigender Tendenz, so daß ich letztendlich einen Unterschied von mehr als 2 Millimetern gegenüber dem vorherigen Ausdruck messen konnte.

Hier kommt nun endlich meine Frage:
Wer kann mir sagen, warum sich die Präzisions-Ausrichtung nicht bewerkstelligen läßt?

Vielen Dank im Vorraus
Carsten.

Hallo,

also dein beschriebenes Problem ist nicht wirklich trivial zu loesen.
Du beschreibst leider nicht wie du den Drucker nun wirklich ansteuerst, denn aus meiner Erfahrung kann ich sagen, das brauchbare ( sprich exakte) Ergebnisse nur ueber die API-Funktionen ( DrawLine, DrawText etc.) erziehlt werden. Mit der Variante Druckeroptionen einstellen und dann einen Bericht darauf ausgeben kann man meiner Meinung nach nicht im Breicht von ±1.0 mm operieren. Das Problem wird mit Sicherheit nicht vereinfacht, wenn man keinen Einfluss darauf hat, was nach dem Druckbefehl in der VB-Schnittstelle bzw. im Druckertreiber noch alles passiert. Auserdem hat die Druckeraufloesung (600dpi) nur unmittelbar mit der Ausloesung des Devicecontextes zu tun, auf dem das System den Druck vorbereitet bevor es dem Druckertreiber uebergeben wird.

Tschau
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Carsten,

Hier kommt nun endlich meine Frage:
Wer kann mir sagen, warum sich die Präzisions-Ausrichtung
nicht bewerkstelligen läßt?

Ein Teil des Fehlers ist auch im Drucker selbst zu suchen.

Einerseits liegt das an der Mechanik, welche das Blatt transportiert, je nach Papier ist da etwas unterschiedlicher Schlupf.

Andererseits, wird durch die Blattkante ein Signal ausgelöst, welches die CPU im Drucker dann als Position für den Druck benutzt. Je nachdem wie lange die CPU benötigt um dieses Signal zu erkennen ist das Bild entsprechend nach unten verschoben. Zu verzögerungen kommt es, wenn die CPU gerade noch etwas anders zu tun hat, wie z.B. Daten zu empfangen.

Den ANteil des Druckers, kannst du grob ermitteln, wenn du mehrere identische Seiten druckst und dann übereinander legst. Dabei kann es auch sein, dass es nur einzelne Ausreisser gibt.

MfG Peter(TOO)

@ Peter und den anderen Peter
Hallo Peter und auch Peter.

Du beschreibst leider nicht wie du den Drucker nun wirklich
ansteuerst

Die Ansteuerung erfolgt nach dem folgenden Prinzip:

Printer.CurrentX = 16.3
Printer.CurrentY = 100.4
Printer.Print "Irgendein Text"
 
Printer.CurrentX = 186
Printer.CurrentY = 153.8
Printer.Print "Ein anderer Text"

Die Skalierung in Millimeter und die Positionierung in 1/10 Millimeter ist tatsächlich kein Problem. Die Texte konnte ich damit exakt ausrichten.

Das Formular besteht grob gesehen aus drei Tabellen. Daher hatte ich die Prozedur mit dem Drucken der Linien für die erste Tabelle begonnen. Um die gleiche Linien-Dicke wie im Original zu erreichen, mußte ich mit DrawWidth = 6 arbeiten. Diesen Wert hatte ich in den ersten Versuchen nicht auf 1 zurückgesetzt.
Scheinbar (!) ist es aber so, daß DrawWidth nach dem Aufruf der Line-Methode auf 1 gesetzt werden muß, um die Koordinaten nachfolgend gedruckter Text nicht zu beeinflussen. Jedenfalls habe ich mal das Drucken aller Linien ans Ende der Prozedur gestellt und dann funktionierte das Ganze schon zu 99 Prozent. Auch eine Korrektur der Koordinaten um 1/10 Millimeter hatte plötzlich nicht mehr diese irrsinnigen Verschiebungen zur Folge.
Klingt aber trotzdem ziemlich unlogisch, findet ihr nicht auch?

Viele Grüße
Carsten