CubePDFのソースコード探訪 ダイアログ非表示でPDF出力に成功
前回、CubePDFのソースコードからダイアログを表示しているプログラムコードを探しだした。次は、そのダイアログを表示しているプログラムコードを呼び出しているコードを探訪する。
いわゆる、main()を探し出したい。
こんな機能はあるかな?と考えて、先のShow()メソッドを右クリックすると、[Shift + F12]に「すべての参照を検索」という項目が表示された。そのメソッドを呼び出しているコードを検索してくれるのだろう。
こんな便利なものはない。これからはVisualStudioを使おう。
検索した結果は一つしかなかったので簡単。
まさにMain()メソッドが見つかった。ただし、私がC#言語を理解していないので、これがどう呼び出されるのかは把握していない。
以下のように定義されているが、マルチスレッド的なことだろうか。
[STAThread]
static void Main(string[] raw)
Show()メソッドを呼び出しているのはMain()メソッドの最後の以下の部分になる。
if (args.Options.ContainsKey("SkipUI")) Execute(setting);
else Show(setting);
args.Options.ContainsKey()というのは、プログラムの引数だろうか。argsはUNIXのコマンドラインプログラムの引数の名前によく使われる。[SkipUI]という引数が渡されていると、Show()を経由しないので、そもそもCubePDFにはダイアログをスキップする機能が標準で搭載されている。
ただし、「CubePDF SkipUI」で検索してもなにも出てこないので、標準の機能ではないのか、実装途中なのか、先のCubeVP用に用意されているもので、CubePDFでは使えないのかは不明。
だが、引数で条件分岐しているということは、条件をテストすればダイアログを表示せずにPDF出力ができるのか判断できる。
if (args.Options.ContainsKey("SkipUI") || true) Execute(setting);
else Show(setting);
先のコードをこのように変更し、ソリューションをリビルド。
出来上がった実行ファイルをインストールしているCubePDFの実行ファイルと入れ替えたが、それではうまく行かなかった。
リリースバージョンとGitHubからダウンロードしたコードでは大幅にプログラムが異なるので、その他のライブラリ等も実行ファイルに合わせて更新する必要がある。
なので、プログラムフォルダのCubePDFフォルダをまるごとバックアップを取り、その中に実行ファイルのあるフォルダの中身をすべて上書きコピー。
そしてもう一度、CubePDFの印刷を試してみると、見事成功。デスクトップにPDFが出力された。
ここでわかったのは、CubePDFには標準でダイアログを経由せずにPDFを出力する機能がある。だが、それがあまり紹介されていないのか、あまり知られていない(私が調べた限りでは)。
そして、ダイアログを経由しない場合は上書き設定等になっていると問答無用で上書きされる問題もあるので、連続して出力したい場合など、連番で特定のフォルダに出力する設定が必要になる。
そういった環境設定プログラムを組み込めば、ダイアログを表示せずに動くCubePDFが出来上がりそうだ。