C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

DrawをPDFでエクスポート 3

こちらのコメントで非常に貴重な情報を頂きました。
DrawをPDFでエクスポート (未解決)2 - C#ATIA

こちらについても解決です。
DrawをPDFでエクスポート (未解決) - C#ATIA

通りすがりさんのアドバイスを元に以下の手順で行いました。
〇プリンタを追加する
「プリンタの設定」をクリック
f:id:kandennti:20190919125506p:plain


「プリンタを追加」をダブルクリック
f:id:kandennti:20190919125520p:plain


「3D PLMプリンタ」にチェックを入れOK
f:id:kandennti:20190919125534p:plain


こんなダイアログが出るので設定します。
f:id:kandennti:20190919125543p:plain

①何でも良いのですが "exportPDF" とかだと素敵な気がします。
②PDFを選択します
f:id:kandennti:20190919125554p:plain
ん? CGMとか何だろう?

③推測ですが、プリント処理前に他の処理が行われる部分だと思われます。
f:id:kandennti:20190919125605p:plain
「デフォルト値」に設定していても、一度OKを押すと「カスタム」になってしまいます。
「カスタム」にすると「スプリクトを編集...」が利用できるようになります。
一応、こちらで作成した際に出来上がるスプリクトです。

rem Default: C:\Users\[ユーザー名]\AppData\Local\Temp\catout.out
if %CATPRT_DOC_SHEETS_COUNT%==1  goto OneSheet
    set CATOUT=C:\Users\[ユーザー名]\AppData\Local\Temp\catout_%CATPRT_DOC_SHEETS_NUM%.out
    goto End
:OneSheet
    set CATOUT=C:\Users\[ユーザー名]\AppData\Local\Temp\catout.out
:End

「スプリクト」と記載されているのですが、中身のフォーマットはバッチっぽいです。
細かな中身については後ほど。

④恐らく、プリント処理後に実行される処理だろうと思われます。
f:id:kandennti:20190919125620p:plain
「キュー名」ですが、今回は無関係だったので何でも良いともいます。
一応、こちらで作成した際に出来上がるスプリクトです。

rem Default: Fax
if exist "%CATOUT%" echo "Generated file written on %CATOUT%"
if not exist "%CATOUT%" echo "The file %CATOUT% doesn't exist."

こちらについては特に修正しませんでした。
(処理後ファイルの生成が成功したかどうかをプリンタログに送っているだけのようです)

用紙部分の設定については・・・特にすることもないかと思います。

一度OKを押してしまっても良いかと思います。



〇宣言部のスプリクト
悩んだのがこの部分です。上記の設定でとりあえずPDFファイルが出来るかと
思っていたのですが出来ないからです。原因は単にエクスポートした際の拡張子でした・・・。
上記の③部分のコードで、1枚のみで処理した際の部分を元にお話しすると

:OneSheet
    set CATOUT=C:\Users\[ユーザー名]\AppData\Local\Temp\catout.pdf
:End

とするだけでとりあえずPDFが出来ます。
環境変数 'CATOUT' に代入したファイルパスが出力先となります)

但し、使い勝手を考えると
・CATDrawingファイルと同じフォルダに作りたい
・CATDrawingファイルと同じ名前のPDFファイルにしたい
です。「名前を付けて保存」時と同じようにするイメージです。

通りすがりさんが教えてくれた

set > env.txt

が非常にありがたかったです。利用出来る環境変数がHelpのこの辺に記載されていますが
もっと多くが利用出来るからです。
About Setting Up Printers on UNIX and Windows

仮にDrawingファイルのパスが

C:\tmp\hoge.CATDrawing

だったとすると
%CATPRT_DOC_PATH% → C:\tmp
%CATPRT_DOC_NAME% → hoge.CATDrawing
を返してきます。

最初は

    set CATOUT=%CATPRT_DOC_PATH%\%CATPRT_DOC_NAME%.pdf

とすると、同一のファイル内に

hoge.CATDrawing.pdf

と言うファイル名で出来上がります。要は元の拡張子 ".CATDrawing" を消したいんです。

この辺りを見ると拡張子無しのファイル名が取得出来そうだとわかりました。
http://orangeclover.hatenablog.com/entry/20101004/1286120668
で、こんな感じにします。

    call :basename %CATPRT_DOC_NAME%
    set CATOUT=%CATPRT_DOC_PATH%\%basename%.pdf
:basename 
    set basename=%~n1

すると、

hoge.pdf

で無事出来上がります。但し、通りすがりさん記載していた丸かっこ付きのファイル名では
正しく処理されませんでした。

C:\tmp\hoge(piyo).CATDrawing

の場合も

hoge.pdf

という名称でファイルが出来上がります。
この辺のファイル名ウンヌンの処理は非常にめんどくさかったので、バッチファイルを作り
確認していたのですが、コマンドプロンプトでOKでもプリンタのスプリクトではNGのようです。

色々考え試した末、文字列の中から '.CATDrawing' を削除し、'.pdf' を付け足して
処理させようと言う、初歩的で知恵の無い作戦が一番すっきりしました。

最終的にはこんな感じです。

rem remove '.CATDrawing'
set basename=%CATPRT_DOC_NAME:.CATDrawing=%

if %CATPRT_DOC_SHEETS_COUNT%==1  goto OneSheet
    set CATOUT=%CATPRT_DOC_PATH%\%basename%_%CATPRT_DOC_SHEETS_NUM%.pdf
    goto End
:OneSheet
    set CATOUT=%CATPRT_DOC_PATH%\%basename%.pdf
:End

・未対応だった WinWin10 + R2015SP4 でもPDF化可能です。
・「名前を付けて保存」では反映されない、背景ブランクも正しく処理されます。
・ファイル名に丸カッコが含まれていてもOKです。(ファイル名荷使用出来る文字ならOKなはず)
・アクティブなシートのみのPDF化が可能です。
・複数ドキュメント印刷可能です。
※但しバラバラです
※ファイル名は [ファイル名] _ [シート名] では無く、
シート名の代わりに処理された順番の数値になります。

劇的に楽です。 通りすがりさんありがとうございました。