50

以下代码允许我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

谢谢你。

4

4 回答 4

80

您(和其他人)面临的问题是 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

对于多页 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 和 latex 表示,因此 pdf 也将在 nbconversion 到 latex 后继续存在。它可以像

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

对于 Firefox 33,这会导致 在此处输入图像描述

于 2013-10-19T19:49:39.250 回答
68

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

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

这是屏幕截图

ipython/jupyter notebook 中的 pdf 预览

于 2016-02-26T15:05:56.290 回答
4

假设一个名为 Rplots.pdf 的多图像 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 
于 2016-02-24T03:14:03.667 回答
3

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

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

from wand.image import Image as WImage
img = WImage(filename='hat.pdf', resolution=100) # bigger
img
于 2018-01-15T16:27:05.520 回答