質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.04%

Python3 Tkinter PDFの表示をしたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,368

score 120

tkinterでPDFのビューワーを作ろうとしています。
実行環境:Windows10、実行するときはexe化する
仕様としては、PDFファイルのドラッグ&ドロップによりビューで閲覧できる。操作の使い勝手を考慮し拡大縮小、スクロールバーも追加。
懸念点(質問)は次の通り。

  • 調べたところ,PDFを一旦画像ファイルにする必要があると書かれた記事を複数見つけたが,それしか方法はないのでしょうか?
  • PDFのページが複数あるときにできるだけ全てを表示したいが可能か?最悪ページ番号をTkinterで入力することも視野に入れてはいる。
  • ドラッグアンドドロップについてはTkinterで実現するため別途インストールするものがあるかもしれないが、exe化して他のWindowsPCで起動したときに、インストールしていないデバイスでも使えるか?

以上回答よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

調べたところ,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 を通す必要あり。
(配布の際はライセンスにも注意が必要です)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/04/10 09:18

    ドラッグアンドドロップについては
    https://emotionexplorer.blog.fc2.com/blog-entry-50.html
    を参考に
    tkinterdnd2
    をインストールしようと思います。
    (ただ上記サイトに記載されたURLから入れないので、もう少し調べてみますが・・・)

    キャンセル

  • 2020/04/10 09:28

    画像のページ数については、
    PDFを1ページごとに画像化して、Tkinterから表示画像を切り替えることで対応することにします。

    キャンセル

  • 2020/04/10 14:38

    ドラッグアンドドロップは
    sourceforge.net TkinterDnD2 -> Download "here" -> TkinterDnD2
    でファイル見えました。が、これは TCL/Tk の tkdnd 拡張へのラッパーのようで、
    別途TCLの拡張のインストールが必要な感じでした。
    TCL拡張の方はバイナリーで配布されているものを使うか、自分でビルドが必要。
    Anaconda は試してませんが、conga で全部入るならこちらの方が楽そうです。

    他に注意が必要だと思う点は
    - 64/32ビットの違い
    - exe化した場合、別環境ではDLLの読み込みに一手間必要かもしれない
    ライセンスは public domain なので問題なしでした

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る