Ich möchte eine Webseite (d. h. TWebBrowser
) in einen Gerätekontext rendern. Ich möchte die Layout-Engine von Internet Explorer verwenden, um Inhalt in einen Gerätekontext (d. h. Metadatei, PDF-Metadatei) zu rendern.
Ab Internet Explorer 9 wird die IHTMLElementRender
-Schnittstelle nicht mehr unterstützt :
IHTMLElementRender-Schnittstelle
Verwenden Sie diese Schnittstelle, um den Inhalt eines Elements auf einen bestimmten Gerätekontext, normalerweise einen Drucker, zu zeichnen.
Mitglieder
Die IHTMLElementRender -Schnittstelle erbt von der IUnknown Schnittstelle, aber keine zusätzlichen Mitglieder.
Bis zu dem Punkt, dass sie nicht mehr erwähnen, dass die Methode DrawToDC existiert sogar:
IHTMLElementRender :: DrawToDC-Methode
Veraltet. Zeichnet den Inhalt des Elements in den angegebenen Gerätekontext.
Syntax
%Vor%Parameter
- hDC
[in] Ein HDC , der das Gerät angibt, zu dem es erstellt werden soll, normalerweise ein Drucker.Rückgabewert
Gibt bei Erfolg S_OK oder andernfalls einen Fehlerwert zurück.
Anmerkungen
Ab Windows Internet Explorer 9 ist diese Methode veraltet und sollte nicht verwendet werden.
Bei einigen Druckern kann das Ausführen von IHTMLElementRender :: DrawToDC zu Problemen führen. Sie können sicherstellen, dass IHTMLElementRender :: DrawToDC ordnungsgemäß auf allen Druckern funktioniert, indem Sie IHTMLElementRender :: SetDocumentPrinter -Methode zuerst und übergibt dann den geänderten Gerätekontext an IHTMLElementRender :: DrawToDC .
Hinweis : Ich zitiere die gesamte Dokumentation, damit sie immer noch gefunden werden kann, wenn Microsoft sie endgültig aus MSDN entfernt. Zusammen mit der Deklaration der Schnittstelle:
%Vor%IViewObject
Ich habe versucht, die IViewObject
(zB Wie HTML Element ohne Webbrowser zu rendern? ):
Das Problem mit diesem Code besteht darin, dass nur der sichtbare Bereich des Browsers gerendert wird (d. h. ohne gescrollten Inhalt):
Ich muss die gesamte Webseite rendern (z. B. zum Drucken).
Ich habe versucht, den Aspekt zu ändern von DVASPECT_CONTENT
(wie dieses Beispiel ), DVASPECT_DOCPRINT
:
DVASPECT_DOCPRINT
Stellt eine Darstellung des Objekts auf dem Bildschirm bereit, als ob es mit dem Befehl Drucken aus dem Menü Datei auf einen Drucker gedruckt wurde. Die beschriebenen Daten können eine Folge von Seiten darstellen.
Mit dem gleichen Ergebnis; anstatt die Seite zu rendern, wird nur der sichtbare Teil gerendert:
Wie kann ich die IE9-Rendering-Engine zum Rendern auffordern?
Ich habe auch verschiedene Indizes zusammen mit DVASPECT_DOCPRINT
verwendet. Obwohl IViewObject
nicht dokumentiert ist, drucken Sie vielleicht verschiedene "Seiten" :
Aber der WebBrowser kümmert sich nicht darum, was der Index ist; nur das Rendern des aktuellen View
(was bei Verwendung von IViewObject
wahrscheinlich Sinn macht).
Wie rende ich einen Browser in einen Gerätekontext?
Hinweis : Die Frage ist mit delphi
markiert, aber in dieser Frage gibt es nichts, was delphi spezifisch ist.
Update : Ich habe auch andere Kombinationen von Aspekt und Index ausprobiert:
%Vor%Mit IViewObject können Sie einen Screenshot des aktuellen Ansichtsfensters erstellen. Ich benutze einen Trick, um einen Screenshot einer Webseite (ohne Rahmen) oder ein Rahmendokument zu erstellen.
Beachten Sie, dass Sie darauf achten sollten, wenn das Dokument sehr groß ist.
Tags und Links rendering delphi winapi internet-explorer-9 delphi-5