C# 将HTML呈现为图像

C# 将HTML呈现为图像,c#,asp.net,image,C#,Asp.net,Image,我正在基于动态输入和裁剪图像生成优惠券,我正在使用ntml和css显示优惠券,问题是,打印这张优惠券已经成为一个问题,因为打印时背景如何消失以及其他问题,所以我认为最好的解决方案是能够基于html生成图像,或者设置某种模板,接收字符串和图像,并使用输入的图像作为背景生成图像,并将优惠券信息放在顶部 已经有什么东西可以做到这一点了吗 这是一个ASP.NET 3.5 C#网站 提前谢谢 编辑:如果输出可以基于HTML输入,那就太好了,因为优惠券是通过使用jQuery操作DOM并拖动内容来设计的,一切

我正在基于动态输入和裁剪图像生成优惠券,我正在使用ntml和css显示优惠券,问题是,打印这张优惠券已经成为一个问题,因为打印时背景如何消失以及其他问题,所以我认为最好的解决方案是能够基于html生成图像,或者设置某种模板,接收字符串和图像,并使用输入的图像作为背景生成图像,并将优惠券信息放在顶部

已经有什么东西可以做到这一点了吗

这是一个ASP.NET 3.5 C#网站

提前谢谢


编辑:如果输出可以基于HTML输入,那就太好了,因为优惠券是通过使用jQuery操作DOM并拖动内容来设计的,一切都很好,只是在打印时(打印到纸上)它有z索引问题。

有一个非常强大的图像创建库,我经常在PHP中使用它

我相信这个库有一个包装器,ASP程序员可以使用

除非“其他问题”相当严重,否则您不能指示用户在打印时打开背景图像吗


在任何情况下,我都会默认为PDF而不是图像提供服务,因为它是用于打印的。

试试看……这并不完全是“获取此HTML并生成PDF”但是,只要稍加修改,您就可以轻松地将用于制作HTML的信息制作成PDF。

您可以创建一个aspx页面,将响应类型更改为您想要的格式,然后将图像放入流中。我创建了一个条形码生成器,它可以做类似的事情。除去生成图像的所有手续,页面加载将如下所示:

Bitmap FinalBitmap = new Bitmap();
MemoryStream msStream = new MemoryStream();

strInputParameter == Request.Params("MagicParm").ToString()

// Magic code goes here to generate your bitmap image.
FinalBitmap.Save(msStream, ImageFormat.Png);

Response.Clear();
Response.ContentType = "image/png";

msStream.WriteTo(Response.OutputStream);

if ((FinalBitmap != null)) FinalBitmap.Dispose();

就这样!然后,您在图像中所要做的就是将URL设置为RenderImage.aspx?MagicParm=WooHoo或任何您需要的内容。这样,您可以让它呈现您想要指定的任何内容。

您可以在winforms或console应用程序中使用WebBrowser控件将html呈现为位图

这方面的一个例子如下:

上面的示例可以修改为在ASP.Net中运行,方法是创建一个新的STAThread并执行一个应用程序。在它上运行以启动一个新的消息循环。

PHP/Ruby Alternative

如果您已经访问了此问题,并且实际上正在寻找在没有Windows的情况下可以工作的soething,您可以尝试使用KHTML库:


我承认这个网站的名字很可笑,但我可以向你保证它是真的。其他相关页面包括:sourceforge页面只需正确设置css,这样就有了一个针对打印介质的css文件。很容易保证优惠券始终清晰可辨,而不用担心他们是否有bg图像。不必要地移动到图像没有任何意义,除非出于某种原因您不希望它是机器可读的。

我自己也没有尝试过,但是您应该能够使用WebBrowser控件和从基控件类继承的DrawToBitmap()方法将HTML呈现到图像中


更新:我自己也试过,有一些警告。WebBrowser控件在显示控件之前似乎不会呈现网页,因此WebBrowser需要处于表单中,并且必须显示表单才能呈现HTML并引发DocumentCompleted事件。

仅标记替代解决方案

使用SVG和XSLT将html数据转换为可以呈现/保存的图像等


我承认,一开始,由于所有坐标的原因,让它工作起来很乏味,但一旦它运行起来,就值得付出努力。

我可以使用HTML生成PDF吗?如果它“打印”成PDF,它只会导致与我在z-indexing中遇到的问题相同的问题,那么这将允许BES动态生成一个图像作为背景,上面有文本,从数据库中提取?如果是这样的话,听起来很时髦!对您可以在渲染器中将整个优惠券创建为图像,然后返回该图像。或者,如果你想在它上面放置文本,你必须做一些更复杂的事情,创建一个div或一个以渲染器为背景的表。神奇的代码取决于你想如何生成位图图像。您可能有一个第三方库,您只需从服务器加载一个文件,您可以使用GDI+动态生成您自己的映像。这取决于你。只要“魔法代码”为您呈现位图。你会被安排好的。少量可能是轻描淡写的;D