IE-Explorer ActiveX, Metafilezugriff bzw. freie Ausgabeskalierung



  • Hallo,

    vielleicht hat einer von euch ja schon einmal die ActiveX Schnittstelle des IE intensiver benutzt und ein paar Stichwörter wonach ich suchen kann.

    Konkret geht es darum ein HTML das im Control gerendert wird auslesen zu können und möglichst ohne große Informationsverluste auf eine einzelne Seite die als Metafile zugreifbar ist darzustellen (Hintergrund: Alle Ausgaben, HTML eingeschlossen, möglichst über eine Druckansicht; zudem soll eine Komplettskalierung möglich sein).

    Was ich bereits zum Laufen bekommen habe ist eine Notlösung (Ich kopiere den Inhalt in Teilschritten in ein ebenso großes Bild und skaliere dies entsprechend) was aber zwangsweise zu einem mehr oder weniger großen Darstellungsverlust führt. Nun ist die Frage ob man irgendwie direkt auf die gerenderte Seite als (vektorbasierten) Metafile kommt, oder zumindestens eine andere (bessere) Form der Skalierung möglich ist.

    cu André



  • Suche nach IHTMLElementRenderer oder OleDraw.

    HRESULT ElementGetBitmap(IDispatch *object, HBITMAP *ppv)
    {
    	IHTMLElementRender *renderer;
    	IHTMLElement       *element;
    
    	HRESULT hr = E_FAIL;
    
    	if (!object->QueryInterface(IID_IHTMLElement, &element))
    	{
    		if (!object->QueryInterface(IID_IHTMLElementRender, &renderer))
    		{
    			// element.border and .style.border should be removed
    			RECT rc;
    
    			rc.left = 0;
    			rc.top = 0;
    			element->get_offsetWidth(&rc.right);
    			element->get_offsetHeight(&rc.bottom);
    
    			HDC     hdc = GetDC(0);
    			HDC     cdc = CreateCompatibleDC(hdc);
    			HBITMAP hbm = CreateCompatibleBitmap(hdc, rc.right, rc.bottom);
    
    			hbm  = SelectObject(cdc, hbm);
    			FillRect(cdc, &rc, GetStockObject(WHITE_BRUSH));
    			hr   = renderer->DrawToDC(cdc);
    			hbm  = SelectObject(cdc, hbm);
    			*ppv = hbm;
    
    			DeleteDC(cdc);
    			ReleaseDC(0, hdc);
    
    			if (hr < 0) DeleteObject(hbm);
    			renderer->Release();
    		}
    		element->Release();
    	}
    	return hr;
    }
    

Anmelden zum Antworten