xml:space="preserve">
注文書 9 申し込み書 プラン A

PDFのテキスト抽出と属性設定

概要

監視フォルダに格納されたPDFファイルからテキスト抽出を行い特定の文字を取得後、PDFのカスタムプロパティに設定します。

XDW文書への変換は、コンソールアプリ「 pdfCommandUtility 」をコマンド実行で呼び出して行います。

実行すると以下の様に動作します。

10_処理前\伊藤
図面サンプル.pdf
コマンド実行
テキスト抽出
10_処理後\伊藤
決裁申請書_20181113_伊藤博文.xdw

「pdfCommandUtility」の詳細は、 仕様書 ご覧下さい。

設定の前準備

C:\Homeの下に、以下のような構成でフォルダを作り、準備します。

フォルダ構成のダウンロード

PDFのテキスト抽出と属性設定_フォルダ構成.zip

Cドライブのルートに解凍してください。

フォルダ構成は以下の通りです。

  • C:\Home\eDocArrangement2\Demo\PDFのテキスト抽出と属性設定
    • 10_決裁申請書リネーム処理
      • 10_処理前
        監視フォルダ。下位フォルダも対象とします。
        • 伊藤
          • 決裁申請書_サンプル_MicrosoftPDF.zip
        • 西田
      • 20_処理後
        処理済みフォルダ。
        • 伊藤
    • 90_System
      • 10_Tool
        • pdfCommandUtility
          pdfCommandUtilityの配置フォルダ。最新版をダウンロードして配置してください。
          • PDFClown.dll
          • pdfCommandUtility.exe
          • pdfCommandUtility.html
      • 20_Temp
        一時フォルダ。
      • 90_Log
        ログの出力先。

設定ファイル

以下のリンクから完成した設定をダウンロードしていただくことができます。

設定ファイルのダウンロード

PDFのテキスト抽出と属性設定_設定.zip

以下のフォルダに解凍すると設定が適用されます。

C:\Users\ユーザー名\AppData\Roaming\TechnoStyle\eDocArrangement2

グローバルデータ

グローバルデータとログの設定(共通設定)

グローバルデータの内容は以下の通りです。トップフォルダを変更する場合は、以下の定義を変更してください。グローバルデータは、「共通設定」から変更できます。

名前
TopFolder
C:\Home\eDocArrangement2\Demo\PDFのテキスト抽出と属性設定
pdfCommandUtility
{%GET_G(TopFolder)}\90_System\10_Tool\pdfCommandUtility\pdfCommandUtility.exe

詳しい設定方法は、 設定例(共通)グローバルデータとログの設定 を参照して下さい。

ログ設定

実行ログファイル名 {%GET_G(TopFolder)}\90_System\90_Log\Log.txt
エラーログファイル名 {%GET_G(TopFolder)}\90_System\90_Log\ErrorLog.txt
文字コード SJIS
方式 追加書き込み (日単位)

バッチ設定

決裁申請書リネーム

ログ設定

共通ログ設定の内容でログを出力する。

ファイルの繰り返し1

Loop File

メイン画面のファイルリストを対象に繰り返し処理を行う。

ループ毎にユーザーデータをクリアする。

テキスト抽出

Macro Execute

以下のマクロを実行する。

#コマンド実行結果ファイルのパス
{%SET_U(属性,ResultPath,{%GET_G(TopFolder)}\90_System\20_Temp\result.txt)}
#テキスト抽出結果ファイルのパス
{%SET_U(属性,TextPath,{%GET_G(TopFolder)}\90_System\20_Temp\text.txt)}

#コマンド引数
#-pf 対象PDFファイル
#-tef 抽出結果ファイル
#-tep 抽出ページ
#-tem 抽出モード
#-z 結果ファイル
{%SET_U(属性,コマンド引数,{%REPLACE(
-pf "{%GET(FullPathFileName)}"
-tef "{%GET_U(属性,TextPath)}"
-tep 1
-tem text
-z "{%GET_U(属性,ResultPath)}"
,<CrLf>, )})}

#テキスト抽出
{%COMMAND({%GET_G(pdfCommandUtility)},{%GET_U(属性,コマンド引数)})}

結果判定1

Macro Execute

以下のマクロを実行する。

{%READ_FILE({%GET_U(属性,ResultPath)},result,SJIS,LINE)}
#結果ファイルの1行目の終了コードを判定
{%IF({%GET_U(result,1)}!=0,
  #結果ファイルの2行目のエラーメッセージでエラーを発生させる
  {%RAISE_ERROR({%GET_U(result,2)})}
,)}

条件分岐1

If

以下の条件を判定して処理を分岐する。

処理階層内のエラー回数が0回。

満たしている場合

If Then

結果取得

Macro Execute

以下のマクロを実行する。

#テキスト抽出結果ファイルを読み込む
{%READ_FILE({%GET_U(属性,TextPath)},text,SJIS,ALL)}

