C# を使って PDF を結合、分割、並べ替える方法

はじめに

世界には 2.5 兆枚以上の PDF が存在すると推定されており、現在の世界人口を考慮すると、PDF と人間の比率は約 300:1 です。そのため、PDF は情報の保存と共有において最も人気のあるフォーマットの一つとなっています。PDF は汎用性、利便性、コンパクトさ、安全性など、様々な利点を備えているため、なぜこれほど人気があるのかは容易に理解できます。

しかし、PDF、特に大容量の PDF を扱う場合、ページの追加や切り取りといった PDF 操作タスクを処理する際に、いくつかの重要な課題が生じます。xodo.comXodo PDF StudioApryse WebViewer などのアプリベースの PDF エディターを使用すれば、これらのタスクやその他の多くのタスクを処理できますが、プロセスは依然として部分的に手作業になります。

この手作業の要素を解決するには、Apryse SDK に含まれているような PDF 操作ライブラリを使用して、これらのタスクを自動化できます。これらの例では C# を使用しますが、SDK は C++、Java、Python、Node.js などの他の言語やフレームワークでも利用可能です。

始め方

開始するには、次の手順に従ってください。

  1. Apryse Server SDK をダウンロードしてください。今回は C# .NET PDF ライブラリを選択します。
  2. 次の手順に従って、.zip ファイルからフォルダーを抽出し、.NET をセットアップします。
  3. 無料トライアルキーを入手してください。
  4. 以下のサンプル タスクを処理するために必要な完全なコードについては、ドキュメントをご覧ください。PDFPageTestCS をベースにした各タスクの具体的なコードのサンプルも掲載しています。

準備が整ったので、実際に何ができるか見ていきましょう。このブログでは、以下の方法をご紹介します。

  • PDF を複数のページに分割する
  • 複数の PDF を 1 つに結合する
  • ある PDF から別の PDF にページを挿入する
  • PDF のページを並べ替える

PDF を複数のページに分割する

こんなシナリオを想像してみてください。あなたはたくさんのレポートを扱っていますが、ほとんどの場合、それらは問題なく処理できます。しかし、チームの最新のレポートを受け取ったところ、何らかの理由で、末尾に多くのページが誤って追加されてしまい、ドキュメントが本来の長さの 2 倍になってしまいました。そのため、必要な部分だけをまとめるために、PDF を複数のページに分割する必要があります。

次のコードを使用します。

// Sample 1 - Split a PDF document into multiple pages
try
{
	Console.WriteLine("_______________________________________________");
	Console.WriteLine("Sample 1 - Split a PDF document into multiple pages...");
	Console.WriteLine("Opening the input pdf...");

	using (PDFDoc in_doc = new PDFDoc(input_path + "newsletter.pdf"))
	{
		in_doc.InitSecurityHandler();

		int page_num = in_doc.GetPageCount();
		for (int i = 1; i <= page_num; ++i) 
		{
			using (PDFDoc new_doc = new PDFDoc()) 
			{
				new_doc.InsertPages(0, in_doc, i, i, PDFDoc.InsertFlag.e_none);
				new_doc.Save(output_path + "newsletter_split_page_" + i + ".pdf", SDFDoc.SaveOptions.e_remove_unused);
				Console.WriteLine("Done. Result saved in newsletter_split_page_" + i + ".pdf");
			}
		}
	}
}
catch (Exception e)
{
	Console.WriteLine("Exception caught:\n{0}", e);
}

複数の PDF を 1 つに結合する

レポートを複数のページに分割したので、ページを並べ替えて不要なページを削除できます。以下のコードを使用して、残りのページを 1 つの綺麗なレポートに結合できます。

