2012-07-01 2 views
2

보고서 연구실에서 일하고 있습니다. 오리너구리와 함께 PNG 이미지를 추가 할 수 없습니다. 여기에서 일부 샘플 코드는 http://www.tylerlesmann.com/2009/jan/28/writing-pdfs-python-adding-images/이고 추가 오류가 있습니다. 그 png보고서 실험실과 함께 PDF에 PNG를 추가하려면 어떻게해야합니까?

내가 작동하게 도와 줄 수 있습니까?

#!/usr/bin/env python 

import os 
import urllib2 
from reportlab.lib.pagesizes import letter 
from reportlab.platypus import SimpleDocTemplate, Image 

filename = './python-logo.png' 

def get_python_image(): 
    """ Get a python logo image for this example """ 
    if not os.path.exists(filename): 
     response = urllib2.urlopen(
      'http://www.python.org/community/logos/python-logo.png') 
     f = open(filename, 'w') 
     f.write(response.read()) 
     f.close() 

get_python_image() 

doc = SimpleDocTemplate("image.pdf", pagesize=letter) 
parts = [] 
parts.append(Image(filename)) 
doc.build(parts) 



--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
/media/Felipe/B1wt/<ipython-input-21-1c3c466b9184> in <module>() 
    22 parts = [] 
    23 parts.append(Image(filename)) 
---> 24 doc.build(parts) 
    25 

/usr/lib/python2.7/site-packages/reportlab/platypus/doctemplate.pyc in build(self, flowables, onFirstPage, onLaterPages, canvasmaker) 
    1115   if onLaterPages is _doNothing and hasattr(self,'onLaterPages'): 
    1116    self.pageTemplates[1].beforeDrawPage = self.onLaterPages 
-> 1117   BaseDocTemplate.build(self,flowables, canvasmaker=canvasmaker) 
    1118 
    1119 def progressCB(typ, value): 

/usr/lib/python2.7/site-packages/reportlab/platypus/doctemplate.pyc in build(self, flowables, filename, canvasmaker) 
    878     try: 
    879      first = flowables[0] 
--> 880      self.handle_flowable(flowables) 
    881      handled += 1 
    882     except: 

/usr/lib/python2.7/site-packages/reportlab/platypus/doctemplate.pyc in handle_flowable(self, flowables) 
    761    canv = self.canv 
    762    #try to fit it then draw it 

--> 763    if frame.add(f, canv, trySplit=self.allowSplitting): 
    764     if not isinstance(f,FrameActionFlowable): 
    765      self._curPageFlowableCount += 1 

/usr/lib/python2.7/site-packages/reportlab/platypus/frames.pyc in _add(self, flowable, canv, trySplit) 
    157    h = y - p - s 
    158    if h>0: 
--> 159     w, h = flowable.wrap(aW, h) 
    160    else: 
    161     return 0 

/usr/lib/python2.7/site-packages/reportlab/platypus/flowables.pyc in wrap(self, availWidth, availHeight) 
    406  def wrap(self, availWidth, availHeight): 
    407   #the caller may decide it does not fit. 

--> 408   return self.drawWidth, self.drawHeight 
    409 
    410  def draw(self): 

/usr/lib/python2.7/site-packages/reportlab/platypus/flowables.pyc in __getattr__(self, a) 
    400    return self._img 
    401   elif a in ('drawWidth','drawHeight','imageWidth','imageHeight'): 
--> 402    self._setup_inner() 
    403    return self.__dict__[a] 
    404   raise AttributeError("<Image @ 0x%x>.%s" % (id(self),a)) 

/usr/lib/python2.7/site-packages/reportlab/platypus/flowables.pyc in _setup_inner(self) 
    366   height = self._height 
    367   kind = self._kind 
--> 368   img = self._img 
    369   if img: self.imageWidth, self.imageHeight = img.getSize() 
    370   if self._lazy>=2: del self._img 

/usr/lib/python2.7/site-packages/reportlab/platypus/flowables.pyc in __getattr__(self, a) 
    396   if a=='_img': 
    397    from reportlab.lib.utils import ImageReader #this may raise an error 
--> 398    self._img = ImageReader(self._file) 
    399    del self._file 
    400    return self._img 

/usr/lib/python2.7/site-packages/reportlab/lib/utils.pyc in __init__(self, fileName, ident) 
    539   self._transparent = None 
    540   self._data = None 
--> 541   if _isPILImage(fileName): 
    542    self._image = fileName 
    543    self.fp = getattr(fileName,'fp',None) 

/usr/lib/python2.7/site-packages/reportlab/lib/utils.pyc in _isPILImage(im) 
    519 def _isPILImage(im): 
    520  try: 
--> 521   return isinstance(im,Image.Image) 
    522  except ImportError: 
    523   return 0 

AttributeError: 'NoneType' object has no attribute 'Image' 
+0

귀하의 코드가 – mhawke

+0

파이썬 2.7에 reportlab-2.5을 사용하여 나를 위해 잘 작동 reportlab의 버전을에 있습니까? –

답변

4

당신은, 예를 들어와, PIL (Python Imaging Library)를 설치해야합니다

pip install PIL 

나는 PIL를 가져 오는 실패, 그것은 이미지 = 없음을 설정하지 추측하고있다. reportlab 소스를 쉽게 탐색 할 수 있다면 확인해 보겠습니다.

편집 : 여기에 우리가 간다 :

try: 
    import Image 
    if PIL_WARNINGS: warnOnce('Python Imaging Library not available as package; upgrade your installation!') 
except ImportError, errMsg: 
    _checkImportError(errMsg) 
    Image = None 
+0

정말 고마워요! – friveroll

관련 문제