मैं अपने सी # एप्लिकेशन में ब्राउज़र घटक को एकीकृत करने के लिए WebKit.NET का उपयोग कर रहा हूं। समस्या यह है कि मैं केवल स्क्रीनशॉट के साथ ब्राउज़र विंडो में दृश्य भाग को कैप्चर कर सकता हूं। क्या पूरे पृष्ठ के स्क्रीनशॉट को कैप्चर करने का कोई तरीका है?सी # और WebKit.NET के साथ एक पूर्ण वेबसाइट स्क्रीनशॉट कैप्चर कैसे करें?
उत्तर
लगता है कि यह एक तरह से संभव NativeMethods.SendMessage का उपयोग करना है, हालांकि इस संदेश कतार अप पेंच कर सकते हैं, तो आप http://cutycapt.sourceforge.net/ या शायद http://iecapt.sourceforge.net/ या http://labs.awesomium.com/capturing-web-pages-with-c-net/ इस्तेमाल कर सकते हैं?
मैं इसके बजाय WebBrowser का उपयोग करता हूं; ScrollBarsEnabled = false
मुझे पूरा पृष्ठ कैप्चर करने दें।
protected override void Render(HtmlTextWriter writer)
{
StringBuilder builder = new StringBuilder();
HtmlTextWriter htw = new HtmlTextWriter(new StringWriter(builder));
base.Render(htw);
string html = builder.ToString();
_Generate(html);
}
private void _Generate(string html)
{
var browser = new WebBrowser { ScrollBarsEnabled = false };
DisplayHtml(html, browser);
browser.DocumentCompleted += WebBrowser_DocumentCompleted;
while (browser.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
browser.Dispose();
}
private void DisplayHtml(string html, WebBrowser browser)
{
browser.Navigate("about:blank");
if (browser.Document != null)
{
browser.Document.Write(string.Empty);
}
browser.DocumentText = html;
}
मैंने WebBrowser घटक का उपयोग करके कई समाधानों को ठोकर दिया है, लेकिन मुझे इसे कैप्चर करने के लिए वेबकिट इंजन का उपयोग करने में रूचि है। – topless
इस प्रयास करें::
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Threading;
using System.Windows.Forms;
public byte[] picbytes;
private void capture_Click(object sender, EventArgs e)
{
makepicture(txtURL.Text.Trim());
pictureBox1.Visible = true;
pictureBox1.Image = ByteToImage(picbytes);
}
private void makepicture(string url)
{
Thread thread = new Thread(delegate()
{
using (WebBrowser browser = new WebBrowser())
{
browser.ScrollBarsEnabled = false;
browser.AllowNavigation = true;
browser.Navigate(url);
browser.Width = 1024;
browser.Height = 1575;
browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(DocumentCompleted);
while (browser.ReadyState != WebBrowserReadyState.Complete)
{
System.Windows.Forms.Application.DoEvents();
}
}
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
}
private void DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser browser = sender as WebBrowser;
using (Bitmap bitmap = new Bitmap(browser.Width, browser.Height))
{
browser.DrawToBitmap(bitmap, new System.Drawing.Rectangle(0, 0, browser.Width, browser.Height));
using (MemoryStream stream = new MemoryStream())
{
bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
byte[] bytes = stream.ToArray();
picbytes = bytes;
}
}
}
public static Bitmap ByteToImage(byte[] blob)
{
MemoryStream mStream = new MemoryStream();
byte[] pData = blob;
mStream.Write(pData, 0, Convert.ToInt32(pData.Length));
Bitmap bm = new Bitmap(mStream, false);
mStream.Dispose();
return bm;
}
क्या आप अपना कोड इंडेंट कर सकते हैं? ('संपादित करें', सबकुछ चुनें, Ctrl-k)। धन्यवाद। – byako
यह एक दोष के साथ पूरी तरह से काम करता है .. आपको वास्तव में ब्राउज़र नियंत्रण सेट करने के लिए आयामों को जानने की आवश्यकता है, क्योंकि यह केवल भीतर ही प्रिंट करेगा। मुझे लगता है कि यह अब खोजने के लिए एक खोज है, कैसे बताना है कि कितना विस्तृत और वेब पेज कितना अधिक है। – Switch
दस्तावेज़ के भीतर पूर्ण() ब्राउज़र ऑब्जेक्ट बनाने के बाद, निम्न जोड़ें। int ऊंचाई = browser.Document.Body.ScrollRectangle.Height; int चौड़ाई = browser.Document.Body.ScrollRectangle.Width; ब्राउज़र। हाइट = ऊंचाई; ब्राउज़र। विथथ = चौड़ाई; – Switch
आप अपने कोड पोस्ट कर सकते हैं
यहाँ कुछ कोड है? –
@EmanueleGreco दुर्भाग्य से नहीं, लेकिन अगर मैं प्रदर्शन उद्देश्यों के लिए इसका एक न्यूनतम संस्करण निकाल सकता हूं तो कल मैं एक नजर रखूंगा। – topless
मुझे लगता है कि मैं awesomium समाधान के साथ जाऊंगा क्योंकि यह जावास्क्रिप्ट कोड इंजेक्शन के लिए इंटरमीडिएट परत भी प्रदान करता है, जो मेरी भविष्य की योजनाओं के लिए वास्तव में सुविधाजनक है। – topless