基本上我有一个看起来像这样的字符串:
<p>HELLO <span style='color:red'>WORLD</span></p>
如何将HTML的字符串转换为图像? (位图,PNG等)
有没有人知道任何可以执行此操作的VB.NET工具?由于这是一个字符串,因此它无法从DOM读取,因为它在技术上不属于DOM。
我的总体目的是创建一个ASPX页面,该页面将从数据库中读取包含一些HTML的字段,将该HTML转换为图像,并通过将ContentType欺骗为“image / png”来在页面上蒸出该图像,从而创建一个我可以在RDLC文件中使用的动态图像。
我们将HTML作为图像显示在RDLC文件中的原因仅仅是因为我们的所有报告都使用不支持解释HTML的ReportViewer 9.0版。基于HTML创建动态图像允许我们显示我们想要直接在报表中显示的“格式”,这是我们无法做到的,而不是具有这种灵活性。
答案 0 :(得分:0)
您可以使用WebBrowser控件在屏幕上呈现html,然后将屏幕位图复制到上传图像文件。
WebBrowser1.DocumentText = "<p>HELLO <span style='color:red'>WORLD</span></p>"
答案 1 :(得分:0)
此代码ALMOST有效。您需要单击该按钮两次,它才能在第二次单击时正常工作。抓取您需要解决的渲染页面存在时间问题。此外,表格必须在前面,因为它是一个屏幕抓取,所以只抓住屏幕的可见部分。
Option Strict On
Imports System.Drawing
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim strHTML As String = "<p>HELLO <span style='color:red'>WORLD</span></p>"
WebBrowser1.DocumentText = strHTML
Dim bmp As Bitmap = GetControlImage(WebBrowser1)
Dim strFilename As String = "C:\Junk\Junk.png"
bmp.Save(strFilename, System.Drawing.Imaging.ImageFormat.Png)
End Sub
Private Declare Function BitBlt _
Lib "gdi32.dll" ( _
ByVal hdcDest As IntPtr, _
ByVal x As Int32, _
ByVal y As Int32, _
ByVal Width As Int32, _
ByVal Height As Int32, _
ByVal hdcSrc As IntPtr, _
ByVal xSrc As Int32, _
ByVal ySrc As Int32, _
ByVal dwRop As Int32 _
) As Boolean
Private Const SRCCOPY As Integer = &HCC0020
Function GetControlImage(ctl As Control) As Bitmap
Dim grpInput As Graphics = ctl.CreateGraphics
' Create a compatible bitmap and get its Graphics object
Dim bmpOutput As New Bitmap(ctl.ClientRectangle.Width, ctl.ClientRectangle.Height, grpInput) 'formImage = New Bitmap(frmForm.ClientRectangle.Width, frmForm.ClientRectangle.Height, formGraphics)
Dim grpOutput As Graphics = Graphics.FromImage(bmpOutput)
' Get the target and source device context handles (hDC)
Dim sourceDC As IntPtr = grpInput.GetHdc
Dim targetDC As IntPtr = grpOutput.GetHdc
' Copy the control's client area
BitBlt(targetDC, 0, 0, ctl.ClientRectangle.Width, ctl.ClientRectangle.Height, sourceDC, ctl.ClientRectangle.X, ctl.ClientRectangle.Y, SRCCOPY)
' Release DCs and dispose objects
grpInput.ReleaseHdc(sourceDC)
grpInput.Dispose()
grpOutput.ReleaseHdc(targetDC)
grpOutput.Dispose()
Return bmpOutput
End Function
End Class
答案 2 :(得分:0)
wkhtmltopdf还有一个你可以使用的wkhtmltoimage.exe,试试http://wkhtmltopdf.org/
答案 3 :(得分:0)
在指令“Application.DoEvents
”之前添加“Dim bmp As Bitmap = GetControlImage(WebBrowser1)
”似乎解决了必须按两次按钮的问题。