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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

Q&A

解決済

2回答

2844閲覧

Python3 Tkinter PDFをTkinterで表示する方法について

person

総合スコア223

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Tkinter

Tkinterは、GUIツールキットである“Tk”をPythonから利用できるようにした標準ライブラリである。

0グッド

0クリップ

投稿2021/07/31 08:36

TkinterでPDFファイルを表示したいです。

ネットで調べてみると、pdf2image(poppler)を使って画像ファイルに変換してから、canvasで表示するという方法があります。
(実際これは過去に作成して、拡縮方法とかを過去に質問したことがありました。)

思ったのですが、そもそもPDFを表示するには画像ファイルを生成しないとダメでしょうか?

うまく表現できませんが、画像のデータさえあればファイルにしなくてもいいのかなと思ったので質問しました。TkinterでのPDF表示の拡縮も想定しているので、そういう面で不都合とか出てしまうのでしょうか?

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Pythonを使って変換しているモジュールがあればメモリ上の処理が可能なのでファイルを作成する必要はないのですが、探してみてもそういうPythonライブラリが見当たりません。

テキストファイルとかエクセルのようなファイル、あるいは画像ファイルからPDFを生成するのはある特定のバージョンのPDFを生成するので簡単です。
しかし、PDFのレンダリング(画像変換)を行うためには、全て(あるいは大半)のバージョンのPDFを処理できなければならないのです。バージョンが同じであっても、画像を埋め込んでいるだけのPDFなら簡単ですが、テキストデータとフォントを含むようなPDFであれば、フォントのレンダリングもやらなければなりません。
さらに、数年に一度Adobeが新しいpdfフォーマットを追加するのに合わせて機能追加をしていかなければなりません。

そのため、PythonでPDFを変換しようというボランティアの開発者が現れず、pdf2imageのように他のPDFアプリを使ってファイル変換を行うモジュ-ルが主流なのだろうと推測します。

その結果、一旦ファイルを経由するしかないのだろうと思います。

投稿2021/07/31 10:26

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teamikl

2021/07/31 11:35 編集

>探してみてもそういうPythonライブラリが見当たりません。 ファイルを経由するのは、pdf2image の実装がsubprocessでpoppler を操作する為。 使ったことはありませんが、python-poppler ならメモリ上の処理ができそうです。
ppaul

2021/07/31 12:18

確かに、python-popplerだとメモリ上でレンダリングができそうですね。 https://cbrunet.net/python-poppler/usage.html を見ると、 Converting to PIL or Tk image という項目もあります。 teamikiさん、コメントではなくpersonさんに回答してあげてください。
teamikl

2021/08/01 06:57 編集

> コメントではなくpersonさんに回答してあげてください。 私のコメントの意図としては、ライブラリの提示のみでした。 ドキュメントに書かれてる通りなら、メモリ上で処理する手段としては使えそうなのですが、 実際に試してみると、インストール等の環境構築のハードルが高く、 結論としては ppaul さんの回答に賛同で、(訂正: popplerを使う場合)はファイル経由が無難だと思います。
guest

0

PDFを表示するには画像ファイルを生成しないとダメでしょうか?
画像のデータさえあればファイルにしなくてもいいのかな

メモリ上で処理する方法があれば、ファイルに出力する必要自体はありません。
但し、ライブラリが対応しているかどうかは別問題です。

ライブラリ pdf2image を利用する場合は、別プロセスで poppler を利用しているので、
データの受け渡し手段として、ファイルを経由するのは妥当な実装方法です。

「tkinter 上に表示する」という要件であれば、
まず、キャンバス等に描画する為に、PhotoImage オブジェクトを生成する必要があり、
PhotoImage オブジェクト生成は、ファイルを指定して読み込む以外にも、
メモリ上のデータを受け渡す方法はあります。

wxPythonでの実装ですが、画像データを得ると所迄は参考になります。

他のPDF読込描画ライブラリ PyMuPDF を使う方法 (画像データ → tkinterのPhotoImageオブジェクト)
https://pymupdf.readthedocs.io/en/latest/tutorial.html#tkinter

投稿2021/07/31 18:22

編集2021/08/01 07:10
teamikl

総合スコア8664

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問