从内存流中读取存储的 PDF
Posted
技术标签:
【中文标题】从内存流中读取存储的 PDF【英文标题】:Read a stored PDF from memory stream 【发布时间】:2015-05-15 20:18:15 【问题描述】:我正在使用 C# 和 SQLServer 2012 处理数据库项目。在我的一个表单中,我有一个 PDF 文件,其中包含存储在表中的一些其他信息。这是成功的,但是当我想检索存储的信息时,我在显示 PDF 文件时遇到了问题,因为我无法显示它并且我不知道如何显示它。
我从内存流中读到一些文章说它不能用 Adobe PDF 查看器显示,有什么办法吗?
这是我从数据库中检索数据的代码:
sql_com.CommandText = "select * from incoming_boks_tbl where [incoming_bok_id]=@incoming_id and [incoming_date]=@incoming_date";
sql_com.Parameters.AddWithValue("incoming_id",up_inco_num_txt.Text);
sql_com.Parameters.AddWithValue("incoming_date", up_inco_date_txt.Text);
sql_dr = sql_com.ExecuteReader();
if(sql_dr.HasRows)
while(sql_dr.Read())
up_incoming_id_txt.Text = sql_dr[0].ToString();
up_inco_num_txt.Text = sql_dr[1].ToString();
up_inco_date_txt.Text = sql_dr[2].ToString();
up_inco_reg_txt.Text = sql_dr[3].ToString();
up_inco_place_txt.Text = sql_dr[4].ToString();
up_in_out_txt.Text = sql_dr[5].ToString();
up_subj_txt.Text = sql_dr[6].ToString();
up_note_txt.Text = sql_dr[7].ToString();
string file_ext = sql_dr[8].ToString();//pdf file extension
byte[] inco_file = (byte[])(sql_dr[9]);//the pdf file
MemoryStream ms = new MemoryStream(inco_file);
//here I don't know what to do with memory stream file data and where to store it. How can i display it?
【问题讨论】:
假设 WinForms 而不是 web:write the MemoryStream to a file 和 start the system's default PDF viewer。编辑:当然,将我琐碎的答案转换为琐碎的问题以发表评论。我不会复制现有的答案。 【参考方案1】:这个答案应该给你一些选择:How to render pdfs using C#
过去我用过谷歌的开源PDF渲染项目-PDFium
有一个名为 PdfiumViewer 的 C# nuget 包,它提供了一个围绕 PDFium 的 C# 包装器,并允许显示和打印 PDF。
它直接与 Streams 一起工作,因此不需要将任何数据写入磁盘
这是我在 WinForms 应用中的示例
public void LoadPdf(byte[] pdfBytes)
var stream = new MemoryStream(pdfBytes);
LoadPdf(stream)
public void LoadPdf(Stream stream)
// Create PDF Document
var pdfDocument = PdfDocument.Load(stream);
// Load PDF Document into WinForms Control
pdfRenderer.Load(_pdfDocument);
【讨论】:
谢谢你的好回答,但你能给我一篇文章如何将此包添加到 Visual Studio 2010,它可以像添加参考一样添加吗? @honar.cs PDFium 以Nuget package 的形式提供。 Nuget 包管理器可以按照these instructions 安装到 VS2010 中 亲爱的朋友,谢谢,我想我按照你说的做了,看看这个链接里的图片postimg.org/image/h8e4p627d,你安装了这两个东西吗?如果是,那么现在我如何使用我找到的 PDFium?再次感谢您 我想在表单的特定位置显示一个 pdf 查看器,因为它还有一些其他组件?该怎么做? @honar.cs 您最好分别搜索和询问这些问题。 cmets 部分不是进行扩展讨论的地方。谢谢以上是关于从内存流中读取存储的 PDF的主要内容,如果未能解决你的问题,请参考以下文章