c# - 如何合并多个 pdf 文件(在运行时生成)?

标签 c# asp.net pdf itextsharp rdlc

如何通过 ItextSharp 合并多个 pdf 文件(在运行时生成)然后打印它们。

我找到了以下 link但是考虑到存储的 pdf 文件,该方法需要 pdf 名称,这不是我的情况。


我有多个报告,我将通过此方法将它们转换为 pdf 文件:

private void AddReportToResponse(LocalReport followsReport)
{
    string mimeType;
    string encoding;
    string extension;
    string[] streams = new string[100];
    Warning[] warnings = new Warning[100];
    byte[] pdfStream = followsReport.Render("PDF", "", out mimeType, out encoding, out extension, out streams, out warnings);
  //Response.Clear();
  //Response.ContentType = mimeType;
  //Response.AddHeader("content-disposition", "attachment; filename=Application." + extension);
  //Response.BinaryWrite(pdfStream);
  //Response.End();
}

现在我想将所有生成的文件(Bytes)合并到一个 pdf 文件中进行打印

最佳答案

如果要使用iText(Sharp)合并源文档,有两种基本情况:

  1. 您确实想要合并文档,以原始格式获取页面,尽可能多地传输它们的内容和交互式注释。在这种情况下,您应该使用基于 Pdf*Copy* 成员的解决方案。类族。

  2. 您实际上想要将源文档中的页面整合到一个新文档中,但希望新文档控制一般格式并且不关心原始文档中的交互功能(注释...)(甚至想摆脱它们)。在这种情况下,您应该使用基于 PdfWriter 的解决方案。类。

您可以在 chapter 6 中找到详细信息(特别是第 6.4 节)iText in Action — 2nd Edition . Java示例代码可访问here和 C# 化版本 here .

使用 PdfCopy 的简单示例是Concatenate.java/Concatenate.cs .核心代码是:

byte[] mergedPdf = null;
using (MemoryStream ms = new MemoryStream())
{
    using (Document document = new Document())
    {
        using (PdfCopy copy = new PdfCopy(document, ms))
        {
            document.Open();

            for (int i = 0; i < pdf.Count; ++i)
            {
                PdfReader reader = new PdfReader(pdf[i]);
                // loop over the pages in that document
                int n = reader.NumberOfPages;
                for (int page = 0; page < n; )
                {
                    copy.AddPage(copy.GetImportedPage(reader, ++page));
                }
            }
        }
    }
    mergedPdf = ms.ToArray();
}

在这里pdf可以定义为 List<byte[]>立即包含源文档(适用于合并中间内存文档的用例)或作为 List<String>包含源文档文件的名称(适用于从磁盘合并文档)。

引用章节末尾的概述总结了所提到的类的用法:

  • PdfCopy :从一个或多个现有 PDF 文档复制页面。主要缺点:PdfCopy不检测冗余内容,并且在连接表单时失败。

  • PdfCopyFields :将不同表单的字段合并为一个表单。可用于避免使用 PdfCopy 连接表单时表单域遇到的问题.内存使用可能是个问题。

  • PdfSmartCopy :从一个或多个现有 PDF 文档复制页面。 PdfSmartCopy能够检测冗余内容,但它需要比 PdfCopy 更多的内存和 CPU .

  • PdfWriter :从头开始生成 PDF 文档。可以从其他 PDF 文档导入页面。主要缺点是导入页面的所有交互功能(注释、书签、字段等)都会在此过程中丢失。

关于c# - 如何合并多个 pdf 文件(在运行时生成)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15925616/

相关文章:

c# - 使用超出范围的子字符串拆分字符串

c# - Lat 长顶点的顺序列表以在 C# 中形成多边形

python - 使用 QWebView 显示 PDF 文件

javascript - 从 AJAX 下载 PDF 文件成功回调

java - ITextPDF - 矩形颜色重叠/隐藏 block 的文本

c# - 为每个带有 Rx 的事件生成带有延迟的第二个后续事件

c# - 哪种聚类算法适用于不知道k的一维列表?

javascript 代码未触发

asp.net - 2 个要序列化的数组

c# - Entity Framework 能否在保存时自动将日期时间字段转换为 UTC?