##はじめに
個人で使用される方はあまりいないでしょうが、会社にFujiXeoxの複合機が導入されているとDocuWorksDeskもインストールされていることは多いかと思います。
よんどころない事情でPDFからXDWの定期変換を組む必要が生じたので備忘として記載します。
##前提
DocuWorksはFujiXeoxから、APIが無償で公開されています。
下記サイトからSDKをダウンロード可能です。(要ユーザー登録)
https://direct-fb.fujifilm.com/ap1/dc/docuworks/ja/dl/list.jsp
.Net版も存在するので、最も手軽なPowerShellでこれを利用します。
##環境
Windows 10pro 10.0.17763
VSCode 1.60.2
PowerShell 5.1
DocuWorks Desk 8.0.7
DocuWorks Development Tool Kit 8
※蛇足ですが合致するバージョンのDocuWorks Deskが必須です。
##解説
ダウンロードしたSDKを解凍し、dwsdk805jpn>dotNET>binと潜った先にある「Xdwapiwn.dll」が.Net用のDLLファイルです。
解凍したフォルダ直下にあった「XDWAPI_dotNET.xdw」が.Net版のリファレンスです。
それによればXDW_CreateXdwFromImagePdfFile
が一番それらしいです。
ですがこれで確実に変換できるのはFujiXeoxの機器から生成されたPDFのみです。
そこでXDW_BeginCreationFromAppFile
を利用します。
こいつはPDFファイルを関連付けられているアプリケーションを開き、DocuWorksPrinterで印刷してくれます。
DocuWorksPrinterは印刷対象の文書をXDWとして出力するので、結果XDWへの変換が叶います。
XDW_BeginCreationFromAppFile
は非同期実行なので、XDW_CREATE_STATUS
オブジェクトに格納される進捗状況を確認し、完了後にXDW_EndCreationFromAppFile
で処理を終了する形になります。
最低限の処理を記載すると下記のようになります。
##DLLファイルを読み込む
Add-Type -Path "C:\dll\Xdwapiwn.dll"
##ファイルの場所
$PDFPath="C:\InputPDF.pdf"
$XDWPath="C:\OutputXDW.pdf"
##タイマー
$SleepTime=0
##生成されるXDWのハンドル
[ref]$Handle=[FujiXerox.DocuWorks.Toolkit.Xdwapi+XDW_CREATE_HANDLE]::new()
##PDFからXDWを生成
[FujiXerox.DocuWorks.Toolkit.Xdwapi]::XDW_BeginCreationFromAppFile($PDFPath,$XDWPath,"FALSE",$Handle)
##生成状況のステータスを格納するオブジェクト
[ref]$Status=[FujiXerox.DocuWorks.Toolkit.Xdwapi+XDW_CREATE_STATUS]::new()
##一秒単位で生成状況を監視する
do {
##生成状況を$Statusに格納
[FujiXerox.DocuWorks.Toolkit.Xdwapi]::XDW_GetStatusCreationFromAppFile($Handle.Value,$Status)
##一秒まつ
Start-Sleep -Seconds 1
##タイマーに累積秒を記載
$SleepTime+=1
##60秒で生成できなかったら処理終了
if ($SleepTime -ge 60) {
Write-Host "生成できんかった"
[FujiXerox.DocuWorks.Toolkit.Xdwapi]::XDW_EndCreationFromAppFile($Handle.Value)
Exit
}
##Phase=8が完了なので8になるまでループ
} while ($Status.Value.Phase -ne 8)
##処理を終了
[FujiXerox.DocuWorks.Toolkit.Xdwapi]::XDW_EndCreationFromAppFile($Handle.Value)
##注意
XDW_BeginCreationFromAppFile
はPDFであれば、関連付けられているアプリケーションを経由せずに出力可能らしいのですが私の環境では今のところうまくいかず……。
##参考サイト
https://www.miyazakidenshikiki.jp/solution/docuworks-advice/category2/aboutDocuWorksAPI.html