CubePDF シリーズ (CubePDF、CubePDF Utility、CubePDF Page) は GUI アプリケーションとして設計されているため、他のプログラムとの連携やコマンドラインからの利用は困難である事が予想されます。一方 CubePDF シリーズは、各種 GUI アプリケーションと並行して、CubePDF SDK と銘打って各種ライブラリも無償 (OSS) で公開しています。
- NuGet Packages
- Cube.Pdf
- Cube.Pdf.Itext
- Cube.Pdf.Pdfium
- Cube.Pdf.Ghostscript
- Cube.Pdf.Converter ※ CubePDF の内部処理
- GitHub リポジトリ
この記事では、上記の CubePDF SDK を利用してコマンドラインに指定された PDF ファイルおよびビットマップ画像ファイル (BMP, PNG, JPEG, TIFF) を全て結合して 1 つの PDF ファイルとして出力するプログラムを紹介します。尚、ここで紹介するサンプルプログラムのプロジェクト一式およびビルドした実行ファイル群は下記から取得する事ができます(zip ファイルを解凍し、生成されたフォルダーにある CubePdfMerge.exe を実行する事で PDF ファイルの結合が可能)。
using Cube.Collections; using Cube.Pdf; using Cube.Pdf.Itext; using Cube.Pdf.Extensions; static class Program { static void Main(string[] src) { var args = new ArgumentCollection(src); using var writer = new DocumentWriter(); foreach (var f in args) { if (f.ToLower().EndsWith(".pdf")) writer.Add(new DocumentReader(f)); else writer.Add(new ImagePageCollection(f)); } writer.Save(args.Options["o"]); } }
このプログラムは、プログラムの -o オプションで指定されたパスを出力先として、それ以外の引数で指定された全ファイルの結合を試みます。この時、拡張子が .pdf なファイルを PDF ファイルとして、それ以外のファイルをビットマップ画像ファイルとして扱います。PDF ファイルにパスワードが設定されている場合の処理や文書プロパティ、セキュリティ設定等の処理は省略されていますので、それらの処理が必要な場合は適時追加・修正して下さい。
CubePDF SDK は、実際に CubePDF シリーズのアプリケーションで使用しているものですので、生成される PDF ファイルはそれらのものと同品質となります。参考までに、CubePDF Page の実装コードへのリンクを記載します。これを見ても分かるように、上記サンプルコードと実際の実装コードにはそこまで大きな違いはありません。