[英]Render inline HTML to an Image in VB.Net
基本上我有一個看起來像這樣的字符串:
<p>HELLO <span style='color:red'>WORLD</span></p>
我將如何將HTML 字符串轉換為圖像? (位圖,PNG等)
有誰知道會執行此操作的任何VB.NET工具嗎? 由於這是一個字符串,因此從技術上講它不是DOM的一部分,因此無法從DOM讀取。
我的總體目的是創建一個ASPX頁面,該頁面將從數據庫中讀取包含一些HTML的字段,將該HTML轉換為圖像,然后通過將ContentType欺騙為“ image / png”將該頁面上的圖像汽化,從而創建一個我可以在RDLC文件中使用的動態圖像。
我們將RDLC文件中的圖像顯示為HTML的原因僅僅是因為我們所有的報告都使用ReportViewer版本9.0,該版本不支持解釋的HTML。 基於HTML創建動態圖像使我們能夠直接在報表中顯示要顯示的“格式”,否則我們將無法做到這一點,而且無論如何也沒有這種靈活性。
您可以使用WebBrowser控件在屏幕上呈現html,然后將屏幕位圖復制到圖像文件中。
WebBrowser1.DocumentText = "<p>HELLO <span style='color:red'>WORLD</span></p>"
此代碼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
wkhtmltopdf也有一個wkhtmltoimage.exe可供您使用,請嘗試http://wkhtmltopdf.org/
在指令“ Dim bmp As Bitmap = GetControlImage(WebBrowser1)
”之前緊接添加“ Application.DoEvents
”似乎解決了必須按兩次按鈕的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.