Druckertreiber verschluckt Linien
-
Hallo,
ich schreibe die Rohdaten unskaliert weg und da sind die Linien
auch nicht dabei. Es verschwinden alle Linien, egal welcher Dicke,
allerdings nur die, die von WinWord gezeichnet wurden. Eingelagerte
Linien als Bitmaps erscheinen.Ich hätte erwartet, dass das Zeichnen der Linien in OEMLineTo
passieren sollte, ader da kommt der Druck nie an.Da ich nicht weiß, welchen Code ich hier präsentieren soll mal den vermeintlich wichtigen:
BOOL APIENTRY OEMLineTo( SURFOBJ *psoDest, CLIPOBJ *pco, BRUSHOBJ *pbo, LONG x1, LONG y1, LONG x2, LONG y2, RECTL *prclBounds, MIX mix ) { PDEVOBJ pdevobj = NULL; POEMPDEV poempdev = NULL; BOOL bResult = TRUE; char acText[256] = { 0 }; StartTrace( "OEMLineTo" ); if( psoDest ) { if( pdevobj = (PDEVOBJ)psoDest->dhpdev ) { if( poempdev = (POEMPDEV)pdevobj->pdevOEM ) { START_BUFFER_REPLACEMENT( psoDest ); bResult = ((PFN_DrvLineTo)(poempdev->pfnUnidrv[UD_DrvLineTo])) ( psoDest, pco, pbo, x1, y1, x2, y2, prclBounds, mix ); END_BUFFER_REPLACEMENT( psoDest, ( y1 > y2 ? y2 : y1 ), ( y1 > y2 ? y1 : y2 ) ); } else StartTrace( "OEMLineTo poempdev = NULL" ); } else StartTrace( "OEMLineTo pdevobj = NULL" ); } else StartTrace( "OEMLineTo psoDest = NULL" ); return bResult; }Gruß Kai
-
Manchmal werden Linien auch mit ExTextOut gezeichnet. Man benutzt einfach den Effekt, dass der Hintergrund mit verändert wird.
-
Martin Richter schrieb:
Manchmal werden Linien auch mit ExTextOut gezeichnet. Man benutzt einfach den Effekt, dass der Hintergrund mit verändert wird.
Wenn ich es richtig verstanden habe werden die OEM - Funktionen vom Spooler direkt angesprochen, und der treiber macht dann seine Arbeit. Deshalb wundere ich mich halt, warum nie in die Funktion OEMLineTo gesprungen wird. Zu ExTextOut bzw. ExtTextOut konnte ich im DDK nichts finden!

-
1. ExtTexOut
http://msdn.microsoft.com/en-us/library/dd162713(VS.85).aspx
2. In der MFC gibt es Funktionen, die diese Funktion benutzt um Linien zu zeichen, wie dies auf dem Treiber umgesetzt wird, kann ich Dir nicht sagen.Siehe CDC::FillSolidRect, CDC::Draw3dRect etc.
-
Danke für die Info! Leider muss ich erst mal die Stelle
identifizieren, die die Linie zeichnen soll im Treiber.
Dann mag es vielleicht helfen! ????
-
Hallo,
einen Schritt weiter bin ich. Die Linien kommen nur nicht, wenn sie
schwarz sind. Wenn ich zum Beispiel die gleichen Linien in WinWord
blau mache, dann werden sie gedruckt. Über dieses Blau wollte ich
die Codestelle eingrenzen, die hier evtl. was falsch macht,
allerdings finde ich keine Stekke im DDI-Hook, wo dieses Blau
verwendet wird.Wieso klappt es mit blau und nicht mit schwarz und wo könnte der
Fehler liegen?Gruß und Dank
Kai
-
-
LiGERWooD schrieb:
Vielleicht bin ich zu trottelig, aber ich bin derjenige, der den neuen Treiber liefern muss und weiss nicht weiter???

-
BlackMizi schrieb:
LiGERWooD schrieb:
Vielleicht bin ich zu trottelig, aber ich bin derjenige, der den neuen Treiber liefern muss und weiss nicht weiter???

Ich verstähe eigentlich nicht was du da machst. Weil für einen Drucker gibt es vom Hersteller auch einen Treiber. Und gerade für Firmen gibt es leichte Treiber ohne viel unötige Tools. Dafür aber meistens mehr Konfigurationsmöglichkeiten zu der Formatierung. Oder ist es eine Übungsaufageb? Gegebenfalls beim Hersteller vorbeischauen. Aber normalerweise ist es am einfachsten die Schnitstelle zwischen Druckauftrag und dem Maschienen-Drucker-Treiber zu verwenden um Speziele Formatierungen als permaneten standart ein zu richten. Also jeder Dieser Drucker Treiber für Windows hat eine standart ansprech Schnistelle für Windows. Musst nur mal googeln.
In den Maschienen-Treiber die formatierung um zu setzten ist eigentlich blödsinn!
-
Hallo,
LiGERWooD schrieb:
Ich verstehe eigentlich nicht was du da machst.
ich habe den Auftrag einen Fehler in einem hauseigenen Druckertreiber zu finden. Dieser Druckertreiber klemmt sich in den DDI Hook und leitet da entsprechend dem Beispiel des DDK alle Infos an das API weiter. Dazischen werden die Daten aus dem Spooler gesammelt und zu einem Tiff zusammengebastelt. Dieses Tiff wird am Ende gespreichert und es wird ein Job für ein nachgelagertes System erzeugt.
Meine Probleme rühren daher, dass der Teiber NICHT von mir ist und der Kollege, der ihn mal geschrieben hat, nicht mehr verfügbar ist. Ich weiß: Ein guter Einstieg!

LiGERWooD schrieb:
Weil für einen Drucker gibt es vom Hersteller auch einen Treiber. Und gerade für Firmen gibt es leichte Treiber ohne viel unötige Tools. Dafür aber meistens mehr Konfigurationsmöglichkeiten zu der Formatierung. Oder ist es eine Übungsaufageb? Gegebenfalls beim Hersteller vorbeischauen. Aber normalerweise ist es am einfachsten die Schnitstelle zwischen Druckauftrag und dem Maschienen-Drucker-Treiber zu verwenden um Speziele Formatierungen als permaneten stan**** ein zu richten. Also jeder Dieser Drucker Treiber für Windows hat eine stan**** ansprech Schnistelle für Windows. Musst nur mal googeln.
In den Maschienen-Treiber die formatierung um zu setzten ist eigentlich blödsinn!Ich formatiere nichts, und die Linien kommen auch raus, wenn ich sie blau mache. Mache ich mitten drin eine der blauen Linien schwarz, dann kommt genau diese Linie nicht mehr raus.
Ich habe leider keine Idee mehr. Was habe ich versucht: Im Code alle Brushes und RGB abgefangen auf den Wert 255 = Blau, damit ich die Stelle eingrenzern kann, wo was mit Farbe passiert, nur leider kommt es nicht zum Erkennen des Blaus. Also tappe ich weiter im Dunkeln!

Gruß Kai