C# 合并PDF并作为FileContentResult返回

C# 合并PDF并作为FileContentResult返回,c#,asp.net,.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,.net,Asp.net Mvc,Asp.net Mvc 4,我有一个ActionResult,可以很好地返回PDF public ActionResult TrainingHours(int id) { EmployeeModel model = new EmployeeModel(id); if (!model.CheckEmployeeAccess()) throw new HttpException(403, "Access Denied"); byte[] repo

我有一个ActionResult,可以很好地返回PDF

public ActionResult TrainingHours(int id)
    {
        EmployeeModel model = new EmployeeModel(id);
        if (!model.CheckEmployeeAccess())
            throw new HttpException(403, "Access Denied");

        byte[] report = model.GetTrainingHoursReport(id);
        return File(report, Constants.PdfMimeType, model.EmployeeHoursReportFileName);
    }
字节[]从LocalReport的Render(“PDF”,DeviceInfo String)方法返回,下载时看起来非常完美

客户希望能够单击一个链接,为一组人运行相同的报告,并将其合并为一个pdf供下载

  public ActionResult MassTrainingHours(int[] employeeIds)
    {
        if (employeeIds == null)
            return new EmptyResult();

        List<byte[]> reportsList = new List<byte[]>();
        foreach (int employeeId in employeeIds)
        {
            EmployeeModel model = new EmployeeModel(employeeId);
            reportsList.Add(model.GetTrainingHoursReport(employeeId));
        }
        Post.Domain.Services.PdfMerger merger = new Post.Domain.Services.PdfMerger();
        byte[] report = merger.MergeFiles(reportsList);

        return File(report, Constants.PdfMimeType, "TrainingHours.pdf");
PublicActionResult MassTrainingHours(int[]员工ID)
{
if(employeeIds==null)
返回新的EmptyResult();
列表报告列表=新列表();
foreach(在employeeId中输入employeeId)
{
EmployeeModel=新EmployeeModel(employeeId);
reportsList.Add(model.GetTrainingHoursReport(employeeId));
}
Post.Domain.Services.PdfMerger merge=新建Post.Domain.Services.PdfMerger();
字节[]报告=合并.MergeFiles(报告列表);
返回文件(报告,Constants.PdfMimeType,“TrainingHours.pdf”);
这是我使用iTextSharp合并PDF的类

public class PdfMerger
{
    public byte[] MergeFiles(List<byte[]> inputFiles)
    {
        MemoryStream outputMS = new MemoryStream();
        Document document = new Document();
        PdfCopy writer = new PdfCopy(document, outputMS);
        writer.CloseStream = false;

        PdfImportedPage page = null;

        document.Open();

        foreach (byte[] fileData in inputFiles)
        {
            PdfReader reader = new PdfReader(fileData);
            int n = reader.NumberOfPages;

            for (int i = 1; i <= n; i++)
            {
                page = writer.GetImportedPage(reader, i);
                writer.AddPage(page);
            }

            PRAcroForm form = reader.AcroForm;
            if (form != null)
                writer.CopyAcroForm(reader);
        }

        document.Close();

        return outputMS.ToArray();
    }
}
公共类PdfMerger
{
公共字节[]合并文件(列出输入文件)
{
MemoryStream outputMS=新的MemoryStream();
文档=新文档();
PdfCopy writer=新的PdfCopy(文档、输出);
writer.CloseStream=false;
PdfImportedPage=null;
document.Open();
foreach(输入文件中的字节[]文件数据)
{
PdfReader reader=新的PdfReader(文件数据);
int n=reader.NumberOfPages;
对于(int i=1;i