2

HTMLコードを作成し、このHTMLページを画像として保存しました。私が作成したhtmlコントロールは、すべての画像と背景色で画像に正しく表示されています。ローカルホストで問題なく動作しています。

しかし、サーバー上で画像を作成するためのhtmlコードを作成しようとしています。画像は作成されていますが、bgcolor、画像などは表示されません。

空白の画像のみが表示されます。

コード :

クライアント側からAjax呼び出し機能を使用して、htmlコンテンツをサーバー側に送信しています

サーバー側の方法

[System.Web.Services.WebMethod()]
       public static void GenerateTemplateImage(string html_Content, string TemplateName)
        {
            var t = new Thread(MakeScreenshot);
            t.SetApartmentState(ApartmentState.STA);
            t.Start();
        }


        public static void MakeScreenshot()
        {
            Bitmap bitmap;
            string html = string.Empty;

            string Title = string.Empty;
            string Meta = string.Empty;
            string Style = string.Empty;
            string ScriptBefore = string.Empty;
            string ScriptAfter = string.Empty;
            string Scripthead = string.Empty;

            html="<div><div id='s_p_box-1' style='background-color: rgb(24, 0, 238); width: 109px; height: 75px;>Welcome </div>' <br/> <img id='template1' class='template' style='border:1px solid green; height:142px;width:116px' src='http://ace.demos.classicinformatics.com/Advertiser-Admin/Campaign/UserTemplate/template1.jpg'></div>";

            WebBrowser wb = new WebBrowser();



            wb.Navigate("about:blank");

            if (wb.Document != null)
            {
                wb.Document.Write(html);
            }

            wb.DocumentText = html;

            wb.ScrollBarsEnabled = false;
            wb.ScriptErrorsSuppressed = true;

            // Set the size of the WebBrowser control
            // Take Screenshot of the web pages full width
          //  wb.Width = wb.Document.Body.ScrollRectangle.Width;
            wb.Width = 1024;
            // Take Screenshot of the web pages full height
          //  wb.Height = wb.Document.Body.ScrollRectangle.Height;
            //wb.Height = 786;
            wb.ScrollBarsEnabled = true;

            if (wb.Height <= 0)
            {
                wb.Height = 1024;
            }
            //if (wb.Width <= 400)
            //{
            //    wb.Width = 700;
            //}

            // Get a Bitmap representation of the webpage as it's rendered in the WebBrowser control
            //Bitmap bitmap = new Bitmap(wb.Width, wb.Height);

            //using (bitmap = new Bitmap(wb.Width, wb.Height))
            using (bitmap = new Bitmap(wb.Width, wb.Height))
            {

                //wb.DrawToBitmap(bitmap, new Rectangle(0, 0, wb.Width, wb.Height));
                wb.DrawToBitmap(bitmap, new Rectangle(0, 0, wb.Width, wb.Height));
                //string imgPath = HttpContext.Current.Server.MapPath(System.Configuration.ConfigurationManager.AppSettings["ImgPath"].ToString());
                //string imgPath="C:\\Projects\\aec\\Ace-A-Metric\\Advertiser-Admin\\Campaign\\UserTemplate\\";
                string imgPath = URlPath + "test123" + ".bmp";
                //bitmap.Save(@"D:\" + txtTempName.Text + ".bmp", System.Drawing.Imaging.ImageFormat.Bmp);
                bitmap.Save(imgPath, System.Drawing.Imaging.ImageFormat.Bmp);
                //string imgpath = Path.Combine(HttpContext.Current.Server.MapPath("~") + "Advertiser-Admin\\Campaign\\UserTemplate\\" + txtTempName.Text +".bmp");
                //bitmap.Save(imgpath, System.Drawing.Imaging.ImageFormat.Bmp);
            }
            wb.Dispose();
            GC.Collect();
        }
4

1 に答える 1

1

WebBrowser コントロールは使用しないでください。COM のレガシーと非常に貧弱なオブジェクト モデルのために、多くの制約が付属しています。

考えられる解決策の 1 つは、 Awesomium.Netを使用することです。

特に、この記事ではプロセスについて説明します: C# (.NET) を使用して Web ページをキャプチャする

主な違いは、Awesomium とその .Net ラッパーが、ホストに依存せずに (実際には Chromium ソース コードから) 記述されていることです。ライブラリは実際にはスタンドアロンであり、さらに多くのシナリオを検討できます。

于 2013-07-09T12:27:20.653 に答える