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


  • Mod

    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! 😞


  • Mod

    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:

    http://support.microsoft.com/kb/502021/de

    Vielleicht bin ich zu trottelig, aber ich bin derjenige, der den neuen Treiber liefern muss und weiss nicht weiter??? 😕



  • BlackMizi schrieb:

    LiGERWooD schrieb:

    http://support.microsoft.com/kb/502021/de

    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


Anmelden zum Antworten