c# - 合并两个(或更多)PDF

标签 c# .net winforms pdf

背景:我需要为我的销售人员提供每周报告包。这个包包含几个 (5-10) 个 Crystal 报表。

问题: 我想允许用户运行所有报告,也只运行一个报告。我想我可以通过创建报告然后执行以下操作来做到这一点:

List<ReportClass> reports = new List<ReportClass>();
reports.Add(new WeeklyReport1());
reports.Add(new WeeklyReport2());
reports.Add(new WeeklyReport3());
<snip>

foreach (ReportClass report in reports)
{
    report.ExportToDisk(ExportFormatType.PortableDocFormat, @"c:\reports\" + report.ResourceName + ".pdf");
}

这会为我提供一个装满报告的文件夹,但我想通过电子邮件向每个人发送一份包含所有每周报告的 PDF 文件。所以我需要将它们结合起来。

有没有无需安装任何第三方控件的简单方法?我已经有 DevExpress 和 CrystalReports,我不想再添加太多。

最好将它们组合在 foreach 循环中还是在单独的循环中? (或其他方式)

最佳答案

我不得不解决一个类似的问题,我最终做的是创建一个使用 PDFSharp 的小型 pdfmerge 实用程序。本质上是麻省理工学院许可的项目。

代码非常简单,我需要一个 cmdline 实用程序,因此与 PDF 合并相比,我有更多的代码专门用于解析参数:

using (PdfDocument one = PdfReader.Open("file1.pdf", PdfDocumentOpenMode.Import))
using (PdfDocument two = PdfReader.Open("file2.pdf", PdfDocumentOpenMode.Import))
using (PdfDocument outPdf = new PdfDocument())
{                
    CopyPages(one, outPdf);
    CopyPages(two, outPdf);

    outPdf.Save("file1and2.pdf");
}

void CopyPages(PdfDocument from, PdfDocument to)
{
    for (int i = 0; i < from.PageCount; i++)
    {
        to.AddPage(from.Pages[i]);
    }
}

关于c# - 合并两个(或更多)PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/808670/

相关文章:

c# - XNA 的 Vector2 类,属性在尝试更改其值时返回错误

c# - 如何访问 Task.Factory.StartNew 中的 HttpContext.Current?

c# - .NET 4.7 xunit 测试项目在引用 .NET Standard 1.6 项目时无法构建

winforms - 具有 2 个表单的命名空间

c# - 如何使用 C# 禁用 Windows 文本框上的右键单击上下文菜单?

c# - 如果用户单击 "X"按钮,则从子窗体关闭父窗体

c# - 如何在 iOS 上的 unity3d 中生成(挤压)网格时提高性能?

c# - 验证失败(C# .NET HMACSHA256 类)

c# - Firebase:如何将身份验证添加到 cli 应用程序中

c# - 使用 LINQ 将多个列表合并为一个列表