C# 如何将响应流转换为图像?
请注意,此链接没有帮助 在之前被问到的问题中,回答者说他们并没有得到我想要做的事情,所以这是完整的代码 我只是希望在页面上呈现一个图像(内容),而不是一个表C# 如何将响应流转换为图像?,c#,asp.net,visual-studio-2008,html-to-jpeg,C#,Asp.net,Visual Studio 2008,Html To Jpeg,请注意,此链接没有帮助 在之前被问到的问题中,回答者说他们并没有得到我想要做的事情,所以这是完整的代码 我只是希望在页面上呈现一个图像(内容),而不是一个表 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 Syst
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();
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.IO;
使用系统文本;
使用系统数据;
使用系统图;
公共部分类\u默认值:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数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
dasdas
dasdad”;
数据集ds=新数据集();
数据表dt;
数据行dr;
数据列IDCOULMN;
数据列名称coulumn;
dt=新数据表();
idCoulumn=newdatacolumn(“ID”,Type.GetType(“System.Int32”);
nameCoulumn=newdatacolumn(“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=新建
System.Web.UI.WebControls.GridView();
grid1.DataSource=ds;
grid1.DataBind();
panelmain.Controls.Add(abc);
panelmain.Controls.Add(grid1);
字符串输出;
toexport=渲染控制(panelmain);
字节[]位图数据=新字节[100000];
bitmapData=Convert.FromBase64String(FixBase64ForImage(toexport));
System.IO.MemoryStream streamBitmap=新的System.IO.MemoryStream(位图数据);
Bitmap BITMAGE=新位图((位图)Image.FromStream(streamBitmap));
Response.ContentType=“image/gif”;
AppendHeader(“内容处置”、“内联;文件名=tm.gif”);
Response.BufferOutput=true;
响应。Charset=“utf-8”;
响应。写入(BITMAGE);
Response.End();
}
公共字符串FixBase64ForImage(字符串图像)
{
System.Text.StringBuilder sbText=新的System.Text.StringBuilder(Image,Image.Length);
sbText.Replace(“\r\n”,String.Empty);
sbText.Replace(“,String.Empty”);
返回sbText.ToString();
}
公共字符串渲染控件(控件ctrl)
{
StringBuilder sb=新的StringBuilder();
StringWriter tw=新的StringWriter(sb);
HtmlTextWriter hw=新的HtmlTextWriter(tw);
控制渲染控制(hw);
写信给(某人);
使某人返回字符串();
}
在中,您已收到(我)的答复,指此问题的答案。该线程中的第二个答案链接到web上的另一个页面,其中解释了启动WebBrowser
对象、渲染页面、捕获图像、将其转换为首选图像文件格式并将其保存到本地的整个过程。这不是一项简单的任务(预计要花几个小时),但也不要太辛苦
要重复,只需看一看,下载源代码并进行实验首先,您的代码完全缺少加载HTML呈现引擎并使用该引擎呈现内容的部分。公共字符串RenderControl(Control ctrl)这就完成了,它可以使用返回的字符串生成一个文档文件。请帮助。我缺少什么给linksIt不生成“文档文件”,它只生成HTML。将HTML呈现到图像是一项非常艰巨的任务。看看web浏览器有多复杂。@user287745:user@Matti是正确的,
public string RenderControl(Control-ctrl)
不创建HTML图片,而是创建内存中的HTML代码字符串。创建HTML代码的图像意味着使用多种浏览器中的一种呈现HTML代码,将其捕获为屏幕截图,然后使用该图像。的可能副本