webentwicklung-frage-antwort-db.com.de

PDF-Bild in einem iPython-Notizbuch anzeigen

Mit dem folgenden Code kann ich ein png Bild in einem iPython-Notizbuch anzeigen. Gibt es eine Möglichkeit, pdf Bild anzuzeigen? Ich muss IPython.display nicht unbedingt verwenden. Ich suche nach einer Möglichkeit, ein PDF-Bild in einer Datei in die iPython-Notebook-Ausgabezelle zu drucken.

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

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

Vielen Dank.

39
Curious2learn

Das Problem, dem Sie (und andere) gegenüberstehen, ist, dass PDF-Dateien nicht direkt im Browser angezeigt werden können. Die einzige Möglichkeit, etwas Ähnliches zu erreichen, besteht darin, mit einem Bildkonverter ein PNG oder JPG aus PDF) zu erstellen und dieses anzuzeigen.
Dies könnte über imagemagick und eine benutzerdefinierte Anzeigefunktion erfolgen.

Update 1

Eine einfache Lösung ist die Verwendung von wand ( http://docs.wand-py.org ) einer Python-Imagemagick-Bindung. Ich habe es mit Ubuntu 13.04 versucht:

wand session in ipython

In Textform:

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

Für ein mehrseitiges PDF können Sie z. die zweite Seite über:

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

Update 2

Da neuere Browser die Anzeige von PDFs mit ihrem eingebetteten PDF-Viewer unterstützen, kann eine mögliche alternative Lösung basierend auf einem iframe als implementiert werden

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)

Diese Klasse implementiert HTML- und Latex-Darstellungen, daher überlebt das PDF auch eine Konvertierung in Latex. Es kann gerne verwendet werden

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

Mit Firefox 33 führt dies zu enter image description here

52
Jakob

Zum Anzeigen von PDF-Dateien in ipython/jupyter-Notizbüchern können Sie IFrame verwenden.

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

Hier ist der Screenshot

pdf preview in ipython/jupyter notebook

41
Levon

Angenommen, ein PDF mit mehreren Bildern mit dem Namen Rplots.pdf

Das Folgende funktioniert in der Jupyter-Notebook-Zelle. Für die Installation habe ich verwendet

pip install Wand

Dieser Code wird in eine Zelle eingefügt

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

Zusätzlich zu Jakobs hervorragender Antwort auf die Empfehlung der Wand-Bindungen für ImageMagick:

Wenn Ihr PDF enthält Vektorgrafiken, verwenden Sie das Schlüsselwort resolution, um die Größe des gerenderten Bildes zu steuern. Der Standardwert von ImageMagick ist 72 dpi. Höhere Werte ergeben mehr Pixel.

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