// Sample 2 - Merge several PDF documents into one
try
{
	Console.WriteLine("_______________________________________________");
	Console.WriteLine("Sample 2 - Merge several PDF documents into one...");

	using (PDFDoc new_doc = new PDFDoc()) 
	{
		new_doc.InitSecurityHandler();
		int page_num = 15;
		for (int i = 1; i <= page_num; ++i) 
		{
			Console.WriteLine("Opening newsletter_split_page_" + i + ".pdf");
			using (PDFDoc in_doc = new PDFDoc(output_path + "newsletter_split_page_" + i + ".pdf")) 
			{
				new_doc.InsertPages(i, in_doc, 1, in_doc.GetPageCount(), PDFDoc.InsertFlag.e_none);
			}
		}
		new_doc.Save(output_path + "newsletter_merge_pages.pdf", SDFDoc.SaveOptions.e_remove_unused);
	}
	Console.WriteLine("Done. Result saved in newsletter_merge_pages.pdf");
}
catch (Exception e)
{
	Console.WriteLine("Exception caught:\n{0}", e);
}

ある PDF から別の PDF にページを挿入する

統合レポートが完成し、レビューに送ろうとしたところ、上司から各従業員のプロフィール ページを追加するよう指示されました。幸い、既にすべてのプロフィールページが別の PDF ファイルに保存されていたので、新しいレポート全体に挿入するだけで済みます。

これを行うには次のコードが必要です。

// Sample 4 - Inserts a page from one document at different
// locations within another document                       
try   
{	 
	Console.WriteLine("_______________________________________________");
	Console.WriteLine("Sample 4 - Insert a page at different locations...");
	Console.WriteLine("Opening the input pdf...");

	using (PDFDoc in1_doc = new PDFDoc(input_path +  "newsletter.pdf"))
	using (PDFDoc in2_doc = new PDFDoc(input_path + "fish.pdf"))
	{
		in1_doc.InitSecurityHandler();
		in2_doc.InitSecurityHandler();

		Page src_page = in2_doc.GetPage(1);
		PageIterator dst_page = in1_doc.GetPageIterator(1);
		int page_num = 1;
		while (dst_page.HasNext()) {
			if (page_num++ % 3 == 0) {
				in1_doc.PageInsert(dst_page, src_page);
			}
			dst_page.Next();
		}

		in1_doc.Save(output_path +  "newsletter_page_insert.pdf", 0);
		Console.WriteLine("Done. Result saved in newsletter_page_insert.pdf...");
	}
}
catch(Exception e)
{
	Console.WriteLine("Exception caught:\n{0}", e);
}

PDF のページを並べ替える

先ほどのレポートの例で言うと、最新のレポートを受け取り、上司に送信する前に確認する準備が整いました。問題は、スキャンした人が逆順にスキャンしてしまったため、まずページの順序を並べ替える必要があることです。この例では、ページのコピーと削除の操作を使用してページの順序を変更し、最終的にページが逆順に並んだ新しいファイルを作成します。

// Sample - Reorder the pages of a PDF by reversing the order
try
{
	Console.WriteLine("_______________________________________________");
	Console.WriteLine("Sample - Reorder the pages of a PDF  by reversing the order...");
	Console.WriteLine("Opening the input pdf...");

	using (PDFDoc in_doc = new PDFDoc(input_path + "newsletter.pdf"))
	{
		in_doc.InitSecurityHandler();
		
		int page_num = in_doc.GetPageCount();
		for (int i = 1; i <= page_num; ++i)
		{		
			PageIterator itr = in_doc.GetPageIterator(i);
			Page page = itr.Current();
			in_doc.PageRemove(itr);
			in_doc.PagePushFront(page);
		}
		in_doc.Save(output_path +  "newsletter_reorder_pages.pdf", 0);
		Console.WriteLine("Done. Result saved in newsletter_reorder_pages.pdf...");
	}
}
catch (Exception e)
{
	Console.WriteLine("Exception caught:\n{0}", e);
}

その他の例

もちろん、この SDK では他にもたくさんのことができます。ページの削除トリミングなどの例については、ドキュメントをご覧ください。

まとめ

PDF を複数ページに分割したり、ページを追加したりするなど、PDF を操作する必要がある場合は、Apryse PDF SDK が簡単かつ効率的に処理します。これらの例は、基本的な操作方法を示しており、これらのコードを基に、複雑な PDF 操作タスクに対応できる、より堅牢な操作を作成できます。

Apryse では無償トライアルを提供しています。是非お試しください。

Apryse 製品の詳細は、弊社 Web サイトをご確認ください。

記事参照:
© 2025 Apryse
How to Split, Merge, and Reorder a PDF Using C#

タイトルとURLをコピーしました