C# 合并PDF并作为FileContentResult返回
我有一个ActionResult,可以很好地返回PDFC# 合并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
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