2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PowerShellでPDFからXDWファイルを作成する

Last updated at Posted at 2021-10-05

##はじめに
個人で使用される方はあまりいないでしょうが、会社に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で処理を終了する形になります。
最低限の処理を記載すると下記のようになります。

PDFtoXDW.ps1
##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

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?