从内存流中读取存储的PDF

6

我正在使用C#和SQLServer 2012进行数据库项目的开发。在我的一个表单中,我有一个存储在表格中的PDF文件和其他一些信息。这部分代码已经实现成功,但是当我想要检索存储的信息时,我无法显示PDF文件,因为我不知道如何显示它。

我看过一些文章,说不能从内存流中使用Adobe PDF viewer显示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?
                }
            }

2
假设使用WinForms而不是Web:将MemoryStream写入文件,并启动系统默认的PDF查看器。编辑:当然,将我的微不足道的答案转换为一个微不足道的问题作为评论。我不会复制现有的答案。 - CodeCaster
1个回答

10

这个回答应该给你一些选择: 如何使用C#来呈现pdf


过去我曾经使用过Google的开源PDF渲染项目 - PDFium

有一个名为PdfiumViewer的C# NuGet包,它提供了一个C#封装器,可围绕PDFium进行操作,并允许显示和打印PDF。

它直接使用流工作,因此不需要将任何数据写入磁盘

这是我从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中,就像添加引用一样? - Hunar
@honar.cs PDFium可以作为Nuget包使用。可以按照这些说明安装Nuget包管理器到VS2010中。 - Morphed
亲爱的朋友,谢谢。我想我做了你说的事情,在这个链接中看到了图片http://postimg.org/image/h8e4p627d/,你安装了这两个东西吗?如果是的话,现在我该如何使用PDFium,我在哪里找到它?再次感谢。 - Hunar
我想在表单的特定位置显示一个PDF查看器,因为它还有其他组件。如何实现? - Hunar
1
@honar.cs 你最好分开搜索和提问这些问题。评论区不是进行长时间讨论的地方。谢谢。 - Morphed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接