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