Preview von einer HTML Seite erzeugen?
-
Hi,
ich möchte gern von HTML Code Previews erzeugen.
Mein gedanke war den Code in ein DHTML Edit Control zu laden, da der Code relative Bildquellen hat und man meines wissens nach beim WebBrowser kein Basispfad angeben kann. Oder kennt einer von euch eine Möglichkeit?
Und davon dann irgendwie ein Image erzeugen.
Das ganze sollte aber unsichtbar ablaufen deshalb ist es wohl nicht mit einem einfachen "Screenshot" getan denke ich.
Hat jemand eine Idee?
Gruß SkySurfer
-
SkySurfer schrieb:
meines wissens nach beim WebBrowser kein Basispfad angeben kann. Oder kennt einer von euch eine Möglichkeit?
Wie kommst Du zu dem Wissen das es das Browsercontrol nicht kann?
void MainFormLoad(object sender, System.EventArgs e) { object o = null; axWebBrowser1.Navigate("C:\\AllyKasse.html", ref o, ref o, ref o, ref o); }
funktioniert bei mir ganz toll!
Ich kann lokale Pfade auf meiner Kiste als auch Pfade draussen erreichen.mfg sclearscreen
-
Da ich dein problem für nützlich erachte habe ich mich hingesetzt und mal etwas gebastelt
void Button2Click(object sender, System.EventArgs e) { object o = null; object uri = textBox1.Text; axWebBrowser1.Navigate2(ref uri, ref o, ref o, ref o, ref o); } private const int SRCCOPY = 0x00CC0020; [DllImport("gdi32.dll")] static extern bool BitBlt(IntPtr hObject, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hObjectSource, int nXSrc, int nYSrc, int dwRop); private void ScreenShootFromAxWebBrowser() // darüber dein Preview { Image img = null; Graphics srcGraphics = this.axWebBrowser1.CreateGraphics(); img = new Bitmap(axWebBrowser1.ClientSize.Width, axWebBrowser1.ClientSize.Height); Graphics destGraphics = Graphics.FromImage(img); IntPtr hdcDest = destGraphics.GetHdc(); IntPtr hdcSrc = srcGraphics.GetHdc(); BitBlt( hdcDest, 0, 0, this.axWebBrowser1.ClientRectangle.Width, this.axWebBrowser1.ClientRectangle.Height, hdcSrc, 0, 0, SRCCOPY ); srcGraphics.ReleaseHdc(hdcSrc); destGraphics.ReleaseHdc(hdcDest); img.Save("c:\\test.jpg", System.Drawing.Imaging.ImageFormat.Jpeg); }
funktioniert und ist getestet!
Gruss sclearscreen
-
oh was vergessen DllImport funktioniert nur wenn Du den Namensraum:
System.Runtime.InteropServices
reingebrauchen tust über eben ein using .... am Anfang.
So das wars dazu von meiner Seite.
Grüsse
-
@sclearscreen: warum arbeitest du mit interop? beim .net framework gibts doch schon ein webbrowser control
-
Dauercoder schrieb:
@sclearscreen: warum arbeitest du mit interop? beim .net framework gibts doch schon ein webbrowser control
Ich kenne jetzt nicht deine Erfahrungen mit interop, wie Du zu sagen pflegst.
Was meinst Du genau damit? Wunderst Du dich warum ich den Namensraum
System.Runtime.InteropServices eingebunden habe? Brauche ich um einen DllImport für umanaged API-Aufruf BitBlt machen zu können sieht man doch!
Sonst könnte ich den Clientbereich vom eingebettet Internetexplorer (Browser Control) nicht in eine Bilddatei bringen. Der gute Mann will ja schliesslich ein Preview von seiner HTML-Seite.Der hat doch geschrieben seines wissens funktioniert es nicht mit dem Browser control. Und oben ist eine Lösung die genau das löst und wiederlegt das es nicht geht.
Fakten:
-das Browsercontrol was Du ansprichst basiert defakto auf Interoperabilität
-die Instanz axWebBrowser1 ist besagtes Browsercontrol was ich per
Drag&Drop auf mein Formular gezogen habe (aus der Toolbox was nat. nur geht
wenn man es als Element dieser hinzugefügt hat)Gruss sclearscreen
-
Und dran denken ich vermute Du nutzt schon .NET 2.0 ich arbeite noch auf 1.1
Wenn das Browser Control bei Dir vielleicht schon in der Toolbox drin war nach der Installation so musst ich es erst bei meiner Standardversion händisch in die Toolbox bringen. *hmmm langer Satz ... entschuldige*
Nur weil es als Control schon vielleicht drin war im 2.0 heisst das nicht nur weil es sich wie ein normales GUI.Control anfüllt hat es nichts mit Interoperabilität zu tun! Ganz im Gegenteil Du benutzt quasi die Funktionalität
eines Browser über eine COM-Wrapperklasse in deinem Formular. Und somit wird eine andere Anwendung steuerbar zu einer Marionette. Das ist Interoperabilität.Geht auch mit dem Mozilla und anderem Russ.
mfg sclearscreen
-
okay hab ich wohl übersehen