【问题标题】:How to convert response stream to an image?如何将响应流转换为图像?
【发布时间】:2010-08-29 11:33:05
【问题描述】:

请注意此链接Render HTML as an Image 没有帮助。

在之前回答的问题中说他们没有得到我想要做的事情,所以这里也是完整的代码。

我只是想要在页面上呈现(内容的)图像而不是 TABLES。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.IO;
using System.Text;
using System.Data;
using System.Drawing;


public partial class _Default : System.Web.UI.Page 
{
protected void Page_Load(object sender, EventArgs e)
{

    System.Web.UI.WebControls.Panel panelmain = new System.Web.UI.WebControls.Panel();
    System.Web.UI.WebControls.Literal abc = new System.Web.UI.WebControls.Literal();
    abc.Text = "as<br/>dasdas<br/>dasdad";


    DataSet ds = new DataSet();
    DataTable dt;
    DataRow dr;
    DataColumn idCoulumn;
    DataColumn nameCoulumn;

    dt = new DataTable();
    idCoulumn = new DataColumn("ID", Type.GetType("System.Int32"));
    nameCoulumn = new DataColumn("Name", Type.GetType("System.String"));
    dt.Columns.Add(idCoulumn);
    dt.Columns.Add(nameCoulumn);
    dr = dt.NewRow();
    dr["ID"] = 1;
    dr["Name"] = "Name1";
    dt.Rows.Add(dr);

    dr = dt.NewRow();
    dr["ID"] = 2;
    dr["Name"] = "Name2";
    dt.Rows.Add(dr);

    ds.Tables.Add(dt);

    System.Web.UI.WebControls.GridView grid1 = new 
    System.Web.UI.WebControls.GridView();
    grid1.DataSource = ds;
    grid1.DataBind();

    panelmain.Controls.Add(abc);
    panelmain.Controls.Add(grid1);

    string toexport;
    toexport = RenderControl(panelmain);

    Byte[] bitmapData = new Byte[100000];
    bitmapData = Convert.FromBase64String(FixBase64ForImage(toexport));
    System.IO.MemoryStream streamBitmap = new System.IO.MemoryStream(bitmapData);
    Bitmap bitImage = new Bitmap((Bitmap)Image.FromStream(streamBitmap));

    Response.ContentType = "image/gif";
    Response.AppendHeader("Content-Disposition", "inline;filename=tm.gif");
    Response.BufferOutput = true;
    Response.Charset = "utf-8";
    Response.Write(bitImage);
    Response.End();

    }



public string FixBase64ForImage(string Image)
{
    System.Text.StringBuilder sbText = new System.Text.StringBuilder(Image, Image.Length);

    sbText.Replace("\r\n", String.Empty);

    sbText.Replace(" ", String.Empty);

    return sbText.ToString();
}



public string RenderControl(Control ctrl)
{
    StringBuilder sb = new StringBuilder();
    StringWriter tw = new StringWriter(sb);
    HtmlTextWriter hw = new HtmlTextWriter(tw);

    ctrl.RenderControl(hw);
    Response.Write(sb);

    return sb.ToString();



}

【问题讨论】:

  • 好吧,一方面,您的代码完全缺少加载 HTML 渲染引擎并使用它来渲染内容的部分。
  • public string RenderControl(Control ctrl) 完成这项工作,它能够使用返回的字符串生成 doc 文件。请帮助..我缺少什么给链接
  • 它不会产生“文档文件”,它只会产生 HTML。将 HTML 渲染到图像是一项非常艰巨的任务。看看网络浏览器有多复杂。
  • @user287745:用户@Matti 是正确的,public string RenderControl(Control ctrl) 不会创建 HTML 的 图片,它会创建 HTML 代码的内存字符串我>。创建一个图像意味着使用众多浏览器之一呈现 HTML 代码,将其捕获为屏幕截图,然后使用该图像。
  • Render HTML as an Image的可能重复

标签: c# asp.net visual-studio-2008 html-to-jpeg


【解决方案1】:

your previous question 中,您已经(由我)收到了一个答案,指的是to another SO thread 回答了这个问题。该线程中的第二个答案链接到网络上的另一个页面,其中解释了启动WebBrowser 对象、渲染页面、捕获图像、将其转换为您喜欢的图像文件格式、将其保存在本地的整个过程。不是一项简单的任务(预计会花费几个小时),但也不会太难。

要重复the answer in the referred to question,只需看看这个WinCustomize.com article,下载源代码并进行实验

【讨论】:

    猜你喜欢
    • 2016-10-19
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多