Pythonで作るシンプルPDFビューワー

2020/03/03 categories:PyQt5| tags:Python|PyQt5|Poppler|

概要

画像をドラックアンドドロップすると表示するだけのソフトです。マウスホイールでズーム、マウス左クリックでドラッグするとパンできます。

準備

Poppler for Windowsからpopplerをダウンロードしてsimple_pdf_viewer.pyがあるフォルダに入れてsimple_pdf_viewer.pyを実行するとウィンドウが表示されます。

ソースコード

github

その他

シンプル画像ビューワーのPDF版を作ってみました。今回が画像ではなくPDFなので、PDFを読み込むときはpdftocairo.exeで一旦画像に変換しています。

cmd = [str(self.pdftocairo_path), '-png', '-r', '200', path, '__tmp__']

startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE
proc = subprocess.Popen(
    cmd, 
    stdout=subprocess.PIPE, 
    stderr=subprocess.PIPE, 
    startupinfo=startupinfo
)
stdout, stderr = proc.communicate(timeout=1000)

pdftocairo.exeはsubprocessで実行しています。画像化するときの解像度は-r 200のオプションで指定しています。出力される画像は-pngのオプションで指定して、ファイル名は__tmp__としていて、PDFファイルの1ページ目はファイル名の末尾に-1がつくので、結果として出力されるファイルの名前は__tmp__-1.pngとなります。

image = QtGui.QImage('__tmp__-1.png', 'PNG')
pixmap = QtGui.QPixmap.fromImage(image)
scene = QtWidgets.QGraphicsScene(self)
scene.addPixmap(pixmap)
Path('__tmp__-1.png').unlink()

self.ui.graphicsView.setScene(scene)
self.ui.graphicsView.scale(1.0, 1.0)

その後、出力された__tmp__-1.pngをQImage→QPixmapと変換していき、QGraphicsSceneにQPixmapを入れて、QGraphicsViewにQGraphicsSceneをセットすることで表示されます。

pdftocairo.exeで変換するときに解像度を上げると変換に時間がかかるので表示まで時間がかかりますが、解像度を200や300くらいならそこそこの速度で表示できると思います。

Share post

Related Posts

コメント