gpt4 book ai didi

c# - 将 PDF 从内存加载到 telerik :RadPdfViewer

转载 作者:太空狗 更新时间:2023-10-29 22:32:26 27 4
gpt4 key购买 nike

我有一个 PDF 文件作为字节数组存储在数据库中。我正在将 PDF 字节数组从我的数据库读回到我的应用程序中。

现在,我正在尝试使用 RadPdfViewer 显示 PDF,但它不起作用。

这是我的代码:

    byte[] pdfAsByteArray= File.ReadAllBytes(@"C:\Users\Username\Desktop\Testfile.pdf");

//Save "pdfAsByteArray" into database
//...
//Load pdf from database into byte[] variable "pdfAsByteArray"

using (var memoryStream = new MemoryStream(pdfAsByteArray))
{
this.PdfViewer.DocumentSource = new PdfDocumentSource(memoryStream);
}

当我执行应用程序时,我只得到一个空的 PdfViewer。

问题:如何正确设置 DocumentSource?

问题:如何处理流? (注意 using 不起作用)

注意:我不想避免将临时文件写入磁盘之类的事情


编辑:

我想通了,但我对这个解决方案并不完全满意:

不工作:

using (var memoryStream = new MemoryStream(pdfAsByteArray))
{
this.PdfViewer.DocumentSource = new PdfDocumentSource(memoryStream);
}

工作:

var memoryStream = new MemoryStream(pdfAsByteArray);
this.PdfViewer.DocumentSource = new PdfDocumentSource(memoryStream);

我不知道 teleriks RadPdfViewer 组件是如何工作的,但我不想处理 Stream。

最佳答案

来自 Telerik documentation (特别是关于声明此加载是异步完成的“警告”),我相信这应该可以工作,同时仍然为您提供关闭流的方法(不像您能够使用 using block ,但仍然比打开它要好):

//class variable
private MemoryStream _stream;

_stream = new MemoryStream(pdfAsByteArray);
var docSource = new PdfDocumentSource(memoryStream);
docSource.Loaded += (sender, args) => { if (_stream != null) _stream.Dispose();};
this.PdfViewer.DocumentSource = docSource;

我是徒手完成的,无法访问 Telerik API,因此我无法获得 Loaded 事件的确切细节。

编辑
这是我找到的文档中的相关详细信息(重点是我的):

The PdfDocumentSource loads the document asynchronously. If you want to obtain a reference to the DocumentSource after you have imported a document, you should use the Loaded event of the PdfDocumentSource object to obtain the loaded document. This is also a convenient method that can be used to close the stream if you are loading a PDF from a stream.

关于c# - 将 PDF 从内存加载到 telerik :RadPdfViewer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21433807/

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