gpt4 book ai didi

c# - 将Webview2 Source直接设置为二进制流

转载 作者:行者123 更新时间:2023-12-05 01:58:15 25 4
gpt4 key购买 nike

我的应用程序中有一个 Webview2 控件,用于查看 PDF 文档。
该应用程序还存储和读取 MS SQL 服务器 PDF 数据。

目前,我正在从 SQL 中检索二进制数据,将它们转换为临时文件到磁盘并设置:

webview2.source = New Uri("file://" + filename)  

到目前为止一切正常,但我当然希望在不写入和读取磁盘的情况下完成这项工作。

有没有办法在不访问磁盘的情况下做同样的事情?

更新(按照推荐),我试过的。为了更好地理解部分代码:

                Dim fieldOrdinal = reader.GetOrdinal(ColumnName)
reader.Read()
Dim blob = New Byte(reader.GetBytes(fieldOrdinal, 0, Nothing, 0, 0) - 1) {}
reader.GetBytes(fieldOrdinal, 0, blob, 0, blob.Length)

Dim pdfBase64 As String = Convert.ToBase64String(blob)
Dim html As String = "<!DOCTYPE html><html><head></head><body><div>" & $"<iframe width=100% height=500 src=\" & Chr(&H22) & "data:Application/pdf;base64,{pdfBase64}\" & Chr(&H22) & ">" & "</iframe></div></body></html>"

webview2 控件显示了一个框架,但没有内容

最后更新:这是(正确的)VB 翻译和工作代码:

Dim html As String = "<!DOCTYPE html><html><head></head><body><div>" & $"<iframe width=100% height=500 src=""data:Application/pdf;base64,{pdfBase64}"">" & "</iframe></div></body></html>"

最佳答案

您可以将 PDF 作为 Base64 嵌入到 IFRAME 中,就像嵌入图像一样。
在这种情况下,mime 类型当然是application/pdf
使用 Convert.ToBase64String() 将源 PDF 字节转换为 Base64 ,使用标准的 HTML5 header 并将 IFRAME 和/或 DIV 容器设置为所需的大小。

使用 WebView2.NavigateToString()使用嵌入的 PDF 加载 HTML 的方法:

  • 查看备注部分:当前内容的大小不能超过 2097152 字节 (2MB)
string pdfBase64 = Convert.ToBase64String([Your PDF bytes]);

string html = "<!DOCTYPE html><html><head></head><body><div>" +
$"<iframe width=100% height=500 src=\"data:application/pdf;base64,{pdfBase64}\">" +
"</iframe></div></body></html>";

webView2.NavigateToString(html);

VB.Net 版本:

Dim pdfBytes = [DataReader].GetSqlBytes([DataReader].GetOrdinal("[Column Name]")).Value
Dim pdfBase64 As String = Convert.ToBase64String(pdfBytes)

Dim html As String = "<!DOCTYPE html><html><head></head><body><div>" &
$"<iframe width=100% height=500 src=""data:Application/pdf;base64,{pdfBase64}"">" &
"</iframe></div></body></html>"

webView2.NavigateToString(html)

iframe 大小不应该这样设置,您应该使用 CSS 样式(可能还有一个简单的 JavaScript 来处理包含的窗口大小的后期重新定义你的 PDF)。
您可以构建一个简单的 HTML 模板并按照描述填充 Base64 内容。

关于c# - 将Webview2 Source直接设置为二进制流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68670051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com