2012-05-25 11 views
8

Quiero poner las imágenes en un archivo PDF. Mi código sigue ...img = Image.open (fp) AttributeError: class La imagen no tiene ningún atributo 'abierto'

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

Cuéntanos aquí que estás atascado y danos la menor cantidad de código que demuestra el problema. – kindall

Respuesta

14

Tiene un conflicto de espacio de nombres. Una de sus instrucciones de importación está ocultando PIL.Image (que es un módulo, no una clase) con alguna clase llamada Image.

En lugar de ...

from PIL import Image 

oportunidad ...

import PIL.Image 

entonces adelante en el código ...

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

Cuando se trabaja con una gran cantidad de las importaciones, ten cuidado con los conflictos del espacio de nombres. En general, soy muy cauteloso con las declaraciones from some_module import *.

Buena suerte con su proyecto y feliz codificación.

+0

Gracias por su comentario. No hay ningún error para ejecutar el programa. Pero la imagen no se pudo abrir. – wangling

+0

La imagen no se pudo mostrar en el archivo PDF – wangling

+0

@wangling la solución que proporcioné resuelve el problema que describe el título de su publicación. En cuanto al problema general de agregar imágenes al archivo .pdf, no puedo responder porque la información necesaria para responder es MUY mayor que la que se presenta en la publicación. Sin embargo, desde mi conocimiento superficial de ReportLab, creo que estás en el camino correcto. Sigue trabajando en eso y lo resolverás pronto. – parselmouth

Cuestiones relacionadas