【问题标题】:Concatenate two PDF files saved as a blob连接两个保存为 blob 的 PDF 文件
【发布时间】:2021-04-15 13:00:53
【问题描述】:

我正在创建一个网络应用程序。为此,我使用 Microsoft SQL Server 2016 (SP1-GDR) (KB4505219) - 13.0.4259.0 (X64) 和 ASP.NET MVC 5。

在我的数据库中,我有一个包含 PDF 文件的表格。我已将文件内容作为 blob 存储在该表中。我还将文件名存储在该表中。

现在我想让我的客户能够下载多个 PDF 文件。 PDF 文件应该被连接起来。因此,如果客户请求所有 PDF 文件,他或她应该将所有 PDF 文件连接到一个 PDF 文件中。

我想到了两种连接 PDF 文件的方法。

  • 首先是在 SQL Server 查询中连接 PDF 文件。因此,当我从数据库中获取 blob 时,它已经被连接起来,我不必在 C# 代码中做任何进一步的事情。
  • 二是从数据库中获取所有的blob,并在C#中连接这些blob。

我尝试使用 SQL Server 中的 COALESCE 函数来连接 SQL Server 中的 blob。

DECLARE @blobcontent varbinary(max);

SELECT 
    @blobcontent = COALESCE(@blobcontent, 0x0) + FileTable.fileContent
FROM 
    FileTable;

SELECT @blobcontent;

这对我不起作用。

因此,在从数据库中获取所有 blob 后,我尝试在 C# 中连接 blob。我尝试创建一个新的字节数组变量并将所有 blob 放在新的字节数组中。

...
var file1 = GetFileById(1); /*the function GetFileById(int id) returns a tuple (byte[], string) with the file-content as the first Element and the file-name as the second element*/
var file2 = GetFileById(2);
var concatenatedFile = file1.Item1.Concat(file2.Item1).ToArray();
...

这对我也不起作用。

有解决这个问题的聪明方法吗?

【问题讨论】:

  • 这两种方式都行不通,因为两个文件的连接不会生成一个文件(它会被损坏)。您只需在应用服务器上执行此操作,只需使用一些库(如 itextsharp 或 aspose)创建一个全新的文件,或者您可以创建一个包含所有文件的单个 zip 文件。
  • 不,它没有@Achtung,因为我没有使用 iTextSharp
  • @PSK 这就是我的想法......你已经证实了我的怀疑。谢谢。
  • 这是一种可以使用的工具。如果您不想使用那个选择另一个。但是你需要一个工具。

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


【解决方案1】:

好的。正如我所怀疑的那样,不可能以这种形式连接 blob(参见 PSK 的评论)。我将通过简单地向客户端提供 zip 文件来解决这个问题,因为我不想为此包含任何其他库。

【讨论】:

    猜你喜欢
    • 2019-04-17
    • 1970-01-01
    • 2018-06-11
    • 2019-02-15
    • 1970-01-01
    • 2021-05-18
    • 2018-05-18
    • 1970-01-01
    • 2015-04-14
    相关资源
    最近更新 更多