使用 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 格式生成的报告的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 c# 在 asp.net 页面中部署或显示 s-s-rS 报告?