Le code suivant me permet d'afficher une image png
dans un bloc-notes iPython. Existe-t-il un moyen d'afficher pdf
image? Je n'ai pas besoin d'utiliser nécessairement IPython.display. Je cherche un moyen d'imprimer une image pdf dans un fichier vers la cellule de sortie du bloc-notes iPython.
## This is for an `png` image
from IPython.display import Image
fig = Image(filename=('./temp/my_plot.png'))
fig
Je vous remercie.
Le problème que vous (et d'autres) rencontrez est que les fichiers PDF ne peuvent pas être affichés directement dans le navigateur. Le seul moyen possible d'obtenir quelque chose de similaire est d'utiliser un convertisseur d'image pour créer un PNG ou JPG à partir du PDF et afficher celui-ci.
Cela pourrait être fait via imagemagick et une fonction d'affichage personnalisée.
Une solution simple consiste à utiliser wand ( http://docs.wand-py.org ) une liaison python-imagemagick. J'ai essayé avec Ubuntu 13.04:
Sous forme de texte:
from wand.image import Image as WImage
img = WImage(filename='hat.pdf')
img
Pour un pdf de plusieurs pages, vous pouvez obtenir par exemple la deuxième page via:
img = WImage(filename='hat.pdf[1]')
Comme les navigateurs récents prennent en charge l'affichage des fichiers PDF avec leur visionneuse PDF intégrée, une solution alternative possible basée sur un iframe peut être implémentée comme
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)
Cette classe implémente les représentations html et latex, donc le pdf survivra également à une conversion nb en latex. Il peut être utilisé comme
PDF('hat.pdf',size=(300,250))
Avec Firefox 33, cela se traduit par
En supposant un pdf multi-images appelé Rplots.pdf
Les éléments suivants fonctionnent dans la cellule du bloc-notes jupyter. Pour l'installation j'ai utilisé
pip install Wand
Ce code colle dans une cellule
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
En plus de l'excellente réponse de Jakob recommandant les fixations Wand pour ImageMagick:
Si votre PDF contient des graphiques vectoriels, utilisez le mot clé resolution
pour contrôler la taille de l'image rendue. La valeur par défaut d'ImageMagick est de 72 dpi. Des valeurs plus élevées donnent plus de pixels.
from wand.image import Image as WImage
img = WImage(filename='hat.pdf', resolution=100) # bigger
img