我がアプリに PDF 表示機能を追加するのは前回のとおり簡単だった。
問題はサムネイル、GtkDrawingArea を配列に入れればいいやと思っていた。
Matrix で表示させたら凄いメモリ食いなうえスクロールが遅過ぎで使えなかった。
GtkFlowBox を破棄したら突っ込んだ GtkDrawingArea も破棄されるのは当然だった。
結局は縮小 GdkPixbuf にするという何のヒネリもない実装になった。
cr.render は背景は何もしないのね、白で塗り潰す必要があった。
細かくは comipoli のソースを見てくれということで。
つまり PDF は結構簡単に画像にできるってことだ。
それなら変換アプリでも作ろうかなと思ったけど。
#!/usr/bin/env python3 ''' pdf2png.py ''' import sys, gi, cairo gi.require_version('Gdk', '3.0') gi.require_version('Poppler', '0.18') gi.require_version('GdkPixbuf', '2.0') from gi.repository import Gio, Gdk, GdkPixbuf, Poppler if len(sys.argv) < 2: print('Usage: python3 {} PDFFILENAME'.format(sys.argv[0])) sys.exit() f = Gio.File.new_for_path(sys.argv[1]) pdf = Poppler.Document.new_from_gfile(f) l = pdf.get_n_pages() for i in range(l): page = pdf.get_page(i) w, h = page.get_size() w = round(w) h = round(h) with cairo.ImageSurface(cairo.Format.ARGB32, w, h) as surface: cr = cairo.Context(surface) cr.set_source_rgb(1, 1, 1) cr.rectangle(0, 0, w, h) cr.fill() page.render(cr) pixbuf = Gdk.pixbuf_get_from_surface(surface, 0, 0, w, h) pixbuf.savev('{0:03d}.png'.format(i + 1), 'png', ['compression'], ['9'])
おしまい。
たったこれだけだったのでヤメ!
GNOME ってスゲェなぁ、何故使う人少ないんだろう?