🦾

[PowerShell]PDFファイル内の文字列を検索し存否を判定するツール

2023/04/12に公開

概要

こちらの記事で文字だけを表示するスクリプトを使い、
PowerShellのはじめ方を紹介しましたが、より実践に近いサンプルコード(サンプルプログラム)を作成しました。

今回作成したPowerShellスクリプトはテキストが埋め込まれているPDFファイル[2]を読み込み、あらかじめ設定した検索文字列により処理結果の正常/異常を判定するという内容です。

PowerShellの始め方(スタートアップ)としても、ご参考頂ければと思います。
https://haretokidoki-blog.com/pasocon_powershell-startup/

この記事のターゲット

  • PowerShellユーザーの方
  • PowerShellでPDFファイル内の文字列を検索し判定したい方
  • 初心者でPowerShellスクリプト作成の参考にしたい方

サンプルプログラムの紹介

サンプルプログラムのシナリオは、とあるプログラムからアウトプットされたPDFファイルを対象に文字列を検索、
文字列の有無により処理結果が正常終了したか/異常終了したかを判定するという、シナリオを想定したツール。

サンプルプログラム

https://github.com/akiGAMEBOY/PowerShell_SearchForPdffileStrings

仕様

プログラム起動用:batファイルとプログラムの本体:ps1ファイル、個別の設定ファイル:setup.iniファイル、
の3つで構成されたプログラム。

なお、対象のPDFファイル名や検索文字列については、設定ファイルにより変更可能とする。

フローチャート

処理全体

下記のプログラム本体と同様。

プログラム本体

ファイル名:Main.ps1

画面仕様

バッチファイル(batファイル)を使いPowerShellスクリプトを実行する。
このPowerShellでは.NET Frameworkのフォーム(以下、dotNETフォームと称する)を呼び出して使用しており、
dotNETフォームを使ったポップアップウィンドウで操作する。
他にコマンドプロンプトが一時停止(PUASE)状態の確認画面の際に「Enterキー」を押し、処理続行させる操作方法も含まれる。
https://learn.microsoft.com/ja-jp/powershell/scripting/samples/creating-a-custom-input-box?view=powershell-7.3

機能仕様

  1. 初期設定
    • 設定ファイル読み込み
      • 対象PDFファイル名
      • 対象検索文字列
  2. 対象PDFファイルの存在チェック
    設定ファイルより取得した対象のPDFファイル名がバッチの起動場所と同じ階層にあるかチェックする。
    ない場合は、処理中断。
  3. 指定文字列の検索
    設定ファイルより取得した対象検索文字列の有無をチェックする。
    ない場合は、異常終了と判断。

入出力ファイル

入力ファイル
  • iniファイル

https://github.com/akiGAMEBOY/PowerShell_SearchForPdffileStrings/blob/master/source/powershell/setup.ini#L7-L8

出力ファイル

なし

GitHub Repository

https://github.com/akiGAMEBOY/PowerShell_SearchForPdffileStrings

フォルダー構成

PowerShell_SearchForPdffileStrings
│  LICENSE
│  README.md
│  SearchForPdffileStrings.bat          ・・・起動用バッチファイル
│  ProcessingResult.pdf                 ・・・対象PDFファイル(Success)
│
├─sample-data                           ・・・テスト用のPDFサンプルファイル
│      ProcessingResult_Failure.docx
│      ProcessingResult_Failure.pdf
│      ProcessingResult_Success.docx
│      ProcessingResult_Success.pdf
│
└─source
    ├─icon                              ・・・アイコンデータ
    │      shell32-296.ico
    │
    ├─lib                               ・・・ライブラリ(iTextSharp 5.5.13のDLL)
    │      itextsharp.dll
    │
    ├─powershell
    │      Main.ps1                     ・・・プログラム本体
    │      setup.ini                    ・・・設定ファイル
    │
    └─tmp                               ・・・PDFファイル内テキストデータの一時書き出し用
            pdf_textdata.txt

参考記事

各iTestSharpのバージョンで動作確認した結果

バージョン 動作有無 備考
5.5.10
5.5.11
5.5.12
5.5.13 サンプルプログラムで使用
5.5.13.1
5.5.13.2 × 原因不明だが動作しなかった。不具合?
5.5.13.3 × 原因不明だが動作しなかった。不具合?

流用したサンプルプログラム

https://zenn.dev/haretokidoki/articles/a77765dd56f202

プログラム作成時に参考にした記事

関連記事

https://haretokidoki-blog.com/pasocon_powershell-startup/
https://zenn.dev/haretokidoki/articles/7e6924ff0cc960
https://zenn.dev/haretokidoki/articles/fb6830f9155de5

脚注
  1. GNU Affero General Public License v3.0の略。 ↩︎

  2. テキストが埋め込まれていない画像データのみのPDFファイルである場合、中身は読み取れず機能しません。 ↩︎

GitHubで編集を提案

Discussion