printToPdfFromDocuWorksFileはコンソールアプリケーションです。コンソールアプリケーションは、eDocArrangementのコマンド実行から呼び出すことが可能です。
DocuWorks Viewerの印刷機能※を使用して、DocuWorks文書をPDFファイルに変換します。
※ "Microsoft Print to PDF" や "DocuWorks PDF" などの仮想プリンターを使用します。物理プリンターを指定すればプリンターへの印刷を行うこともできます。
仮想プリンターを使用してPDFを出力するので、DocuWorks文書がテキストを持っていれば、出力されるPDFもテキストを保持したPDFとなります。
DocuWorks Viewer (dwviewer.exe)はコマンド実行時のオプションを指定することで、指定のDocuWorks文書を印刷することができます。
しかし、dwviewer.exeの仕様に以下の問題があり、無条件で呼び出すだけでは自動処理としては問題が生じます。
dwviewer.exeで印刷中のダイアログを表示しない「/spt」や「/oopnocancel」オプションを指定しても、XDWファイルが破損している場合や、プリンターのスプーラーがメモリ不足になった場合などは、エラーダイアログがでてしまう。
サービスプログラムや常駐アプリから実行した場合には、ダイアログが表示されてしまうケースがあるとダイアログを閉じることができないため、そこで処理が停止してしまいます。自動処理では致命的な問題となります。
そのため、printToPdfFromDocuWorksFileは以下の様な対策を行っています。
printToPdfFromDocuWorksFileが、dwviewer.exeを呼び出す前にDocuWorks文書がオープンできるかチェックします。
正常にオープンできなかった場合は、dwviewer.exeの呼び出しは行わず、エラー処理を行い処理を終了します。
DocuWorks ViewerやDocuWorks PDFがダイアログを表示すると、自動処理ではダイアログが表示されたままになり、DocuWorks Viewerのプロセスが残ったままの状態になります。
そこでprintToPdfFromDocuWorksFileは、DocuWorks ViewerやDocuWorks PDFのダイアログ表示を検出して、閉じる処理を試行します。その後プロセスが終了すれば、エラー処理を行います。
一定時間、ダイアログを閉じる処理を試行してもプロセスが終了しない場合は、エラー処理を行います。その場合、最終的にDocuWorks Viewerのプロセスが残ったままになる可能性があります。
"Microsoft Print to PDF" や "DocuWorks PDF"などの仮想プリンターに大量の印刷指示を行うと、仮想プリンターの動作が不安定になります。
printToPdfFromDocuWorksFileは仮想プリンターの印刷ジョブ数を確認して、最大で3つ以上にならないように待機します。
Windows11のバージョン24H2でプリンターキューを開いた状態でDocuWorks PDFやDocuWorks Viewerを使ってPDF変換を行うと、不完全なPDFが作成される問題が発生しています。
printToPdfFromDocuWorksFileを使用時はプリンターキューを開かないでください。printToPdfFromDocuWorksFileはプリンターキューが開かれていることを検出すると処理中のファイルをエラー処理します。
印刷ジョブから印刷中のページ数を取得できるため、一定時間ページ数に変化がない場合は、印刷に問題が発生している可能性があると判断できます。-pptoオプションを指定すると、指定した秒数の間ページ数が変化しない場合に、印刷ジョブをキャンセルしてエラー処理を行うようになります。
上記の対策を行うことでdwviewer.exeがエラーダイアログを出力することは、ほぼなくなりますが、未知の問題や仮想プリンター側の問題等で印刷が正常終了しないケースがあるかもしれません。
printToPdfFromDocuWorksFileはそのようなレアケースでも対処できるように、-ptoオプションを指定するとdwviewer.exeを呼び出したあと、一定時間制御が戻らない場合はprintToPdfFromDocuWorksFileのエラー処理を行います。
具体的には、印刷ジョブに対して一時停止、キャンセル処理を行います。通常はキャンセルを行ったあと、dwviewer.exeのプロセスは自動的に終了します。
キャンセルしてもdwviewer.exeのプロセスが終了しないケースがある場合は、-ftwtoを指定することでdwviewer.exeのプロセスに対して強制終了の指示を行うことができます。
デフォルト(-ptoオプションを指定しない場合)ではページ数が多いなど、様々なサイズのDocuWorks文書に対応する為、印刷処理が完了するまで待ち続けるようになっています。(処理時間の制限は設けていません)
DocuWorks Viewerや印刷処理が停止してしまう事がある場合は、-ptoオプションで適切なタイムアウト値を設定してください。
printToPdfFromDocuWorksFile.exe -i 入力DocuWorks文書ファイル名 -p プリンター名 [ドライバー名 [ポート名]] [-o 出力PDFファイル名] [-wf 作業フォルダ名] [-mdtw] [-sdf 文書変換成功時のDocuWorks文書ファイル移動フォルダ名] [-fdf 文書変換失敗時のDocuWorks文書ファイル移動フォルダ名] [-srdf] [-async] [-apmc 文書変換非同期プロセス最大数] [-asp] [-pto 文書変換タイムアウト] [-ppto ページ出力タイムアウト] [-ftwto] [-slf ログファイル名] [-flf エラーログファイル名] [-z 結果ファイル名] [-ec]
「name 1.txt」のように値にスペースが含まれる場合は、"name 1.txt" のようにダブルクォートで括ってください。
[]は省略可能な引数です。 引数の仕様は以下の通りです。
-i 入力DocuWorks文書ファイル名 | 変換元のDocuWorks文書ファイル名を指定します。 DocuWorks文書ファイルのドキュメントとバインダーに対応しています。 (拡張子 .xdw .xbd) |
---|---|
-p プリンター名 [ドライバー名 [ポート名]] |
変換に使用するプリンター名、ドライバー名、ポート名を指定します。 仮想プリンターの場合 -p "DocuWorks PDF" -o "D:\出力\test.pdf" -oを指定した場合、プリンター名のみ指定を行うと、プリンター名と同じ名前をドライバー名として使用します。 物理プリンターの場合 -p "Canon LBP622C" |
-o 出力PDFファイル名 |
出力するPDFファイル名を指定します。仮想プリンターを使用する場合に、出力ファイル名を指定します。物理プリンターを使用する場合は-oは指定しません。 出力先フォルダに同一ファイル名のファイルが存在する時は、ファイル名に連番を付与して重複しないファイル名で出力します。 出力先フォルダが存在しない時はフォルダを作成します。 -pでポート名を指定した場合はポート名を-oで指定した出力PDFファイル名で上書きします。 -oを指定すると指定した出力PDFファイルが作成されるまで待機する動作となります。 |
-wf 作業フォルダ名 | 文書変換で使用する作業フォルダを指定します。 |
-mdtw |
文書変換前にDocuWorks文書ファイルを作業フォルダーに移動します。 -mdtw スイッチを指定する時は、-sdf スイッチ、-srdf スイッチの何れかと -fdf スイッチで変換処理後のDocuWorks文書ファイル移動フォルダーなどを指定してください。 |
-sdf 文書変換成功時の入力DocuWorks文書ファイル移動フォルダー名 |
文書変換成功時のDocuWorks文書ファイル移動フォルダを指定します。 移動先フォルダに同一ファイル名のファイルが存在する時は、ファイル名に連番を付与して重複しないファイル名で移動します。 移動先フォルダが存在しない時はフォルダを作成します。 -mdtw スイッチを指定した時に適用されます。 |
-fdf 文書変換失敗時の入力DocuWorks文書ファイル移動フォルダー名 |
文書変換失敗時のDocuWorks文書ファイル移動フォルダを指定します。 移動先フォルダに同一ファイル名のファイルが存在する時は、ファイル名に連番を付与して重複しないファイル名で移動します。 移動先フォルダが存在しない時はフォルダを作成します。 -mdtw スイッチを指定した時に適用されます。 |
-srdf | 文書変換成功時にDocuWorks文書ファイルを削除します。 -mdtw スイッチを指定した時に適用されます。 -sdf スイッチが指定されていた時は無視されます。 |
-async | 文書変換を非同期実行します。文書変換を実行する別プロセスを起動後、自プロセスはすぐに終了します。 |
-apmc 文書変換非同期プロセス最大数 | 文書変換を実行する非同期プロセスの最大数を指定します。 -async スイッチを指定した時に適用されます。 省略した際のデフォルト値は 8 です。 |
-asp |
2つのプロセスが平行して印刷を行います。 複数のPDFファイル変換が全て完了するまでの時間が短縮されますが、CPU負荷率は高くなります。 -async スイッチを指定した時に適用されます。 使用するプリンターや印刷設定の組み合わせなどで、-aspを指定するとプリンターが応答不能な状態になる場合があります。限られた条件でしか動作しないので、基本的には使用しないでください。 |
-pto 文書変換タイムアウト |
文書変換のタイムアウト値を秒で指定します。 DocuWorks Viewerの起動からプリンターがPDFファイルを出力し終わるまでの時間が対象となります。 タイムアウト発生時には印刷ジョブをキャンセルします。(状況によっては印刷ジョブが残ってしまう事があります) 省略した時はタイムアウトの処理は行いません。 |
-ppto ページ出力タイムアウト |
ページ出力のタイムアウト値を秒で指定します。 指定した時間が経過しても印刷ジョブのページ数が変化しなかった時にタイムアウトとなります タイムアウト発生時には印刷ジョブをキャンセルします。(状況によっては印刷ジョブが残ってしまう事があります) 省略した時はタイムアウトの処理は行いません。 |
-ftwto |
文書変換のタイムアウト発生時にDocuWorks Viewerが起動していた場合は、DocuWorks Viewerを強制終了します。 -pto または -ppto を指定した時に適用されます。 省略した時は強制終了の処理は行いません。 |
-slf ログファイル名 | ログを出力するファイル名を指定します。 ログファイルが存在していた時は追加書き込みします。 ログファイルを出力するフォルダが存在しない時はフォルダを作成します。 |
-flf エラーログファイル名 |
エラーログを出力するファイル名を指定します。 エラーログファイルが存在していた時は追加書き込みします。 エラーログファイルを出力するフォルダが存在しない時はフォルダを作成します。 |
-z 結果ファイル名 | 処理結果をファイルに出力します。 結果ファイルが存在していた時は上書きします。 処理結果を出力するフォルダが存在しない時はフォルダを作成します。 |
-ec | 結果ファイルに出力される終了コードと、エラーメッセージの一覧を出力します。 |
-asyncオプションを指定すると非同期で処理が実行されます。
非同期実行の場合、子プロセスを生成して実行を行います。親プロセスの処理はその後直ぐに終了します。
同時に大量のプロセスが生成されるのを防ぐために、実行中のプロセスが8プロセスの場合、実行は行わず、処理を終了します。この最大プロセス数は -apmc オプションで変更可能です。
eDocArrangementから呼び出す場合で、非同期実行を使用する場合、以下のような呼び出し方法を行うことを想定しています。
printToPdfFromDocuWorksFile.exe -i "入力DocuWorks文書ファイル名" -p "Microsoft Print to PDF" -o "出力PDFファイル名" -async -mdtw -sdf "文書変換成功時の入力DocuWorks文書ファイル移動フォルダ名" -fdf "文書変換失敗時の入力DocuWorks文書ファイル移動フォルダ名" -slf "ログファイル名" -flf "エラーログファイル名" -wf "作業フォルダ名"
printToPdfFromDocuWorksFileの-sdf, -fdfオプションを使って、変換処理後に入力ファイルを指定フォルダに移動します。
変換に失敗した場合は、エラーフォルダに移動されます。
同時実行プロセスの上限に達した場合は、処理を行わず、入力ファイルの移動も行いませんので、次回のフォルダ監視で再処理されます。
また、非同期実行の場合は、-slf, -flf オプションを指定してprintToPdfFromDocuWorksFileでログの出力を行うことを推奨します。
変換後のPDFファイルの画質等については、PDFファイルを出力するプリンターの印刷設定画面の内容が反映されます。余白などの設定も対象となるようです。
-mdtwオプションを指定した場合、以下のエラー処理を行います。
-sdf, -fdfのフォルダが指定されていること。また、指定されたフォルダが有効なパスであること。
条件を満たしていない場合は、処理を終了します。
入力ファイルを-wf で指定されたフォルダ(作業フォルダ)に移動する。
DocuWorks Viewer を起動して、指定のPDFファイルを出力するプリンターへの印刷を行う。
DocuWorks Viewer が終了せず戻ってこない場合(-ptoオプションを指定してタイムアウトになった場合)は、以下の処理を試行します。
指定のPDFファイルの出力が完了するまで待機する。
PDFファイルの出力が完了しない場合(-ptoオプションを指定してタイムアウトになった場合)は、以下の処理を試行します。
スイッチ -mdtw を使用した場合、DocuWorks文書ファイルを作業フォルダーに移動してから処理を行います。
処理が完了するまでに、停電や強制終了などでアプリケーションが終了してしまうと、作業フォルダーに対象ファイルが残った状態となります。
printToPdfFromDocuWorksFileは、起動時に作業フォルダー内の状態をチェックして、正常に終了しなかったファイルを検出したら、移動元フォルダへの復元や作業フォルダーの削除などを行っています。※
※但し、これらのリカバリ処理は完全な動作を保証するものではありません。
以下の内容でXDW文書をPDF文書に変換する。
入力ファイル (-i) | C:\XDWからPDF変換\10_PDF変換\領収書_20160321.xdw |
---|---|
PDFファイルを出力するプリンター (-p) | DocuWorks PDF |
出力ファイル (-o) | C:\XDWからPDF変換\20_変換済み\領収書_20160321.pdf |
変換成功時の入力ファイル移動先フォルダ (-sdf) | C:\XDWからPDF変換\30_処理済みXDW |
変換失敗時の入力ファイル移動先フォルダ (-fdf) | C:\XDWからPDF変換\15_エラー |
ログの出力先 (-slf) | C:\XDWからPDF変換\90_System\90_Log\CommandLog\log_20210708.txt |
エラーログの出力先 (-flf) | C:\XDWからPDF変換\90_System\90_Log\CommandLog\Errorlog_20210708.txt |
作業フォルダ (-wf) | C:\XDWからPDF変換\90_System\80_Tool\printToPdfFromDocuWorksFile |
printToPdfFromDocuWorksFile.exe -i "C:\XDWからPDF変換\10_PDF変換\領収書_20160321.xdw" -p "DocuWorks PDF" -o "C:\XDWからPDF変換\20_変換済み\領収書_20160321.pdf" -async -mdtw -sdf "C:\XDWからPDF変換\30_処理済みXDW" -fdf "C:\XDWからPDF変換\15_エラー" -slf "C:\XDWからPDF変換\90_System\90_Log\CommandLog\log_20210708.txt" -flf "C:\XDWからPDF変換\90_System\90_Log\CommandLog\Errorlog_20210708.txt" -wf "C:\XDWからPDF変換\90_System\80_Tool\printToPdfFromDocuWorksFile"
終了コードは以下の通りです。
-1 | 非同期プロセス数が上限に達しています。 |
---|---|
0 | 正常終了 |
1 | 対象外のスイッチが指定されています。 'スイッチ' |
2 | 入力DocuWorks文書ファイルが指定されていません。 |
3 | 出力PDFファイルが指定されていません。 |
4 | 結果ファイルが指定されていません。 |
5 | 入力DocuWorks文書ファイルが存在しません。 '入力DocuWorks文書ファイル名' |
6 | ログファイルが指定されていません。 |
7 | エラーログファイルが指定されていません。 |
8 | 作業フォルダが指定されていません。 |
9 | 作業フォルダの作成に失敗しました。 '作業フォルダ' |
10 | 文書変換成功時のDocuWorks文書ファイル移動フォルダー、文書変換成功時にDocuWorks文書ファイルを削除、何れも指定されていません。 |
11 | 文書変換成功時のDocuWorks文書ファイル移動フォルダの作成に失敗しました。 '文書変換成功時のDocuWorks文書ファイル移動フォルダ' |
12 | 文書変換失敗時のDocuWorks文書ファイル移動フォルダが指定されていません。 |
13 | 文書変換失敗時のDocuWorks文書ファイル移動フォルダの作成に失敗しました。 '文書変換失敗時のDocuWorks文書ファイル移動フォルダ' |
14 | 文書変換非同期プロセス最大数は1以上の整数を指定してください。 '文書変換非同期プロセス最大数' |
15 | 文書変換タイムアウトは10以上の整数を指定してください。 '文書変換タイムアウト' |
16 | ページ出力タイムアウトは10以上の整数を指定してください。 'ページ出力タイムアウト' |
17 | 入力DocuWorks文書ファイルを作業フォルダへ移動する際にエラーが発生しました。 |
18 | 入力DocuWorks文書ファイルを作業フォルダへコピーする際にエラーが発生しました。 |
19 | 作業フォルダのDocuWorks文書ファイルを変換成功時のフォルダへコピーする際にエラーが発生しました。 |
20 | 作業フォルダのDocuWorks文書ファイルを変換失敗時のフォルダへコピーする際にエラーが発生しました。 |
21 | 作業フォルダのDocuWorks文書ファイルをDocuWorks文書ファイル退避フォルダへコピーする際にエラーが発生しました。 |
22 | 作業フォルダのPDFファイルを出力PDFファイルフォルダへコピーする際にエラーが発生しました。 |
23 | 文書変換タイムアウトが発生しました。 '入力DocuWorks文書ファイル名' |
24 | 文書変換に失敗しました。 '入力DocuWorks文書ファイル名' |
25 | DocuWorksがインストールされていません。 |
26 | DocuWorksインストールパスの取得に失敗しました。 'エラーメッセージ' |
27 | DocuWorks Viewerが見つかりません。 'DocuWorks Viewer ファイル名' |
28 | 文書変換可能なDocuWorks文書ファイルはドキュメントとバインダーです。 (拡張子 .xdw .xbd) '入力DocuWorks文書ファイル名' |
29 | 入力DocuWorks文書ファイルのページ数が0です。 '入力DocuWorks文書ファイル名' |
30 | 入力DocuWorks文書ファイルのオープンに失敗しました。 '入力DocuWorks文書ファイル名' |
31 | プリンター名が指定されていません。 |
32 | プリンター情報の取得に失敗しました。 |
33 | 指定されたプリンターが見つかりません。 'プリンター名' |
34 | 印刷キューアプリケーションが実行中です。印刷キューアプリケーションを終了してください。 |
99 | 例外が発生しました。 'エラーメッセージ' |
本アプリケーションは、DocuWorks PDFなどの仮想プリンターを使用してPDF変換を行います。プリンターへの印刷はPCに大きな負荷をかけるため、できるだけ複数のアプリケーションから同時に印刷を行わないようにしてください。
PCに高い負荷がかかっている場合や、仮想プリンターに他のアプリから大量に印刷が行われている場合は、変換に失敗したり、印刷ジョブがなくなるまで待機する動きとなり、変換が行われない場合があります。
DocuWorks Viewerのふでばこやウインドウ化されたツールバーなどのウインドウを閉じておいてください。
DocuWorks Viewerがエラーダイアログを表示した場合に自動でウインドウを閉じる操作を行っていますが、それらの誤動作の原因になる可能性があります。
ページ数の多いDW文書を変換(印刷)中に他のDW文書をDocuWorks Viewerで開こうとすると、印刷が終了するまでDocuWorks Viewerの画面が表示されない現象が発生します。
これはDocuWorks Viewerの仕様によるものと考えられます。本アプリケーションを使ってPDF変換を行うPCではDocuWorks Deskでの操作や他のDW文書を開く操作はできるだけしないで下さい。
本アプリケーションは、印刷を行うプリンターによって動作環境が変わります。
仮想プリンターによって作成されるPDFの品質が変わったり、安定性が低下したりする場合があります。
DocuWorks PDFはバージョンが変わることで将来使用できなくなる可能性もあります。長期間の運用を望むユーザー様は、その点を十分にご理解の上ご利用ください。
DocuWorks9.1のDocuWorks PDFは印刷設定を細かく指定できますが、圧縮オプションのカラー/グレースケール画像の圧縮方法にJPEG2000を選択すると不安定になる頻度が高いようです。JPEGかZipを選択することをお奨めいたします。
DocuWorks PDFに並列で印刷を行うと、印刷設定の内容により異常終了する現象を確認しています。
障害が発生しているアプリケーション名: spoolsv.exe、バージョン: 10.0.26100.2454、タイム スタンプ: 0x02df797c 障害が発生したモジュール名: DocuWorks PDF Driver.dll、 バージョン: 0.3.7522.2、タイム スタンプ: 0x6557116b 例外コード: 0xc0000005 フォールト オフセット: 0x00000000003433f9 フォールト プロセス ID: 0x4308 アプリケーションのフォールトの開始時刻: 0x1DB51F2C69DB1A3 Faulting アプリケーション パス: C:\WINDOWS\System32\spoolsv.exe Faulting モジュール パス: C:\WINDOWS\system32\spool\DRIVERS\x64\3\DocuWorks PDF Driver.dll Report Id: 1172aa71-b72c-4865-8a09-62201104acf9 Faulting パッケージの完全名: Faulting パッケージ相対アプリケーション ID:
この障害が発生するとプリンターが応答不能になりますが、Print Spoolerサービスが停止してしまうことが原因のようです。 DocuWorks PDF Driver.dllが異常終了することで、 Print Spoolerサービスも異常終了してしまうと考えられます。
Print Spoolerサービスが停止状態となるので、他のプリンターの印刷もできない状態となります。
この情報は2024年12月19日にDocuWorks 9.1.8で確認した内容です。将来のアップデートで修正される可能性があります。
停止状態となったPrint Spoolerサービスを、サービスのコントロールパネルから開始すれば、プリンターが使用できるようになります。
また、サービスのコントロールパネルから、Print Spoolerサービスの回復タブのエラー時の処理をすべて「サービスを再起動する」にしておくことをお奨めいたします。
printToPdfFromDocuWorksFileは、Windowsで利用できるPDFプリンターとDocuWorks Viewerを呼び出して利用するアプリケーションです。
PDFプリンターとDocuWorks Viewerで不具合が発生しても弊社では修正できません。
printToPdfFromDocuWorksFileはPDFプリンターとDocuWorks Viewerを、できるだけ不具合を起こさないように使用するためのアプリケーションであるということをご理解ください。
Windows11のバージョン24H2でプリンターキューを開いた状態でDocuWorks PDFやDocuWorks Viewerを使ってPDF変換を行うと、不完全なPDFが作成される問題が発生しています。printToPdfFromDocuWorksFileを使用時はプリンターキューを開かないでください。printToPdfFromDocuWorksFileはプリンターキューが開かれていることを検出すると処理中のファイルをエラー処理します。
printToPdfFromDocuWorksFileは、eDocArrangementの購入者にライセンスされます。試用については、eDocArrangementと同じ期間、試用できます。
printToPdfFromDocuWorksFileは、eDocArrangementの製品の一部としての扱いとなり、eDocArrangementの使用許諾契約が適用されます。
.NET Framework 4.6.2 以降
DocuWorks 9.1