Подтвердить что ты не робот

Просмотр PDF-изображения в iPython Notebook

Следующий код позволяет мне просматривать образ png в ноутбуке iPython. Есть ли способ просмотра изображения pdf? Мне не нужно обязательно использовать IPython.display. Я ищу способ распечатать PDF файл в файле в выходной ячейке ноутбука iPython.

## This is for an `png` image
from IPython.display import Image

fig = Image(filename=('./temp/my_plot.png'))
fig

Спасибо.

4b9b3361

Ответ 1

Проблема, с которой вы (и другие) сталкиваетесь с тем, что файлы PDF не могут отображаться непосредственно в браузере. Единственный возможный способ получить что-то подобное - использовать конвертер изображений для создания PNG или JPG из PDF файла и отображения этого. Это можно сделать с помощью imagemagick и пользовательской функции отображения.

Обновление 1

Простым решением является использование wand (http://docs.wand-py.org) привязки python-imagemagick. Я пробовал с Ubuntu 13.04:

wand session in ipython

В текстовой форме:

from wand.image import Image as WImage
img = WImage(filename='hat.pdf')
img

Для многостраничного pdf вы можете получить, например, вторая страница через:

img = WImage(filename='hat.pdf[1]')

Обновление 2

Поскольку последние браузеры поддерживают отображение pdf файлов с помощью встроенного pdf-просмотра, альтернативное решение на основе iframe может быть реализовано как

class PDF(object):
  def __init__(self, pdf, size=(200,200)):
    self.pdf = pdf
    self.size = size

  def _repr_html_(self):
    return '<iframe src={0} width={1[0]} height={1[1]}></iframe>'.format(self.pdf, self.size)

  def _repr_latex_(self):
    return r'\includegraphics[width=1.0\textwidth]{{{0}}}'.format(self.pdf)

Этот класс реализует представления html и латекс, поэтому в pdf также сохранится nbconversion для латекса. Его можно использовать как

PDF('hat.pdf',size=(300,250))

В Firefox 33 это приводит к enter image description here

Ответ 2

Чтобы показать pdf-ы в ноутбуках ipython/jupyter, вы можете использовать IFrame

from IPython.display import IFrame
IFrame("./samples/simple3.pdf", width=600, height=300)

Вот скриншот

pdf preview в ipython/jupyter notebook

Ответ 3

Предполагая, что многостраничный файл PDF называется Rplots.pdf

В ячейке ноутбука jupyter работает следующее. Для установки я использовал

pip install Wand

Этот код вставляется в ячейку

from wand.image import Image  

imageFromPdf = Image(filename='Rplots.pdf')  
pages = len(imageFromPdf.sequence)  

image = Image(  
  width=imageFromPdf.width,  
  height=imageFromPdf.height * pages  
)  
for i in range(pages):  
  image.composite(  
  imageFromPdf.sequence[i],  
  top=imageFromPdf.height * i,  
  left=0  
)  
image.format="png"  
image