在iPython Notebook中查看pdf图像

Cur*_*arn 41 python 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
Run Code Online (Sandbox Code Playgroud)

谢谢.

Jak*_*kob 53

您(和其他人)面临的问题是PDF无法直接在浏览器中显示.获得类似功能的唯一可能方法是使用图像转换器从PDF中创建PNG或JPG并显示此图片.
这可以通过imagemagick和自定义显示功能完成.

更新1

一个简单的解决方案是使用wand(http://docs.wand-py.org)python-imagemagick绑定.我尝试使用Ubuntu 13.04:

ipython中的魔杖会话

以文本形式:

from wand.image import Image as WImage
img = WImage(filename='hat.pdf')
img
Run Code Online (Sandbox Code Playgroud)

对于多页pdf,您可以通过以下方式获得第二页:

img = WImage(filename='hat.pdf[1]')
Run Code Online (Sandbox Code Playgroud)

更新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)
Run Code Online (Sandbox Code Playgroud)

这个类实现了html和latex表示,因此pdf也可以在nbconversion转换为latex之后继续存在.它可以像

PDF('hat.pdf',size=(300,250))
Run Code Online (Sandbox Code Playgroud)

使用Firefox 33会产生这种效果 在此输入图像描述


Lev*_*von 46

要在ipython/jupyter笔记本中显示pdf-s,您可以使用 IFrame

from IPython.display import IFrame
IFrame("./samples/simple3.pdf", width=600, height=300)
Run Code Online (Sandbox Code Playgroud)

这是截图

在ipython/jupyter笔记本中的pdf预览

  • 极其重要的注意事项:目标PDF文件**必须在jupyter notebook目录的子目录中运行**。 (2认同)

小智 5

除了 Jakob 的出色回答推荐 ImageMagick 的 Wand 绑定之外:

如果您的 PDF 包含矢量图形,请使用resolution关键字来控制渲染图像的大小。ImageMagick 的默认值为 72 dpi。值越高,产生的像素越多。

from wand.image import Image as WImage
img = WImage(filename='hat.pdf', resolution=100) # bigger
img
Run Code Online (Sandbox Code Playgroud)