【问题标题】:Saving generated pdf in the database using c#使用c#将生成的pdf保存在数据库中
【发布时间】:2014-01-04 04:50:11
【问题描述】:

我正在开发 asp.net 应用程序,它以多种形式从用户那里获取输入并保存为 pdf。现在我被困在我不知道如何将生成的 pdf 保存在 SQL Server 数据库中的地方。

有了这个,我附上了保存在 pdf 中的代码。

protected void btnExportPDF_Click(object sender, EventArgs e)
{
   Response.ContentType = "application/pdf";
   Response.AddHeader("content-disposition", "attachment;filename=Samba.pdf");
   Response.Cache.SetCacheability(HttpCacheability.NoCache);

   StringWriter st = new StringWriter();
   HtmlTextWriter ht = new HtmlTextWriter(st);

   gvExperience.AllowPaging = false;
   gvExperience.DataBind();
   gvExperience.RenderControl(ht);

   StringReader sr1 = new StringReader(st.ToString());
   Document pdfDoc = new Document(PageSize.A4, 10f,10f,10f,0f);

   HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
   PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
   pdfDoc.Open();
   htmlparser.Parse(sr1);
   pdfDoc.Close();

   Response.Write(pdfDoc);
   Response.End();  
}

【问题讨论】:

  • 您可能希望将 .pdf 保存到文件系统并保存指向数据库中资源的字符串路径。你试过什么?
  • 或者..使用谷歌找到这个:codeproject.com/Questions/311148/…
  • 不要假设我们知道您使用的数据库。您使用的是 SQL Server、Oracle、MySQL 还是其他工具?无论是哪种数据库,您都有两种选择。将其保存在您的文件系统上,只需保存数据库的路径即可。或者将其保存为 BLOB。
  • @DGibbs,我正在尝试生成 pdf 并直接保存到数据库而不保存到本地磁盘。目前,我刚刚成功生成了 pdf 并将其保存到本地磁盘。
  • @Andrew,我遇到了这个解决方案,但我仍然坚持,因为我打算生成 pdf 并直接保存到数据库而不保存在本地磁盘上。

标签: c# asp.net sql sql-server pdf


【解决方案1】:

创建一个至少包含文件名 (varchar(100)、内容 (varbinary(max)) 和内容长度 (int) 的表。

将 pdf 转换为字节数组 (byte[])。我会将您的 Reponse.OutputStream 换成内存流。使用您喜欢的数据访问方法保存到 Sql Server。

Sql server 的 'varbinary' 将转换为 C# 的 'byte[]'。当您将其写回客户端的浏览器时,您需要设置“content-type”标头并使用“Response.BinaryWrite(byte[])”写入流。

【讨论】:

  • 是否可以帮助我为提到的部分编码,因为我对此完全陌生。
  • 我不能给你代码,但是你需要 System.IO.MemoryStream。类似'var stream = new MemoryStream(); {写入流} var bytes = stream.ToArray();'.至于您的数据访问,为了简单起见,我将只实现一个实体框架上下文。创建数据库和架构后,Entity Framework 提供了自动导入架构和将架构映射到代码的机制。
  • 谢谢,终于明白你上面说的了..:D
【解决方案2】:

转换为base64字符串,然后插入到数据库中。

byte[] pdfBytes = File.ReadAllBytes(pdfPath);
string pdfBase64 = Convert.ToBase64String(pdfBytes);

愉快的编码。 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2017-08-21
    相关资源
    最近更新 更多