コード例 #1
0
ファイル: pdf.py プロジェクト: anateixeira1108/categorizacion
def base(context, pdf_file, funcionario=False):
    output = PdfFileWriter()
    input = PdfFileReader(file(os.path.join(settings.PDF_ROOT, pdf_file), 'rb'))
    pagina_numero = 0
    # create response object
    response = HttpResponse(content_type='application/pdf')
    if funcionario:
        response['Content-Disposition'] = 'attachment; filename=expediente_natural.pdf'
    else:
        response['Content-Disposition'] = 'attachment; filename=registro_natural.pdf'

    # get number of pages
    num_pages = input.getNumPages()

    if not funcionario:
        # fill first page
        buffer = StringIO()  # create string buffer for PDF
        pdf = canvas.Canvas(buffer, pagesize=letter)
        pdf.drawString(450, 659, date.today().strftime("%d/%m/%Y"))
        pdf.drawString(41, 559, u'{nombres} {apellidos}'.format(nombres=unicode(context['pst'].nombres),
                                                                apellidos=unicode(context['pst'].apellidos)))
        pdf.drawString(41, 525, u'{rif} / {ci}'.format(rif=unicode(context['pst'].rif),
                                                       ci=unicode(context['pst'].cedula)))
        pdf.save()
        # put on watermark from buffer
        watermark = PdfFileReader(buffer)
        page1 = input.getPage(0)

        page1.mergePage(watermark.getPage(0))
        buffer.seek(0)

        # add processed pdf page
        output.addPage(page1)

    # paginas Copia de la Cedula de Identidad
    output, pagina_numero = pager(output, input.getPage(1), pagina_numero)
    try:
        ci = PdfFileReader(file(os.path.join(settings.MEDIA_ROOT, unicode(context['pst'].archivo_cedula)), 'rb'))
        output, pagina_numero = pager(output, ci.getPage(0), pagina_numero)
    except:
        output, pagina_numero = pager(output, input.getPage(2), pagina_numero)
    # paginas RIF
    output, pagina_numero = pager(output, input.getPage(3), pagina_numero)
    try:
        rif = PdfFileReader(file(os.path.join(settings.MEDIA_ROOT, unicode(context['pst'].archivo_rif)), 'rb'))
        output, pagina_numero = pager(output, rif.getPage(0), pagina_numero)
    except:
        output, pagina_numero = pager(output, input.getPage(4), pagina_numero)
    # paginas Recibo de Servicio
    output, pagina_numero = pager(output, input.getPage(5), pagina_numero)
    servicio_file_format = unicode(context['pst'].archivo_servicio).split('.')[-1]
    try:
        if servicio_file_format in ['pdf', 'PDF']:
            servicio = PdfFileReader(
                file(os.path.join(settings.MEDIA_ROOT, unicode(context['pst'].archivo_servicio)), 'rb'))
            output, pagina_numero = pager(output, servicio.getPage(0), pagina_numero)
        else:
            buffer2 = StringIO()
            servicio = canvas.Canvas(buffer2, pagesize=letter)
            w = 500
            h = 700
            servicio.drawImage(os.path.join(settings.MEDIA_ROOT, unicode(context['pst'].archivo_servicio)),
                               letter[0] / 2 - w / 2, letter[1] / 2 - h / 2, width=w, height=h, mask='auto')
            servicio.save()
            watermark = PdfFileReader(buffer2)
            page6 = input.getPage(6)
            page6.mergePage(watermark.getPage(0))
            output, pagina_numero = pager(output, page6, pagina_numero)
            buffer2.seek(0)
    except:
        output, pagina_numero = pager(output, input.getPage(6), pagina_numero)
    # paginas Foto tipo Carnet
    output, pagina_numero = pager(output, input.getPage(7), pagina_numero)
    buffer3 = StringIO()
    foto = canvas.Canvas(buffer3, pagesize=letter)
    w = 120
    h = 160
    foto.drawImage(os.path.join(settings.MEDIA_ROOT, unicode(context['pst'].archivo_pasaporte)),
                   letter[0] / 2 - w / 2, letter[1] / 2 - h / 2, width=w, height=h, mask='auto')
    foto.save()
    watermark = PdfFileReader(buffer3)
    page8 = input.getPage(8)
    page8.mergePage(watermark.getPage(0))
    output, pagina_numero = pager(output, page8, pagina_numero)

    return response, input, output, pagina_numero