プロジェクト ファイルを安全にアーカイブ!
今回のブログでは BCL easyPDF SDK を使用して、複数の文書ファイルを結合し PDF に変換するアプリケーションの開発方法を紹介します。
オフィスで日々発生する多種多様な文書をどのように管理していますか。PDF による文書の記録やアーカイブする管理方法を耳にしたことはありますか。今、PDF を使った文書管理が多くの企業から注目を浴びています。
なぜ、PDF が好まれるのでしょうか。
1 つに、変更を加えることができないという PDF の特性が挙げられます。そして、一度プロジェクトが終了したら、すべてのドキュメントを PDF 化することで持ち運び可能な 1 つのファイルとして安全にデータベース上に保管することができます。
複数の文書を PDF 化するツールを作成
では、BCL easyPDF SDK を使って複数の文書を PDF 化するツールを作成していきます。
下記の条件を満たすアプリケーションを構築していきましょう。
- プロジェクト フォルダー内で形式の異なるファイルを1 つに結合
- これらのファイルを 1 つの PDF ファイルに変換 (アーカイブ用)
- 各ページのヘッダーに、変換した日時を追加
- ドキュメントのすべてのページに透かし (「Archive」などの表記) を追加
今回は、C# を使って BCL easyPDF SDKで PDF に変換する ビルドイン アプリケーションを開発していきます。
コーディング処理には、3 つの主要なメソッドを使用します。まずは、2 つの特殊なメソッドを参照するための、基本となるメソッドから始めたいと思います。
まずは、下のコードを使用して環境を整えていきます。
- 使用しているファイル ディレクトリを設定
- ファイル ディレクトリが存在していることを確認
- 入力ファイルを並べ替えるための情報を設定
今回は、一般的なファイル形式対象とします。
string iDIR = "" List<string> iFILs = new List<string>(); List<string> mFILs = new List<string>(); List<string> fFILs = new List<string>(); List<string> cFILs = new List<string>() { ".doc", ".docx", ".rtf", ".txt", ".xls", ".xlsx", ".htm", ".html" }; if (args.Length >= 1) { iDIR = args[0]; } if(Directory.Exists(iDIR))
次に、ディレクトリ内のファイルのリストを取得します。作成したリストを並べ替え、アプリが実行するファイル拡張子をリストしている cFILS のリスト内に含まれるファイルのみを PDF に変換します。
string[] tiFILs = Directory.GetFiles(iDIR); foreach(string s in tiFILs) { string ext = Path.GetExtension(s).ToLower(); if (cFILs.Contains(ext)) { iFILs.Add(s); } }
そのあと、それぞれのファイルを変換していきます。ファイル変換が問題なく終了すれば、mFILs 配列に出力ファイルの名前を追加していきます。これにより、ファイルの結合を行う際に必要なファイル名のリストを取得します。
foreach(string s in iFILs) { string cvr = Convert(s); if (File.Exists(cvr)) { mFILs.Add(cvr); } else { fFILs.Add(s + ":" + cvr); } }
ファイルをすべて変換した後は、ファイルの配列を 1つの PDF に結合します。今回はデモなので中間ファイルは削除しません。本番のアプリケーションではこれらのファイルを削除するか、またはメモリー上で変換処理を実行することを推奨します。
if (mFILs.Count > 0) { res = Merge(mFILs.ToArray(), iDIR); }
次に変換メソッドを見ていきます。これは、ファイルを変換するだけでなく、PDFSetting オブジェクトを使用して 1 つのメソッド呼び出しのみで 自動的に “ARCHIVE” 透かしと変換見出しをすべてのページに適応します。それに加えて、BCL easyPDF SDK では、それぞれのページごとの固有の設定による透かしを適用することもできます。
Printer oPRIN = new Printer(); PrintJob oPJOB = oPRIN.PrintJob; try { PDFSetting oPSET = oPJOB.PDFSetting; oPSET.set_Watermark(0, true); oPSET.set_WatermarkText(0, "ARCHIVE"); oPSET.set_WatermarkFirstPageOnly(0, false); oPSET.set_WatermarkHPosition(0, prnWmarkHPosition.PRN_WMARK_HPOS_CENTER); oPSET.set_WatermarkVPosition(0, prnWmarkVPosition.PRN_WMARK_VPOS_CENTER); oPSET.set_WatermarkZOrder(0, prnWmarkZOrder.PRN_WMARK_ZORDER_TOP); oPSET.set_WatermarkTextAlignment(0, prnWmarkAlignment.PRN_WMARK_ALIGN_LEFT); oPSET.set_WatermarkHOffset(0, 0); oPSET.set_WatermarkVOffset(0, 0); oPSET.set_WatermarkFontName(0, "Arial"); oPSET.set_WatermarkFontSize(0, 100); oPSET.set_WatermarkAngle(0, 60); oPSET.set_WatermarkOutlineOnly(0, true); oPSET.set_WatermarkColor(0, 0x0); oPSET.set_WatermarkOpacity(0, 40); oPSET.set_Watermark(1, true); oPSET.set_WatermarkText(1, "Archived On :: " + DateTime.Now); oPSET.set_WatermarkFirstPageOnly(1, false); oPSET.set_WatermarkHPosition(1, prnWmarkHPosition.PRN_WMARK_HPOS_LEFT); oPSET.set_WatermarkVPosition(1, prnWmarkVPosition.PRN_WMARK_VPOS_TOP); oPSET.set_WatermarkZOrder(1, prnWmarkZOrder.PRN_WMARK_ZORDER_TOP); oPSET.set_WatermarkTextAlignment(1, prnWmarkAlignment.PRN_WMARK_ALIGN_LEFT); oPSET.set_WatermarkHOffset(1, 1); oPSET.set_WatermarkVOffset(1, 0.5); oPSET.set_WatermarkFontName(1, "Arial"); oPSET.set_WatermarkFontSize(1, 8); oPSET.set_WatermarkAngle(1, 0); oPSET.set_WatermarkOutlineOnly(1, false); oPSET.set_WatermarkColor(1, 0x0); oPSET.set_WatermarkOpacity(1, 100); oPJOB.PrintOut(iFile, iFile + ".pdf"); res = iFile + ".pdf"; } catch(PrinterException ex) { res = "ERROR : " + iFile + " : " + ex.Message; res += @"\n" + " CRM : " + oPJOB.ConversionResultMessage; res += @"\n" + " PRM : " + oPJOB.PrinterResultMessage; } finally { oPRIN.Dispose(); }
PDF ファイルの変換と処理が完了したら、次にすべての PDF を結合していきます。結合メソッドはとても簡単です。BCL easyPDF SDK では、ファイルの配列リストを利用してファイルを結合できるメソッドを用意しています。これは、MergeBatch と呼ばれます。
PDFProcessor oPROC = new PDFProcessor(); try { oPROC.OptimizeAfterEachProcess = true; oPROC.MergeBatch(iFiles, iDIR + "Output.pdf"); oPROC.Optimize(iDIR + "Output.pdf", iDIR + "Output.pdf", ""); res = "SUCCESS" + " :: Output File :: " + iDIR + "Output.pdf"; } catch(PDFProcessorException ex) { res = "ERROR : " + ex.Message; }
これですべての作業が完了し、複数のファイルを PDF に結合、変換できるアプリケーションが完成しました。これで、プロジェクトのデータを安全かつ大切に保管することができるようになりました。さらに、マウス クリックによるアクセスが可能になり、文章を紛失する恐れもありません。
BCL easyPDF SDK の機能についてもっと知りたい場合は、弊社 Web サイトをご確認ください。異なるプログラミング言語ですべての PDF を操作する方法についても是非ご確認ください。
参考資料「Archiving your project’s files in PDF」11/21/2018