C# 我应该动态地重新创建PDF,而不是将其存储在数据库或文件系统中吗?

C# 我应该动态地重新创建PDF,而不是将其存储在数据库或文件系统中吗?,c#,asp.net,sql-server-2005,itext,C#,Asp.net,Sql Server 2005,Itext,我需要客户能够下载已发送给他们的信件PDF 我读过关于文档或图像的数据库存储与文件系统存储的文章,听起来确实有一个共识,那就是,对于不仅仅是几个图像的任何东西,文件系统都是一条出路 我想知道的是: 一个合理的选择是将信件的详细信息存储在数据库中,并在请求时“即时”重新创建PDF吗 与从文件系统获取PDF相比,这种方法是优还是劣 我倾向于说“视情况而定” 当一个文档被多次请求时,如果您在第一次请求时编写该文档,并随后检索该文档,则该文档可能会被保存 o如果对文档的大多数请求都是一次性的,并且创建

我需要客户能够下载已发送给他们的信件PDF

我读过关于文档或图像的数据库存储与文件系统存储的文章,听起来确实有一个共识,那就是,对于不仅仅是几个图像的任何东西,文件系统都是一条出路

我想知道的是:

  • 一个合理的选择是将信件的详细信息存储在数据库中,并在请求时“即时”重新创建PDF吗
  • 与从文件系统获取PDF相比,这种方法是优还是劣
    • 我倾向于说“视情况而定”

      当一个文档被多次请求时,如果您在第一次请求时编写该文档,并随后检索该文档,则该文档可能会被保存


      o如果对文档的大多数请求都是一次性的,并且创建过程不会占用您的大部分服务器容量,那么动态将具有明显的优势。

      如果您使用的是ASP.NET,为什么不缓存PDF呢。如果您愿意,您的缓存可以存储在数据库中,也可以保留在内存中,直到您需要它为止。在缓存应用程序块中为您实现了这一点,而且使用起来非常简单。如果缓存对象,使用块在数据库中创建一个存储,然后在需要时加载它,您就不必担心重新创建它。

      如果是出于存档目的,我肯定会存储PDF,因为在将来,您的PDF生成脚本可能会更改,然后信件将与最初发送的内容不完全相同。客户希望它完全一样


      不管什么方法是优越的,有时候最好选择哪种方法更安全。

      很少考虑的事情是PDF生成的数据,因为它在某个时间点存在。例如,基于上月数据的账单

      如果是这样,您是否会每月使用相同的模板生成此信函? 如果/当信件格式更改时,如果您动态重新生成的信件不再与发送给他们的信件相同,会发生什么情况。 是否可以将PDF流存储到数据库中


      我想我的意思是,您需要准确地表示发送给用户的内容,还是这样灵活?

      您需要保留发送给客户的信件记录,这有什么法医学原因吗?如果你打算动态地重新生成,你怎么知道未来的代码更改不会重写这封信(或者,如果信息被用于诉讼,至少客户可以在法庭上提出这一论点).

      我会把它保存起来,原因有两个

      1) 如果更改生成PDF的方式,您可能不希望更改历史项目。如果您每次都生成它们,它们要么会更改,要么您需要保留兼容代码以生成“旧式”记录

      2) 磁盘空间很便宜。用户的耐心是不够的。除非你真的需要存储,或者退出存储比生成PDF更难,否则要善待你的用户并把它存储起来


      显然,如果您每小时从一个稀疏数据集创建数千个这样的数据集,您可能没有存储空间。但是如果你有足够的空间,我会投票支持“使用它”

      是动态生成PDF还是静态存储PDF的问题听起来更像是一个法律问题,而不是编程问题


      如果您无法获得法律顾问对此提供指导,那么在谨慎方面犯错并将其静态存储将更加安全。

      只要PDF文档是永久性的(不仅仅是一份工作文件,还有一些官方签署并发送到公司内或公司外其他地方的文件),你应该在你的网络上有一份此PDF文件的副本,并在你的数据库中有一个指向此文件的链接

      您不能依赖可用数据在不同时间复制同一文档,主要原因是:

    • 数据可以更改(是的!假设信函由部门负责人签字,并且员工已经更改?)
    • 您的报告格式将更改(页眉、页脚、徽标等)
    • 您制作的文档由其他人保管,他们将使用文档中可用的数据

    • 我所做的一切都需要一个归档方法。我们实际上在表中添加了一个触发器,以便在插入或更新记录时生成新的PDF。我的建议是将所有信件信息保存在其自己的表中,从最初创建日期算起.因此,段落文本和客户数据不会改变。我是否通过动态方法获得(或失去)任何东西?例如,这种方法本质上是更多(或更少)的吗比将现有PDF放在某个驱动器上更安全?无论安全程度如何,PDF都不能像编辑数据一样轻松地重新生成并放入目录中。这两种情况都不可能发生,但都有可能发生。基于文件的方法的问题在于它们的实际管理。动态生成可以避免这一点。然而,缺点是,如果/当模板发生变化,这可能是一件好事,也可能是坏事。如果你有一个新的报头图形,可能业务部门希望它适用于所有信件,而不仅仅是新的信件。这是一个艰难的决定,需要你和业务部门之间做出决定。