11.1K Views
September 04, 24
スライド概要
「Power Automate for desktop|最新情報&PDF処理特集」(RPACommunity主催)の登壇資料です。
(2024年9月4日オンライン開催)
RPACommunity Po w e r Au to m a t e fo r d e s k t o p で 行う便利なPDF処理をまとめてご紹介 2024.9.4
登壇者紹介 ◼ 中小企業の情シス担当 ◼ ブ ロ グ や S N S で V B A や P o we r A u t o m a t e f o r d e s k t o p の Power Automate for desktop Talk支部主催 きぬあさ 情報を発信 ➢ https://www.ka-net.org/blog/ ➢ https://note.com/kinuasa/ ➢ https://x.com/kinuasa ◼ RPALT等のコミュニティで登壇経験多数あり ◼ M i c r o s o f t M V P (M 3 6 5 , B u s i n e s s A p p l i c a t i o n s ) 受 賞
注意事項 1. 本セッションではPower Automate for desktopのことをPADと略します。 2. 本セッションの資料はPAD バージョン 2.47 に基づいて作成しています。今後のバージョンアップによって 画面等が変更される可能性があります。 3. 本日の資料はセッション終了後に公開予定です。イベントページから資料一覧をご確認ください。 3
本日紹介するPDF処理のまとめ 1. PDFファイルからテキストを抽出 2. PDFファイルからテーブルを抽出 3. PDFファイルから画像を抽出 4. PDFファイルの分割 5. PDFファイルの結合 6. WordファイルからPDFファイルへの変換 7. ExcelファイルからPDFファイルへの変換 8. プリンター(Microsoft Print to PDF)を使ったPDFファイルへの変換 9. PDFファイルのパスワード設定(QPDF使用) 10. PDFフォームへの入力 4
DEMO (1~7まで)
補足:PDFファイルの分割(1) 6 対象PDFのページ数以上の上限を指定してループ
補足:PDFファイルの分割(2) 「ページが範囲外です」エラー発生時の例外処理を 「次のアクションに移動」に設定 7
補足:PDFファイルの分割(3) 8 1. ループでページ数を超える。 2. 「ページが範囲外です」エラーが発生する。 3. 次のアクション = 「最後のエラーを取得」実行。 4. Ifアクションでエラー型変数LastErrorのActionIndexプロパティの 値が0を超えているかどうかを判定し、条件満たしたときループを 抜ける。
補足:WordファイルからPDFファイルへの変換 9 • テックネタ大集合!ライトニングトーク!Power Automate、WinActor、 Google Workspace など - YouTube ➢ https://www.youtube.com/watch?v=SLKu4mqIpYA Wordファイルの指定箇所にテキストを追加し、 PDFファイルとして保存するフローを紹介
補足:ExcelファイルからPDFファイルへの変換(VBScriptを利用) 1. Workbookオブジェクトを取得。 2. ExportAsFixedFormatメソッド(構文は下記)を実行。 3. 出力先のファイル形式としてPDFを指定。 4. 保存先のファイルパスとして「 C:¥Test¥PDF¥output¥Excelファイルからの変換.pdf 」を指定。 5. ファイルの品質としてxlQualityStandard(標準品質)を指定。 6. 他オプションはMicrosoft Learn資料参照。 10
プリンター(Microsoft Print to PDF) を使ったPDFファイルへの変換
プリンター(Microsoft Print to PDF)を使ったPDFファイルへの変換 12
補足:プリンター(Microsoft Print to PDF)を使ったPDFファイルへの変換(1) ファイル保存時に同名のファイルが保存先に存在 していると警告が表示されるため、事前に削除 「Microsoft Print to PDF」に変更する前の既定の プリンター名を変数として取得し、印刷(PDF化)処 理後に元の既定のプリンターに戻す 13
補足:プリンター(Microsoft Print to PDF)を使ったPDFファイルへの変換(2) • Excelファイルを転記した後にPDFに変換するフローの紹介【Power Automate for desktop】 - YouTube ➢ https://www.youtube.com/watch?v=Gr0Y86hAAuI • 資料:https://www.docswell.com/s/kinuasa/538NW1-20231128-RPALT Microsoft Print to PDFプリンターを使った PDF変換の方法をより丁寧に解説 14
PDFファイルのパスワード設定 (QPDF使用)
QPDFの紹介 16 • QPDF:PDFファイルの編集や調査に使えるコマンドラインツールおよびC++ライブラリ • ダウンロード: https://github.com/qpdf/qpdf/releases 環境に応じたファイルをダウンロード
QPDFによるPDFファイルのパスワード保護 • コマンド例: qpdf.exe --encrypt --user-password=user --owner-password=owner --bits=256 --print=none --modify=none -- input.pdf output.pdf ➢ --encrypt:暗号化 ➢ --user-password:ファイルを開くためのパスワード ➢ --owner-password:権限を設定するためのパスワード ➢ --bits:暗号鍵の長さ、特別な理由が無い限りは「256」を指定 ➢ --print:文書の印刷を許可するか ➢ --modify:文書の変更を許可するか • 参考:https://qpdf.readthedocs.io/en/stable/cli.html#option-copy-encryption ※ 上記コマンドを実行したPDFファイルのセキュリティ設定 17
QPDFを使ってPDFファイルにパスワードを設定するフロー(1) 18
QPDFを使ってPDFファイルにパスワードを設定するフロー(2) 19
PDFフォームへの入力
PDFフォームへの入力:入力対象のフォーム 21 「氏名」テキストフィールド 「年齢」テキストフィールド 「連絡先」テキストフィールド
Acrobatのライセンス持っているし、 PADでAcrobatを操作すれば良いんじゃない?
Acrobatを使うのは良いアイデア! でもちょっと待って・・・
RPAによるAcrobatの操作は認められていない AdobeはAcrobatの自動化(自動スクリプトやRPAの実行など)を許可していますか? Adobeは、お客様がAcrobat Proのアクションウィザードを使用する場合を除き、自動化スクリプト、 またはRPAによる企業向けAdobe Acrobatのライセンスコピーの自動化を許可していません。Acrobat、 またはドキュメントワークフローの自動化に関心がある場合は、別途Document Cloudのライセンスを 取得してください。 https://helpx.adobe.com/acrobat/kb/automation-and-document-workflows.html より 24
せっかくAcrobatのライセンスがあるのに RPAじゃ使えない! じゃあどうすれば良いんだろう?
Acrobatを使おう!
Acrobat Proのアクションウィザードによる自動化はOK AdobeはAcrobatの自動化(自動スクリプトやRPAの実行など)を許可していますか? Adobeは、お客様がAcrobat Proのアクションウィザードを使用する場合を除き、自動化スクリプト、 またはRPAによる企業向けAdobe Acrobatのライセンスコピーの自動化を許可していません。Acrobat、 またはドキュメントワークフローの自動化に関心がある場合は、別途Document Cloudのライセンスを 取得してください。 https://helpx.adobe.com/acrobat/kb/automation-and-document-workflows.html より 27
Acrobatのアクションウィザードとは • アクションウィザード:複数のPDFファイルに対して同じ操作を自動的に実行できる便利な機能。 Proプランのみ、Standardプランでは使用不可。 指定した一連のコマンド(ツール)を、 設定した順序で一度に実行できる。 28
Acrobatのアクションウィザード:用意されている様々なツール フィールドに入力するための ツールは無い 29
Acrobat JavaScriptを活用する
30
CSVファイルから読み込んだ値をフィールドに入力して別名保存するスクリプト
•
/* CSVデータ(1行目:見出し, フィールド名)を読み込みフォーム入力 */
var stream = util.readFileIntoStream("/C/Test/PDF/output/SrcData.csv");
var lines = util.stringFromStream(stream, "utf-8").split("¥n");
var headers = lines[0].split(",");
lines.slice(1).forEach((line, i) => {
var values = line.split(",");
➢ SrcData.csv
headers.forEach((header, j) => {
氏名,年齢,連絡先
var field = this.getField(header);
テスト 花子,25,hanahana@***.com
if (field) field.value = values[j] || "";
テスト 太郎,31,tarotaro@***.jp
});
テスト 一郎,42,ichiro@***.com
this.saveAs({
テスト 次郎,28,jiro@***.com
cPath: "/C/Test/PDF/output/output_" + i + ".pdf",
bCopy: true
});
});
app.alert("処理が終了しました。");
テスト 花代,19,hanayo@***.com
PDFフォームへの入力: Acrobatのアクションウィザード(JavaScript使用) 31
アクションウィザード以外の方法:用意されているPDF処理用のAPI RPAを使用してPDFワークフローを自動化する方法は? Adobe Document ServicesはPDFの作成、操作、コンテンツ抽出、ドキュメント生成を任意のアプリケーショ ンで自動化するためのAPIを提供しています。自動化タスクは、請求書や報告書の作成、コンテンツの処理と再 公開、データ分析などのドキュメントワークフローの構築に役立ちます。以下のAPIが利用可能です: • Adobe PDF Services API • Adobe Document Generation API • Adobe PDF Extract API • Adobe PDF Embed API https://helpx.adobe.com/acrobat/kb/automation-and-document-workflows.html より 32
クラウドフロー:Adobe PDF Services API 33
Adobe Import / Export Form Data API 34 • Adobe Import / Export Form Data API(2024年9月時点ではBeta版): • Export Form Fields ➢ https://developer.adobe.com/document-services/docs/apis/#tag/Export-PDF-Form-Data • Import Form Fields ➢ https://developer.adobe.com/document-services/docs/apis/#tag/Import-PDF-Form-Data • Help Preview the Adobe Export and Import Form Data API | by Raymond Camden | Aug, 2024 | Adobe Tech Blog ➢ https://blog.developer.adobe.com/help-preview-the-adobe-export-and-import-form-data-api- 6463268d1f42
PDFフォームへの入力: 画像認識したフォームにテキスト入力(1) 35 1. ブラウザーアクションではローカルのPDFを開けないので「アプリ ケーションの実行」アクションでEdgeを実行 2. フォーム全体を表示するためウィンドウを最大化 3. 画面上に指定した画像(テキストフィールド)が存在するか確認 4. 存在する場合は画像上にカーソル移動してクリック 5. 入力するテキストをクリップボードにコピー 6. Ctrl + V をキー送信して貼り付け ・・・以下フィールド数分同様の作業実施 7. Ctrl + S をキー送信してPDFを上書き保存 8. 「ウィンドウを閉じる」アクションでEdge終了
PDFフォームへの入力: 画像認識したフォームにテキスト入力(2) 36
PDFフォームへの入力:PowerShell&PDFsharp活用(1)
•
PDFsharp:PDFファイルを処理するためのオープンソースの.NET向けライブラリー
[void][Reflection.Assembly]::LoadFile("C:¥System¥Lib¥PdfSharp.dll")
$doc = [PdfSharp.Pdf.IO.PdfReader]::Open("C:¥Test¥PDF¥output¥入力フォームサンプル.pdf",
[PdfSharp.Pdf.IO.PdfDocumentOpenMode]::Modify)
$form = $doc.AcroForm
if($form.Elements.ContainsKey("/NeedAppearances") -eq $true){
$form.Elements["/NeedAppearances"] = [PdfSharp.Pdf.PdfBoolean]::True
}else{
$form.Elements.Add("/NeedAppearances", [PdfSharp.Pdf.PdfBoolean]::True)
}
$fields = $form.Fields
$fields["氏名"].Value = [PdfSharp.Pdf.PdfString]::new("テスト 花子")
$fields["年齢"].Value = [PdfSharp.Pdf.PdfString]::new("25")
$fields["連絡先"].Value = [PdfSharp.Pdf.PdfString]::new("hanahana@***.com")
$doc.Save("C:¥Test¥PDF¥output¥入力フォームサンプル_入力済.pdf")
$doc.Close()
※ 全コードは https://gist.github.com/kinuasa/c870b51287c5ae9e20b3b22672aef0df 参照
37
NuGet CLI(nuget.exe)のダウンロード • NuGetのDownloadsページ(https://www.nuget.org/downloads )から「nuget.exe」 (Windows x86 Commandline)をダウンロード 38
NuGet CLI(nuget.exe)によるPdfSharp.dllのダウンロード • コマンド プロンプトで下記コマンド実行(※ nuget.exe があるディレクトリ): nuget install PdfSharp -version 1.50.5147 39
PDFフォームへの入力:PowerShell&PDFsharp活用(2) 40
本日のまとめ
本日のまとめ 1. PDFファイルからのテキスト・テーブル・画像の抽出、分割や結合といった処理がPAD標準のアクションと して用意されている。 2. Wordアクションを使ったPDF保存・変換が非常に便利! ▷ 事前に用意したテンプレート + 「Word 文書に書き込む」アクションで指定したブックマーク位置に テキスト挿入 + PDF形式で保存 3. 「Excel の保存」(Excel を閉じる)アクションではPDF形式で保存できない(バージョン:2.47時点) ▷ スクリプトを活用 4. プリンター(Microsoft Print to PDF)を使うことでWord非対応のファイルでもPDF変換可能。 5. 外部ツール(QPDFなど)を活用することで処理の幅が広がる。 6. PDFフォームへの入力処理の自動化は困難 ▷ RPAではなくAcrobat Proのアクションウィザードを活用することも検討 42
参考資料、その他
参考資料(1) ※GistにあるPADのフローはデザイナーにコピペして内容を確認してください。 1. Power Automate for desktopによるPDF処理のサンプルフロー https://gist.github.com/kinuasa/86af4f027da2f5f672af3c59e42bf744 2. Microsoft Print to PDFプリンター経由でテキストファイルをPDFファイルに変換するPower Automate for desktopフロー https://gist.github.com/kinuasa/99214396ec8a55b63b44e107a24ddb2c 3. Excelファイルを転記した後にPDFに変換するPower Automate for desktopフローの紹介 https://www.docswell.com/s/kinuasa/538NW1-20231128-RPALT 4. Excelファイル転記後にPDF変換するPower Automate for desktopフロー https://gist.github.com/kinuasa/738dd402362a472d6c34eea5e6baa8bd 44
参考資料(2) ※GistにあるPADのフローはデザイナーにコピペして内容を確認してください。 5. CSVから読み込んだ値をフィールドに設定してPDFを別名保存するAcrobat JavaScriptのサンプルコード https://gist.github.com/kinuasa/c870b51287c5ae9e20b3b22672aef0df 6. PdfSharpを使ってPDFフォームに入力するPowerShellスクリプト https://gist.github.com/kinuasa/c870b51287c5ae9e20b3b22672aef0df 7. PowerShell経由でPdfSharpを使ってPDFフォームに入力するPower Automate for desktopフロー https://gist.github.com/kinuasa/07eb7d7f2a9ed13361b684e7f538755a 8. Adobe PDF Services - Microsoft Learn https://learn.microsoft.com/ja-jp/connectors/adobepdftools/?WT.mc_id=M365-MVP-4029057 9. Microsoft Power Automate 向け Adobe PDF サービスコネクタ https://helpx.adobe.com/jp/document-cloud/help/pdf-connector-for-microsoft-powerautomate.html 45
参考資料(3) ※GistにあるPADのフローはデザイナーにコピペして内容を確認してください。 10. PDFフォームに外部からデータ入力する方法(PDFtk使用)|kinuasa https://note.com/kinuasa/n/nabcdf8ef059e 11. PDFフォームへのデータ入力を自動化するPower Automate for desktopフロー|kinuasa https://note.com/kinuasa/n/nc93aefd55e87 12. PDFtkを使ってPDFフォームへのデータ入力を自動化するPower Automate for desktopフロー https://gist.github.com/kinuasa/42a4cb780c9d6b308c64be871c74f387 13. PDFフォームへのデータ入力を自動化するPower Automate for desktopフロー(デモ動画) https://twitter.com/kinuasa/status/1737326587014779318 14. Acrobat JavaScript API Reference — Acrobat-PDFL SDK_ JavaScript Reference https://opensource.adobe.com/dc-acrobat-sdk-docs/library/jsapiref/index.html 46
ちょっと宣伝
Power Automate for desktopのアクション一覧 48 • 日本語版: https://www.kanet.org/blog/?p=13749 • 英語版: https://www.kanet.org/blog/?p=15986 アクション名の コピペに便利!