1. ホーム
  2. c#

[解決済み] 2つ(またはそれ以上)のPDFを結合する

2023-04-06 10:40:27

質問

背景は? 私は私の販売スタッフのための週報パッケージを提供する必要があります。このパッケージには、いくつかの(5-10)クリスタルレポートが含まれています。

問題です。 私は、ユーザーがすべてのレポートを実行したり、単一のレポートだけを実行したりできるようにしたいと思います。私は、レポートを作成してから、これを行うことができると考えていました。

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");
}

この方法では、レポートが詰まったフォルダを提供することになりますが、すべての週報を1つのPDFにして全員にメールしたいのです。そのため、それらを結合する必要があります。

サードパーティのコントロールをこれ以上インストールせずに、これを行う簡単な方法はありますか。私はすでに DevExpress と CrystalReports を持っており、これ以上あまり多くを追加したくありません。

foreach ループまたは別のループでそれらを結合するのが最良でしょうか。(または、別の方法)

どのように解決するのですか?

私は同じような問題を解決しなければなりませんでしたが、結局私が行ったのは、小さな pdfmerge ユーティリティを作成することでした。 PDFSharp プロジェクトで、基本的にMITライセンスです。

コードは非常にシンプルです。私は 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]);
    }
}