試験段階ということもあって今まであまり使ってこなかったPDFビューアー。
Power AppsでPDFを表示する必要がでて色々と遊んでみたので、その結果をメモ。
PDFビューアー(試験段階)
PDFビューアーはその名の通りPDFファイルを表示するコントロールで、残念ながらまだ試験段階。
そのためか、↓の公式にあるプロパティが実際には存在しないこともある(OnSelectとか)。
https://docs.microsoft.com/ja-jp/powerapps/maker/canvas-apps/controls/control-pdf-viewer
- ページ指定遷移
- 拡大縮小
- 文字列検索
表示するPDFの指定方法
公式には「PDFビューアーに表示するPDFはURLで設定する」と書かれている。
しかし、実際にURLを指定する場合、
- HTTPSであること
- URLの先が認証不要なサーバーであること
といった制限があったりするので、いまいち使い勝手がよくない印象。
認証不要なサーバー上にあるPDFが対象なので、SharePointやOneDriveのドキュメントは普通にURL指定しても表示できない。。。
そこでPDFを指定する場合は以下の手段を取ることになるかと。
SharePoint Online ドキュメントライブラリからデータを引っ張ってくる
SharePoint OnlineのドキュメントライブラリにあるPDFのデータをPowerAutomateで取得して表示する方法。
メディアとして追加
画像ファイルのようにPower AppsのメディアとしてPDFを埋め込む方法。
Base64データ
PDFをBase64形式のデータに変換し、直接PDFビューアーに埋め込む方法。
PDFビューアーのプロパティたち
PDFビューアーには色々なプロパティがあって、正直使い方がわかりにくいものもいくつかw
今回はそのプロパティを色々いじってみたのでその内容をご紹介。
※PDFビューアーは試験段階の機能なので、ここの内容が急に変わることもあります。
Document
Documentプロパティは表示するPDFを指定するプロパティ。
基本はダブルクォーテーション(””)で囲ったURLを指定するが、PDFをメディアとして追加する場合はそのメディア名を、Base64で埋め込む場合はそのデータをダブルクォーテーションで囲って指定する。
ShowControls
Zoom, ActualZoom(読み取り専用)
Zoomプロパティはその名前の通り、拡大/縮小率を指定するプロパティ。
- Zoom.FitWidth(値は-1)
- Zoom.FitHeight(値は-2)
- Zoom.FitBoth(値は-3)
ActualZoomプロパティは実際の拡大率を返してくれるプロパティで、Zoomプロパティに数値をいれたときはその値を、Fit系のEnumを入れると実際の拡大率の値を返してくれる。
Page, PageCount(読み取り専用), CurrentPage(読み取り専用)
Pageプロパティを使用すると、表示するページをこちら側で指定することができる。
ちなみに「Pageプロパティを設定するとビューアーのページは動く」けど、「ビューアーのページを動かしてもPageプロパティは動かない」ようになっている。
FindText
FindTextプロパティに値(文字列)を設定すると、PDFファイル内のテキストを検索してくれる。
ここまではまぁわかりやすいんだけど、使い方のクセが強めなのが次の「FindNext」と「FindPrevious」プロパティ。
FindNext, FindPrevious
FindNextプロパティとFindPreviousプロパティはその名前の通り、テキスト検索の次の(または前の)結果へと進むプロパティ。
で色々いじってみたところ、どうやらこのFindNext(FindPrevious)の値がtrueに変化するときに、次の(前の)検索結果へと移動するぽい。
なのでもし「次の検索結果へ」ボタンを実装するとしたらこんな感じになるのかなと。
確かにPower Appsはコントロールの機能をコールすることはできないけど、使い方のクセが強いw
それか僕の使い方が間違っているかもしれないけれど、PDFビューアーの情報が少ないので何とも言えないw
OnStateChangeイベント
最後はPDFビューアーが持つ唯一のアクション「OnStateChange」。
名前からすると何かしらの状態が変わったときにコールされるんだろうけど、「何の状態が変わったときか?」がわからない。
- Page, CurrentPage
- FindText
- FindNext, FindPrevious
- Zoom、ActualZoom
なので、PDFビューアーをユーザーが操作したり、こちら側から操作したときはほぼすべてこの「OnStateChange」は呼び出される。
使うシチュエーションとしては、「最後のページまできちんと読んだか?」チェックとかが考えられるかなと。
OnStateChangeが呼ばれる度にコレクションとかにCurrentPageの値を重複無しで貯めていって、全ページ読めたら次の画面へと進めるようにする、みたいな感じ。
今回は触れなかったけどパスワード付きPDFも扱えるようなので、また機会があれば取り上げてみようかなぁと。
コメント