使用 s-s-rS 和 ASP.NET 合并以 Pdf 格式生成的报告

Posted

技术标签:

【中文标题】使用 s-s-rS 和 ASP.NET 合并以 Pdf 格式生成的报告【英文标题】:Merging Reports Generated in Pdf format by using s-s-rS and ASP.NET 【发布时间】:2011-12-03 05:19:08 【问题描述】:

有没有办法通过将许多 rdlc 报告合并到 .net 框架中的一个大 pdf 中来创建报告书。 通常我们通过 Datasource 生成 pdf 到 rdlc 报告,然后我们将其渲染为 pdf 形式。那么在渲染时我们可以合并多个 rdlc 生成的 pdf 文件吗? 是否有任何可用的工具可以合并使用 s-s-rS(SQL Server 报告服务)生成的 pdf。

【问题讨论】:

【参考方案1】:

我已成功使用http://khsw.blogspot.com/2006/04/merge-pdf-files-using-itextsharp.html 的代码将多个现有 PDF 合并到一个文档中。

【讨论】:

以上要求 pdf 实际存在而不是合并。如果我们使用 Byte 流将 localreport 渲染为 pdf 进行合并,而不是渲染为 pdf,这可能吗【参考方案2】:

我知道您可以将 PDF 与 iTextSharp 合并。试试这样的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

using iTextSharp.text;
using iTextSharp.text.pdf;

namespace Components.Pdf

    public class PdfDocumentMerger
    
        private List<string> sourceFileList;

        #region constructors

        public PdfDocumentMerger()
        
            //initialize the source file list
            sourceFileList = new List<string>();
        

        public PdfDocumentMerger(params string[] fileNames) : this()
        
            sourceFileList.AddRange(fileNames.AsEnumerable<string>());
        

        #endregion

        /// <summary>
        /// Merges multiple PDF documents into one document
        /// </summary>
        /// <param name="DestinationFileName">The name and path to the merged document</param>
        /// <returns>The name and path to the merged document, if successful. Otherwise, the return value is an empty string</returns>
        public string Merge(string destinationFileName)
        
            try
            
                int sourceIndex = 0;
                PdfReader reader = new PdfReader(sourceFileList[sourceIndex]);
                int sourceFilePageCount = reader.NumberOfPages;

                Document doc = new Document(reader.GetPageSizeWithRotation(1));
                PdfWriter writer = PdfWriter.GetInstance(doc, new FileStream(destinationFileName, FileMode.Create));
                doc.Open();

                PdfImportedPage page;
                PdfContentByte contentByte = writer.DirectContent;                

                int rotation;
                while (sourceIndex < sourceFileList.Count)
                
                    int pageIndex = 0;
                    while (pageIndex < sourceFilePageCount)
                    
                        pageIndex++;
                        doc.SetPageSize(reader.GetPageSizeWithRotation(pageIndex));
                        doc.NewPage();

                        page = writer.GetImportedPage(reader, pageIndex);
                        rotation = reader.GetPageRotation(pageIndex);

                        if (rotation.Equals(90 | 270))
                            contentByte.AddTemplate(page, 0, -1f, 1f, 0, 0, reader.GetPageSizeWithRotation(pageIndex).Height);
                        else
                            contentByte.AddTemplate(page, 1f, 0, 0, 1f, 0, 0);                   
                    

                    sourceIndex++;
                    if (sourceIndex < sourceFileList.Count)
                    
                        reader = new PdfReader(sourceFileList[sourceIndex]);
                        sourceFilePageCount = reader.NumberOfPages;
                    
                

                doc.Close();
            
            catch
            
                throw;
            

            return destinationFileName;
        
    

【讨论】:

以上是关于使用 s-s-rS 和 ASP.NET 合并以 Pdf 格式生成的报告的主要内容,如果未能解决你的问题,请参考以下文章

如何在 asp.net 应用程序中本地使用 s-s-rS

s-s-rS 报告未在 ASP.NET 网站中呈现

在 ASP.net MVC 站点中查看 s-s-rS 报告

如何使用 c# 在 asp.net 页面中部署或显示 s-s-rS 报告?

s-s-rS 报告查看器 + ASP.NET 凭据 401 异常

导出到excel时如何取消合并s-s-rs中的单元格以尝试排序