Как преобразовать PDF в Pixbuf с помощью Python и GTK3+

Я хочу отображать страницы из файла PDF в GtkIconView. Для этого мне нужен столбец типа GDK_TYPE_PIXBUF в моем GtkTreeModel. Как преобразовать страницу PDF в файл Pixbuf?

Имея page, PopplerPage, я попробовал это:

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, 320, 240)
page.render(surface)
img = Gdk.pixbuf_get_from_surface(surface, 0, 0, 320, 240)

Однако я получаю сообщение об ошибке утверждения ((*&(&cr->ref_count)->ref_count) > 0) при выполнении команды render.


person Charles Brunet    schedule 28.01.2013    source источник
comment
проверьте это sourceforge.net/tracker/   -  person Rachel Gallen    schedule 28.01.2013


Ответы (2)


Наконец, я понял. Я должен отобразить в cairo Context, например:

surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
ctx = cairo.Context(surface)
page.render(ctx)
img = Gdk.pixbuf_get_from_surface(ctx.get_target(), 0, 0,
        ctx.get_target().get_width(),
        ctx.get_target().get_height())
person Charles Brunet    schedule 29.01.2013

попробуй это

 # get pdf
 pdf = mkpdf(ds,sample=True)

# render pdf onto pixbuf
pixbuf = Pixbuf(COLORSPACE_RGB,False,8,286,225)
doc = poppler.document_new_from_data(pdf,len(pdf),password='')
page0=doc.get_page(0)
page0.render_to_pixbuf(0,0,8,11,1,0,pixbuf)

# save pixbuf as png
# There has to be a better way to get the image?
lst=[]
pixbuf.save_to_callback(lambda b,l: l.append(b), 'png', user_data=lst)
png=''.join(lst)

return png

Справочник

person Rachel Gallen    schedule 28.01.2013
comment
Как вы указали в своем комментарии, в Poppler больше нет функции render_to_pixbuf, поскольку она мигрировала в cairo. - person Charles Brunet; 29.01.2013
comment
Как вы сейчас это делаете с cairo? - person Sudo Bash; 19.02.2013