2012-05-25 22 views
8

Tôi muốn đưa hình ảnh vào một tập tin PDF. Mã của tôi sau ...img = Image.open (fp) AttributeError: class Hình ảnh không có thuộc tính '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

Hãy cho chúng tôi biết bạn đang gặp khó khăn và cung cấp cho chúng tôi số lượng mã nhỏ nhất thể hiện sự cố. – kindall

Trả lời

14

Bạn có xung đột không gian tên. Một trong các câu lệnh nhập khẩu của bạn đang che dấu PIL.Image (là một mô-đun, không phải là một lớp) với một số lớp có tên là Image.

Thay vì ...

from PIL import Image 

thử ...

import PIL.Image 

sau đó trong mã của bạn ...

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

Khi làm việc với rất nhiều hàng nhập khẩu, hãy cẩn thận xung đột không gian tên. Tôi thường rất cảnh giác với các tuyên bố from some_module import *.

Chúc bạn may mắn với dự án và mã hóa vui vẻ của mình.

+0

Cảm ơn nhận xét của bạn. Không có gì sai khi chạy chương trình. Nhưng hình ảnh không thể mở được. – wangling

+0

Không thể hiển thị ảnh trong tệp PDF – wangling

+0

@wangling giải pháp mà tôi đã giải quyết vấn đề được mô tả bằng tiêu đề bài đăng của bạn. Đối với vấn đề tổng thể của việc thêm hình ảnh vào tệp .pdf, tôi không thể trả lời là thông tin cần thiết để trả lời đó là FAR ngoài những gì được trình bày trong bài đăng. Tuy nhiên, từ hiểu biết của tôi về báo cáo, tôi nghĩ bạn đang đi đúng hướng. Tiếp tục làm việc tại đó và bạn sẽ sớm giải quyết nó. – parselmouth

Các vấn đề liên quan