#データを取得
{%SET_U(属性,申請者,{%REGEX_CAPTURE(申請者{\[(.+?)\]},{%GET_U(text,1)})})}
{%SET_U(属性,申請日,{%REGEX_CAPTURE(申請日{\[(.+?)\]},{%GET_U(text,1)})})}
{%SET_U(属性,件名,{%REGEX_CAPTURE(件名{\[(.+?)\]},{%GET_U(text,1)})})}
{%SET_U(属性,決裁者,{%REGEX_CAPTURE(決裁者{\[(.+?)\]},{%GET_U(text,1)})})}


{%WRITE_LOG(申請者:{%GET_U(属性,申請者)})}
{%WRITE_LOG(申請日:{%GET_U(属性,申請日)})}
{%WRITE_LOG(件名:{%GET_U(属性,件名)})}
{%WRITE_LOG(決裁者:{%GET_U(属性,決裁者)})}

{%IF({%GET_U(属性,申請者)}=,
  #取得できなかった場合
  {%SET_U(属性,判定,False)}
,
  #取得できた場合
  {%SET_U(属性,判定,True)}
)}

条件分岐3

If

以下の条件を判定して処理を分岐する。

{%GET_U(属性,判定)}

満たしている場合

If Then

属性設定

Macro Execute

以下のマクロを実行する。

#コマンド実行結果ファイルのパス
{%SET_U(属性,ResultPath,{%GET_G(TopFolder)}\90_System\20_Temp\result.txt)}

#コマンド引数
#-pf 対象PDFファイル
#-acp カスタムプロパティ設定
#-z 結果ファイル
{%SET_U(属性,コマンド引数,{%REPLACE(
-pf {%GET(FullPathFileName)}
-acp 
"申請者" "{%GET_U(属性,申請者)}"
"申請日" "{%GET_U(属性,申請日)}"
"件名" "{%GET_U(属性,件名)}"
"決裁者" "{%GET_U(属性,決裁者)}"
-z "{%GET_U(属性,ResultPath)}"
,<CrLf>, )})}

#カスタムプロパティ設定
{%IF({%COMMAND({%GET_G(pdfCommandUtility)},{%GET_U(属性,コマンド引数)})}=0,
  {%WRITE_LOG(カスタムプロパティに設定を行いました。対象PDF[{%GET(FullPathFileName)}])}
,)}

結果判定2

Macro Execute

以下のマクロを実行する。

{%READ_FILE({%GET_U(属性,ResultPath)},result,SJIS,LINE)}
#結果ファイルの1行目の終了コードを判定
{%IF({%GET_U(result,1)}!=0,
  #結果ファイルの2行目のエラーメッセージでエラーを発生させる
  {%RAISE_ERROR({%GET_U(result,2)})}
,)}

条件分岐2

If

以下の条件を判定して処理を分岐する。

処理階層内のエラー回数が0回。

満たしている場合

If Then

ファイル移動1

Move File

文書を以下の通り移動する。

移動元 {%GET(FullPathFileName)}
移動先 {%GET_G(TopFolder)}\10_決裁申請書リネーム処理\20_処理後\{%GET(FolderName)}

ファイル名を「決裁申請書_{%GET_U(属性,申請日)}_{%GET_U(属性,申請者)}.pdf」に変更する。

移動先に同名の文書がある場合は、ファイル名に連番を付与する。

コピー後に削除を行う。

満たしていない場合

If Else

ファイル移動

Move File

文書を以下の通り移動する。

移動元 {%GET(FullPathFileName)}
移動先 {%GET_G(TopFolder)}\10_決裁申請書リネーム処理\20_処理後\{%GET(FolderName)}

移動先に同名の文書がある場合は、ファイル名に連番を付与する。

コピー後に削除を行う。

満たしていない場合

If Else

ファイル移動2

Move File

文書を以下の通り移動する。

移動元 {%GET(FullPathFileName)}
移動先 {%GET_G(TopFolder)}\10_決裁申請書リネーム処理\20_処理後\{%GET(FolderName)}

移動先に同名の文書がある場合は、ファイル名に連番を付与する。

コピー後に削除を行う。

満たしていない場合

If Else

ファイル移動3

Move File

文書を以下の通り移動する。

移動元 {%GET(FullPathFileName)}
移動先 {%GET_G(TopFolder)}\10_決裁申請書リネーム処理\20_処理後\{%GET(FolderName)}

移動先に同名の文書がある場合は、ファイル名に連番を付与する。

コピー後に削除を行う。

監視設定(eDocArrangement 2 Schedulerの設定)

No.
設定名
実行対象
監視フォルダ
拡張子
下位フォルダ
スケジュール
常時ログ出力
オープンチェック
サイズチェック
実行条件
1
決裁申請書リネーム
{%GET_G(TopFolder)}\10_決裁申請書リネーム処理\10_処理前
*.pdf
対象
一定間隔
00:00:10
しない
オープンチェックする。(3秒)
しない

動作確認

以下の動画をご覧ください。