質問: tkinterでPDFのビューワーを作ろうとしています。 実行環境:Windows10、実行するときはexe化する 仕様としては、PDFファイルのドラッグ&ドロップによりビューで閲覧できる。操作の使い勝手を考慮し拡大縮小、スクロールバーも追加。 懸念点(質問)は次の通り。 * 調べたところ,PDFを一旦画像ファイルにする必要があると書かれた記事を複数見つけたが,それしか方法はないのでしょうか? * PDFのページが複数あるときにできるだけ全てを表示したいが可能か?最悪ページ番号をTkinterで入力することも視野に入れてはいる。 * ドラッグアンドドロップについてはTkinterで実現するため別途インストールするものがあるかもしれないが、exe化して他のWindowsPCで起動したときに、インストールしていないデバイスでも使えるか? 以上回答よろしくお願いします。
回答: > > 調べたところ,PDFを一旦画像ファイルにする必要があると書かれた記事を複数見つけたが,それしか方法はないのでしょうか? > > > 画像に変換してキャンバスに張り付けるのが容易な方法です。 注意点は、画像なのでテキストをマウスカーソルで選択できなくなる点。 自分で parse して描画する方法もありますが、 自力でPDF parser/render を実装するだけの労力が必要になります。 不特定多数のPDFを表示には向いてません。 他の方法 * tkDocViewer is an inefficient, yet practical, Tkinter widget for displaying file previews. (要: Ghostscript) * windowsという事で、OLE等でコンポーネントを埋め込み・・・ですが、 tkinterでの事例は知りません。Tcl では出来るので、可能だとは思いますが。 * `tkinter` ではなくなりますが、`wkPython` なら、 PDF表示やファイルのドラッグアンドドロップをサポートしてます。 (インストールするとコードを含めデモがあります。追加ライブラリは必要。) 2020-04-09現在 wxでは2通りのPDF表示に対応していたのですが、 * ActiveX版は Python3.x 対応してない様で 古いバージョンで Pythonも 2.7 を使う必要がありました。 * ライブラリで処理する方は、対応しているPDF形式が限定的。 > > PDFのページが複数あるときにできるだけ全てを表示したいが可能か?最悪ページ番号をTkinterで入力することも視野に入れてはいる。 > > > 縦長でスクロールバーを使う事になると思いますが、 1ページでも表示できたのなら、出来る出来ないで言えば可能です。 巨大なPDFファイルを表示する際のメモリ制限等、いくつか懸念事項は有ります。 > > ドラッグアンドドロップについてはTkinterで実現するため別途インストールするものがあるかもしれないが、exe化して他のWindowsPCで起動したときに、インストールしていないデバイスでも使えるか? > > > 具体的に何をインストールするのでしょうか。 ファイルのドラッグアンドドロップは、tkinter ではサポートされておらず、 OS毎に異なる方法を取ることになると思います。 別途インストールがPythonのライブラリで exeしたパッケージに含むなら、 別PCでのインストールは不要ですが、 システムに影響を及ぼすものは、環境毎にインストールが必要になる可能性はあります。 例えば、tkDocViewer であれば Ghostscript に PATH を通す必要あり。 **(配布の際はライセンスにも注意が必要です)**