Power Automate Desktop

[Power Automate Desktop]PDFで指定したキーワードが含まれているページのみを印刷するフロー

Power Automate Desktop」キーワードでTwitter検索していたところ、チサさん( @chisa91010081 )のツイートから興味深い記事を見つけました。

現在
Power Automate Desktopで
プログラムを実験的に作っています。

今、試してみたいのは
PDFで100ページほどの
書類の中から
あるキーワードが入っているページだけ
印刷する…

そんなことができるのか??

https://note.com/chisa_pc_inst/n/nd81a4e5eba52 より

これは面白そうです!
さっそく作ってみることにしました。

PDFで指定したキーワードが含まれているページのみを印刷するフロー

フロー全体

# 対象となるPDFのパスを「TargetPdfFilePath」、分割したページの出力先のパスを「OutputFolderPath」、検索する文字列を「FindText」として設定します。
SET TargetPdfFilePath TO $'''C:\\Test\\PDF\\テストPDF.pdf'''
SET OutputFolderPath TO $'''C:\\Test\\PDF\\output'''
SET FindText TO $'''ほげほげ'''
# ループ内で「新しい PDF ファイルへの PDF ファイル ページの抽出」アクションを実行して、1ページごとに新しいPDFとして出力します。
LOOP LoopIndex FROM 1 TO 255 STEP 1
    # 「ページが範囲外です」エラー発生時にループを抜けて処理を続けられるよう、指定したラベルに移動します。
    Pdf.ExtractPages PDFFile: TargetPdfFilePath PageSelection: LoopIndex ExtractedPDFPath: $'''%OutputFolderPath%\\page_%LoopIndex%.pdf''' IfFileExists: Pdf.IfFileExists.Overwrite ExtractedPDFFile=> ExtractedPDF
    ON ERROR PageOutOfBoundsError
        GOTO ExtractTextFromPDF
    END
END
LABEL ExtractTextFromPDF
# 分割したPDFの出力先フォルダからファイル一覧を取得し、For eachで1ファイルずつ処理します。
Folder.GetFiles Folder: OutputFolderPath FileFilter: $'''*.pdf''' IncludeSubfolders: False FailOnAccessDenied: True SortBy1: Folder.SortBy.NoSort SortDescending1: False SortBy2: Folder.SortBy.NoSort SortDescending2: False SortBy3: Folder.SortBy.NoSort SortDescending3: False Files=> Files
LOOP FOREACH CurrentItem IN Files
    # PDFからテキストを抽出し、「テキストの解析」アクションで指定した文字列が含まれているかどうかを判別します。文字列が含まれている場合(Position > 0)、ヒットしたファイルを印刷します。
    Pdf.ExtractText PDFFile: CurrentItem ExtractedText=> ExtractedPDFText
    Text.ParseForFirstOccurrence Text: ExtractedPDFText TextToFind: FindText StartingPosition: 0 IgnoreCase: True OccurrencePosition=> Position
    IF Position > 0 THEN
        System.PrintDocument DocumentPath: CurrentItem
    END
END
Display.ShowMessageWithTimeout Message: $'''処理が終了しました。''' Icon: Display.Icon.Information Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: True Timeout: 3 ButtonPressed=> ButtonPressed
1. 変数の設定

対象となるPDFのパスを「%TargetPdfFilePath%」、分割したページの出力先のパスを「%OutputFolderPath%」、検索する文字列を「%FindText%」として設定します。

2. Loop

ループ内で「新しい PDF ファイルへの PDF ファイル ページの抽出」アクションを実行して、1ページごとに新しいPDFとして出力します。
このときループの終了値として指定したPDFのページ数を超える値を指定しておきます。

3. 新しい PDF ファイルへの PDF ファイル ページの抽出

「ページが範囲外です」エラーが発生したときに指定したラベル(ExtractTextFromPDF)に移動するように設定し、ページの上限を超えたらループを抜けて処理を続行します。

・PDF ファイル:%TargetPdfFilePath%
・ページ選択:%LoopIndex%
・抽出された PDF ファイルのパス:%OutputFolderPath%\page_%LoopIndex%.pdf
・ファイルが存在する場合:上書き

4. ラベル

・名前:ExtractTextFromPDF

5. フォルダー内のファイルを取得

分割したPDFの出力先フォルダからファイル一覧(PDFファイルのみ)を取得します。

・フォルダー:%OutputFolderPath%
・ファイル フィルター:*.pdf

6. For each

For eachで1ファイルずつ処理します。

7. PDF からテキストを抽出

PDFからテキストを抽出します。

・PDF ファイル:%CurrentItem%
・抽出するページ:すべて

8. テキストの解析

PDF内に指定した文字列が含まれているかどうかを検索します。
検索条件は必要に応じて変更してください。

・解析するテキスト:%ExtractedPDFText%
・検索するテキスト:%FindText%
・正規表現である:オフ
・解析の開始位置:0
・最初の出現箇所飲み:オン
・大文字と小文字を区別しない:オン
・生成された変数:%Position%

9. If

「テキストの解析」アクションで検索したテキストがヒットした場合は位置が、ヒットしなかった場合は「-1」が変数「%Position%」に格納されるので、Ifアクションを使ってヒットしたかどうかを判別します。

10. ドキュメントの印刷

ヒットした場合は対象となるPDFを印刷します。
「ドキュメントの印刷」アクションはファイルの右クリックメニューにある「印刷」を実行したときと同じ動きをするため、PDFを印刷する場合は既定のアプリケーションをAcrobatやAcrobat Reader等、印刷に対応したアプリケーションに設定する必要があります。

11. メッセージを表示

修了確認用のメッセージボックスを表示します。

上記の通りPDFを1ページずつ分割してテキストを抽出し、検索してヒットしたファイルのみを印刷することで、目的を達成することができました。
ただし、「PDF からテキストを抽出」アクションではテキストが埋め込まれていないPDFからはテキストを抽出できませんので、OCRにかける等の何らかの処理を行う必要があります。

[Office Scripts]任意の場所にあるスクリプトを実行する方法前のページ

[Power Automate Desktop]指定したフォルダ内のWordファイルをPDFに一括変換するフロー次のページ

関連記事

  1. Power Automate Desktop

    Power Automate DesktopでPPAPしてみた。

    PPAP、所謂パスワード付きZipをメールに添付して、そのメールとは別…

  2. Office Scripts

    [Office Scripts]任意の場所にあるスクリプトを実行する方法

    通常、Office スクリプトを実行するPower Automateフ…

  3. Power Automate Desktop

    [Power Automate Desktop]Google Driveにファイルをアップロードする…

    前々回の記事でGoogle Drive APIの実行に必要なアクセスト…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

Translate

Chinese (Simplified)Chinese (Traditional)EnglishFrenchGermanJapaneseKoreanRussianSpanish

最近の記事

アーカイブ

PAGE TOP