web-dev-qa-db-ja.com

iPython NotebookでPDF画像を表示する

次のコードにより、iPythonノートブックでpngイメージを表示できます。 pdfイメージを表示する方法はありますか?必ずしもIPython.displayを使用する必要はありません。ファイル内のpdf画像をiPythonノートブック出力セルに印刷する方法を探しています。

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

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

ありがとうございました。

39
Curious2learn

あなた(および他の人)が直面する問題は、PDFをブラウザに直接表示できないことです。類似したものを取得する唯一の方法は、イメージコンバーターを使用してPDFからPNGまたはJPGを作成し、これを表示することです。
これは、imagemagickおよびカスタム表示機能を介して実行できます。

アップデート1

簡単な解決策は、python-imagemagickバインディングであるワンド( http://docs.wand-py.org )を使用することです。 Ubuntu 13.04で試しました:

wand session in ipython

テキスト形式:

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

複数ページのPDFの場合、たとえば2ページ目:

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では、これにより enter image description here

52
Jakob

Ipython/jupyterノートブック内でpdf-sを表示するには、IFrameを使用できます

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

これがスクリーンショットです

pdf preview in ipython/jupyter notebook

41
Levon

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 
3
Jeremy Ellis

ImageMagickのWandバインディングを推奨するJakobの優れた答えに加えて:

PDF=ベクターグラフィックスが含まれている場合、resolutionキーワードを使用して、レンダリングイメージのサイズを制御します。ImageMagickのデフォルト値は72 dpiです。値が大きいほどピクセルが多くなります。

from wand.image import Image as WImage
img = WImage(filename='hat.pdf', resolution=100) # bigger
img
1
Haffael