from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, BaseDocTemplate from reportlab.lib.styles import getSampleStyleSheet from reportlab.rl_config import defaultPageSize from reportlab.lib.units import inch, cm import locale PAGE_HEIGHT=defaultPageSize[1]; PAGE_WIDTH=defaultPageSize[0] styles = getSampleStyleSheet() Title = "" pageinfo = "" def pdf(obj_id): response = HttpResponse(mimetype='application/pdf') filename = '-outline.pdf' response['Content-Disposition'] = 'filename=' + filename course = "Course" crea_pdf(course, response, obj_id) return response def crea_pdf(course, output, obj_id): doc = SimpleDocTemplate("phello.pdf") Story = [Spacer(1,2*inch)] style = styles["Normal"] for i in range(100): bogustext = ("This is Paragraph number %s. " % i) *20 p = Paragraph(bogustext, style) Story.append(p) Story.append(Spacer(1,0.2*inch)) #doc.build(Story, onFirstPage=myFirstPage(), onLaterPages=myLaterPages) #doc.build(Story) from django.http import HttpResponseRedirect, HttpResponse from resguardos.models import Resguardo, Resguardo_detalle def pdfOK(request, obj_id): ''' provides a pdf view of the course ''' response = HttpResponse(mimetype='application/pdf') filename = '-outline.pdf' response['Content-Disposition'] = 'filename=' + filename course = "Course" _generate_pdf(course, response, obj_id) return response def _generate_pdf(course,output, obj_id): #pdf stuff datos = Resguardo.objects.get(pk=obj_id) detalle = Resguardo_detalle.objects.all().filter(resguardo_id = obj_id) folio = datos.folio dependencia = datos.vo_bo.persona.unidad.dependencia.nombre unidad = datos.vo_bo.persona.unidad.unidad.nombre dependenciaResponsable = datos.responsable.unidad.dependencia.nombre unidadResponsable = datos.responsable.unidad.nombre fecha = datos.fecha_registro.strftime('%d-%m-%Y') legal = 'Recibo para uso, los bienes descritos y de hago responsable de su custodia y de dar aviso en 5 dias habiles a mi jefe inmediato al Departamento de control de inventario en caso de extravio, cambio de adscripcion o baja de los mismos.' responsable = datos.responsable.nombre responsablevoboPuesto = datos.vo_bo.unidad vo_bo = '' #datos.vo_bo.nombre responsablevobo = datos.vo_bo.nombre from reportlab.pdfgen import canvas from reportlab.lib.enums import TA_JUSTIFY, TA_RIGHT, TA_LEFT, TA_CENTER from reportlab.lib.pagesizes import A4, letter, landscape from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image, Table , TableStyle from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import mm, inch, cm from reportlab.lib import colors from cStringIO import StringIO from reportlab.platypus import XPreformatted from django.conf import settings doc = SimpleDocTemplate(output,pagesize=landscape(letter), rightMargin=5*mm,leftMargin=5*mm, topMargin=mm,bottomMargin=5*mm) def myFirstPage(canvas, doc): canvas.saveState() canvas.drawImage('static/imagenes/sa_logo.jpg',20,555, 130, 56) canvas.setFont('Times-Bold',16) canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-108, Title) canvas.setFont('Times-Roman',9) canvas.drawString(25*cm, .25 * inch, "Pagina %d" % (doc.page)) canvas.restoreState() def myLaterPages(canvas, doc): canvas.saveState() canvas.drawImage('static/imagenes/sa_logo.jpg',20,555, 130, 56) canvas.setFont('Times-Roman',9) canvas.drawString(25*cm, .25 * inch, "Page %d %s" % (doc.page, pageinfo)) canvas.restoreState() OutlinePDF=[] styles=getSampleStyleSheet() #OutlinePDF.append(Paragraph('', styles['Normal'])) styles.add( ParagraphStyle( name = 'Justificado', alignment = TA_JUSTIFY ) ) styles.add( ParagraphStyle( name = 'Centrado' ) ) Centrado = styles["Centrado"] Centrado.alignment = TA_CENTER Centrado.fontName = "Helvetica" Centrado.fontSize = 12 #Centrado.leading = 15 OutlinePDF.append(Paragraph(str(dependencia), styles['Centrado'],)) OutlinePDF.append(Paragraph(str(unidad), styles['Centrado'])) OutlinePDF.append(Spacer(20, 20)) OutlinePDF.append(Paragraph("RESGUARDO INDIVIDUAL DE MOVILIARIO, EQUIPO DE OFICINA Y OTROS BIENES MUEBLES", styles['Centrado'])) OutlinePDF.append(Spacer(20, 20)) folio = Paragraph("Folio: " + str(folio)+"", styles['Normal'],) fecha = Paragraph("" + str(fecha) + "", styles['Normal'],) ## subEncabezado = [ ["Dependencia: ", str(dependencia), '', folio], ['Unidad: ' , str(unidad) , '', fecha] ] t = Table(subEncabezado) t.setStyle(TableStyle([ #('GRID',(0,0),(-1,-1),0.5,colors.black), ('ALIGN',(0,0),(0,1),'LEFT'), ('ALIGN',(3,0),(3,1),'RIGHT'), #('BACKGROUND',(3,0),(3,1),colors.cyan), ])) OutlinePDF.append(t) OutlinePDF.append(Paragraph(' ', styles['Normal'])) #tabla data= [['Num.','Descripcion', 'Marca', 'Modelo', 'Serie', 'Factura', 'Inventario', 'Fecha', 'Importe', 'Estado', 'Observaciones'], ] num = 1 total = 0 for linea in detalle: lfecha = linea.fecha_factura data= data + [[num,linea.descripcion, linea.marca, linea.modelo, linea.serie, linea.factura, linea.inventario, lfecha, '${:15,.2f}'.format(linea.importe), linea.estado, linea.observaciones]] num = num+1 total = total + linea.importe data= data + [['', '', '', '', '', '', '', 'Total:',str('${:15,.2f}'.format(total)),'' ,'']] tableThatSplitsOverPages = Table(data, [.9*cm, 4*cm, 2*cm, 3.5*cm, 3.5*cm, 1.5*cm, 2*cm, 1.5*cm, 2*cm, 1.1*cm, 5*cm], repeatRows=1) tableThatSplitsOverPages.hAlign = 'LEFT' #t=Table(data) tblStyle = TableStyle([ ('FONTSIZE',(0,0),(-1,-1),8), #TAMANO DE LETRA ('BOX', (0,0), (-1,-1), 0.5, colors.black), #'INNERGRID', (0,0), (-1,-1), 0.25, colors.black), ('GRID',(0,0),(-1,-1),0.5,colors.black), #('BACKGROUND',(1,1),(-2,-2),colors.white), #('TEXTCOLOR',(0,0),(1,-1),colors.black) ('ALIGN',(0,0),(10,0),'CENTER'), #CENTRADO LINEA SUPERIOR ('ALIGN',(0,0),(0,-1),'CENTER'), #CENTRADO COLUMNA PRIMERA Num. ('ALIGN',(2,1),(10,-1),'CENTER'), #CENTRADO COLUMNA 3,4,5,6,7,8,9,10, #('BACKGROUND',(2,1),(10,-1),colors.cyan), ]) #t.setStyle(tblStyle) tableThatSplitsOverPages.setStyle(tblStyle) OutlinePDF.append(tableThatSplitsOverPages) #OutlinePDF.append(t) legal = Paragraph(str(legal), styles['Justificado']) OutlinePDF.append(legal) OutlinePDF.append(Spacer(1, 1*cm)) responsables = [ ['','Responsable','',responsablevoboPuesto, ''], ['','','','Vo. Bo.',''], ['','','','',''], ['',responsable,'',responsablevobo,''], ['','','','',''] ] tableThatSplitsOverPages = Table(responsables, [3*cm, 8*cm, 3*cm, 8*cm, 3*cm], repeatRows=1) #t= Table(responsables) tableThatSplitsOverPages.setStyle(TableStyle([ #('BACKGROUND',(3,0),(3,-1),colors.cyan), #('GRID',(0,0),(-1,-1),0.5,colors.cyan), ('ALIGN',(1,0),(1,-1),'CENTER'), ('ALIGN',(3,0),(3,-1),'CENTER'), ('LINEABOVE', (3,3), (3,3), 1, colors.black), ('LINEABOVE', (1,3), (1,3), 1, colors.black), ])) OutlinePDF.append(tableThatSplitsOverPages) #doc.build(OutlinePDF, onFirstPage=myFirstPage, onLaterPages=myLaterPages) doc.build(OutlinePDF, onFirstPage=myFirstPage, onLaterPages=myLaterPages) def preformat_html_textarea(value,endwidth=135): ''' since reportlab doesn't provide a way to keep the
 of what ever
        is entered in the html textarea. This is manual way to text wrap. 
    '''
    import textwrap
    new_value = value.replace('\r','')
    new_values = new_value.split('\n')
    result = ""
    for line in new_values:
        result += textwrap.fill(line,endwidth) + "\n"

    return result