notebook - Ver imagen en PDF en un portátil iPython
jupyter notebook tutorial español (4)
El siguiente código me permite ver una imagen png
en una computadora portátil iPython. ¿Hay alguna manera de ver la imagen en pdf
? No necesito usar IPython.display necesariamente. Estoy buscando una manera de imprimir una imagen en pdf en un archivo a la celda de salida del notebook iPython.
## This is for an `png` image
from IPython.display import Image
fig = Image(filename=(''./temp/my_plot.png''))
fig
Gracias.
Además de la excelente respuesta de Jakob que recomienda las fijaciones Wand para ImageMagick:
Si su PDF contiene gráficos vectoriales, use la palabra clave de resolution
para controlar el tamaño de la imagen renderizada. El valor predeterminado de ImageMagick es 72 ppp. Los valores más altos producen más píxeles.
from wand.image import Image as WImage
img = WImage(filename=''hat.pdf'', resolution=100) # bigger
img
Asumiendo un pdf de múltiples imágenes llamado Rplots.pdf
Lo siguiente funciona en la celda del Jupyter. Para la instalación que utilicé
pip install Wand
Este código se pega a una celda
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
El problema al que usted (y otros) se enfrentan es que los archivos PDF no se pueden mostrar directamente en el navegador. La única forma posible de obtener algo similar es usar un convertidor de imágenes para crear un PNG o JPG desde el PDF y mostrar este.
Esto podría hacerse a través de imagemagick y una función de visualización personalizada.
Actualización 1
Una solución simple es usar varita ( http://docs.wand-py.org ) un enlace python-imagemagick. Lo intenté con Ubuntu 13.04:
En forma de texto:
from wand.image import Image as WImage
img = WImage(filename=''hat.pdf'')
img
Para un PDF de varias páginas, puede obtener, por ejemplo, la segunda página a través de:
img = WImage(filename=''hat.pdf[1]'')
Actualización 2
Como los navegadores recientes admiten la visualización de archivos PDF con su visor de PDF integrado, se puede implementar una posible solución alternativa basada en un marco flotante como
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)
Esta clase implementa representaciones html y latex, por lo tanto, el pdf también sobrevivirá una conversión nb al látex. Se puede usar como
PDF(''hat.pdf'',size=(300,250))
Con Firefox 33, esto da como resultado