将HTML渲染为图像

时间:2008-12-02 16:19:01

标签: c# asp.net image

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

有没有这样做呢?

这适用于ASP.NET 3.5 C#网站!

提前致谢。

编辑:如果输出可以基于HTML输入,那就太好了,因为优惠券是通过使用jQuery操纵DOM并拖动东西来设计的,一切正常,它只是在打印时(论文)它有z索引问题。

9 个答案:

答案 0 :(得分:10)

您可以做的是创建一个aspx页面,将响应类型更改为您想要的格式,然后将图像放入流中。我创建了一个类似的条形码生成器。排除生成图像的所有手续,你将Page_Load看起来像这样:

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或者你需要的任何东西。这样你就可以渲染任何想要指定的内容。

答案 1 :(得分:3)

您可以在winforms或控制台应用程序中使用WebBrowser控件将html渲染到位图。

可在此处找到此示例:http://www.wincustomize.com/articles.aspx?aid=136426&c=1

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

答案 2 :(得分:3)

PHP / Ruby Alternative


如果您已经访问过这个问题并且实际上正在寻找可以在没有Windows的情况下工作的问题,那么您可以尝试使用KHTML库:http://wiki.goatpr0n.de/projects/khtmld

我承认这个网站有一个荒谬的名字,但我可以向你保证这是真的。其他相关页面是:sourceforge页面http://khtml2png.sourceforge.net/

答案 3 :(得分:1)

尝试PDFSharp ...这不完全是“拿这个HTML并制作PDF”,但只需要一点点摆弄,您就可以轻松地从用于制作HTML的信息中制作PDF。

答案 4 :(得分:1)

MARKUP仅替代解决方案

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

我承认起初由于所有的坐标而让这个工作变得繁琐是很乏味的,但是一旦它运行就值得付出努力。

答案 5 :(得分:0)

有一个非常强大的图像创建库,名为GD,我经常使用PHP。

我被引导相信ASP程序员可以使用这个库的包装器。 Try this

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

只需正确设置您的css,以便您有一个针对打印介质的css文件。很容易保证优惠券总是清晰可辨,而不用担心他们是否有bg图像。除非出于某种原因你不希望它是机器可读的,否则移动到图像是没有任何意义的。

答案 8 :(得分:0)

我没有试过自己,但是你应该能够通过使用WebBrowser控件和从基类Control类继承的DrawToBitmap()方法将HTML渲染到图像中。

更新:我自己尝试了这个,并且有一些警告。在显示控件之前,WebBrowser控件似乎不呈现网页,因此WebBrowser需要位于Form中,并且必须显示表单才能呈现HTML以及要引发的DocumentCompleted事件。