2012-05-25 1 views
8

그림을 PDF 파일로 저장하려고합니다. 내 코드는 다음과 같습니다 ...img = Image.open (fp) AttributeError : 클래스 Image에 'open'속성이 없습니다.

import sys 
import xlrd 
from PIL import Image 
import ImageEnhance 
from reportlab.platypus import * 
from reportlab.lib.styles import getSampleStyleSheet 
from reportlab.rl_config import defaultPageSize 
PAGE_HEIGHT=defaultPageSize[1] 

styles = getSampleStyleSheet() 

Title = "Integrating Diverse Data Sources with Gadfly 2" 

Author = "Aaron Watters" 

URL = "http://www.chordate.com/" 

email = "[email protected]" 

from reportlab.lib.units import inch 

pageinfo = "%s/%s/%s" % (Author, email, Title) 

def myFirstPage(canvas, doc): 
    canvas.saveState() 
    #canvas.setStrokeColorRGB(1,0,0) 
    #canvas.setLineWidth(5) 
    #canvas.line(66,72,66,PAGE_HEIGHT-72) 
    canvas.setFont('Times-Bold',16) 
    canvas.drawString(108, PAGE_HEIGHT-108, Title) 
    canvas.setFont('Times-Roman',9) 
    canvas.drawString(inch, 0.75 * inch, "First Page/%s" % pageinfo) 
    canvas.restoreState() 

def myLaterPages(canvas, doc): 
    #canvas.drawImage("snkanim.gif", 36, 36) 
    canvas.saveState() 
    #canvas.setStrokeColorRGB(1,0,0) 
    #canvas.setLineWidth(5) 
    #canvas.line(66,72,66,PAGE_HEIGHT-72) 
    canvas.setFont('Times-Roman',9) 
    canvas.drawString(inch, 0.75 * inch, "Page %d %s" % (doc.page, pageinfo)) 
    canvas.restoreState() 

def go(): 
    Elements.insert(0,Spacer(0,inch)) 
    doc = SimpleDocTemplate('ss.pdf') 
    doc.build(Elements,onFirstPage=myFirstPage, onLaterPages=myLaterPages) 

Elements = [] 

HeaderStyle = styles["Heading1"] # XXXX 

def header(txt, style=HeaderStyle, klass=Paragraph, sep=0.3): 
    s = Spacer(0.2*inch, sep*inch) 
    Elements.append(s) 
    para = klass(txt, style) 
    Elements.append(para) 

ParaStyle = styles["Normal"] 

def p(txt): 
    return header(txt, style=ParaStyle, sep=0.1) 

def open_excel(file= 'exc.xls'): 
    try: 
     data = xlrd.open_workbook(file) 
     return data 
    except Exception,e: 
     print str(e) 

#pre = p # XXX 

PreStyle = styles["Code"] 

def pre(txt): 
    s = Spacer(0.1*inch, 0.1*inch) 
    Elements.append(s) 
    p = Preformatted(txt, PreStyle) 
    Elements.append(p) 
p("""\ 
Relational databases manipulate and store persistent 
table structures called relations, such as the following 
three tables""") 

fp = open("/pdf-ex/downloadwin7.png","rb") 
img = Image.open(fp) 
img.show() 
# HACK 
Elements.append(PageBreak()) 


go() 
+0

여기에 문제가 있음을 알려주십시오. 문제가 있음을 알려주는 코드를 알려주세요. – kindall

답변

14

네임 스페이스가 충돌했습니다. import 문 중 하나는 어떤 클래스가 ImagePIL.Image (클래스가 아닌 모듈)입니다. 나중에 코드에서 다음 대신

...

from PIL import Image 

시도 ...

import PIL.Image 

...

fp = open("/pdf-ex/downloadwin7.png","rb") 
img = PIL.Image.open(fp) 
img.show() 

수입의 많은 작업, 네임 스페이스 충돌에주의하십시오. 저는 일반적으로 from some_module import * 진술을 매우 조심합니다.

프로젝트와 즐거운 코딩에 대해 감사드립니다.

+0

의견을 보내 주셔서 감사합니다. 프로그램을 실행하는 데는 아무런 잘못이 없습니다. 그러나 사진을 열 수 없습니다. – wangling

+0

그림을 PDF 파일에 표시 할 수 없습니다. – wangling

+0

@wangling 해 준 솔루션은 게시물의 제목으로 설명 된 문제를 해결합니다. .pdf 파일에 이미지를 추가하는 전반적인 문제에 대해서는 답변에 필요한 정보가 게시물에 제시된 내용을 넘어서는 극단적 인 정보로 대답 할 수 없습니다. 그러나, reportlab에 대한 나의 약식 지식에서 나는 당신이 올바른 길에 있다고 생각합니다. 계속 일하면서 곧 해결할 수 있습니다. – parselmouth

관련 문제