Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

View pdf image in an iPython Notebook

The following code allows me to view a png image in an iPython notebook. Is there a way to view pdf image? I don't need to use IPython.display necessarily. I am looking for a way to print a pdf image in a file to the iPython notebook output cell.

## This is for an `png` image from IPython.display import Image  fig = Image(filename=('./temp/my_plot.png')) fig 

Thank you.

like image 457
Curious2learn Avatar asked Oct 19 '13 19:10

Curious2learn


People also ask

How do I display an image in IPython notebook?

When using GenomeDiagram with Jupyter (iPython), the easiest way to display images is by converting the GenomeDiagram to a PNG image. This can be wrapped using an IPython. display. Image object to make it display in the notebook.

How do you view images in a Jupyter Notebook?

Method 1: Direct insertion using the edit menu Step 2: After that click edit in the jupyter notebook menu. after that click 'insert image'. Edit -> insert image. Step 3: After that, a dialogue box opens up and asks us to locate the file.


2 Answers

The problem you (and others) face is that PDFs cannot be displayed directly in the browser. The only possible way to get something similar is to use an image-converter to create a PNG or JPG out of the PDF and display this one.
This could be done via imagemagick and a custom display function.

Update 1

A simple solution is to use wand (http://docs.wand-py.org) a python-imagemagick binding. I tried with Ubuntu 13.04:

wand session in ipython

In text form:

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

For a multi-page pdf, you can get e.g. the second page via:

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

Update 2

As recent browsers support to display pdfs with their embedded pdf viewer a possible alternative solution based on an iframe can be implemented as

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) 

This class implements html and latex representations, hence the pdf will also survive a nbconversion to latex. It can be used like

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

With Firefox 33 this results in enter image description here

like image 124
Jakob Avatar answered Sep 29 '22 13:09

Jakob


To show pdf-s inside ipython/jupyter notebooks you can use IFrame

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

Here is the screenshot

pdf preview in ipython/jupyter notebook

like image 26
Levon Avatar answered Sep 29 '22 13:09

Levon