如何通过 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(); 
} 

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

请您参考如下方法:

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

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

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

您可以在 chapter 6 中找到详细信息(特别是 iText in Action — 2nd Edition 的第 6.4 节) 。 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 文档导入页面。主要缺点是导入页面的所有交互功能(注释、书签、字段等)都会在此过程中丢失。


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!