def test_report():
    from reportlab.lib.pagesizes import letter
    from reportlab.pdfgen import canvas
    import time

    start_date = time.strftime('%d-%m-%Y %H:%M:%S')

    canvas = canvas.Canvas("form1.pdf", pagesize=letter)
    canvas.setLineWidth(1)
    canvas.setFont('Helvetica', 12)

    canvas.drawString(30, 750, 'DATE GENERATE')
    canvas.drawString(450, 750, start_date)
    canvas.line(440, 745, 570, 745)
    # canvas.line(420, 730, 600, 730)

    canvas.drawString(30, 730, 'REPORT TOPIC')
    canvas.drawString(450, 730, 'PROBES')
    canvas.line(440, 725, 570, 725)
    # canvas.line(480, 747, 580, 747)
    #
    # canvas.drawString(275, 725, 'AMOUNT OWED:')
    # canvas.drawString(500, 725, "$1,000.00")
    # canvas.line(378, 723, 580, 723)
    #
    # canvas.drawString(30, 703, 'RECEIVED BY:')
    # canvas.line(120, 700, 580, 700)
    # canvas.drawString(120, 703, "JOHN DOE")

    canvas.save()
Example #2
0
    def __init__(self, pt_ID, amount):
        self.amount = amount
        self.pt_ID = pt_ID
        from reportlab.lib.pagesizes import letter
        from reportlab.pdfgen import canvas

        lt = "%s/EMR_outputs/%s/Other/rcpt-%s.pdf" % (
            settings.LINUXPATH, self.pt_ID,
            EMR_utilities.dateToday('file format'))
        at = "%s/EMR_outputs/%s/Other/rcpt-%s.pdf" % (
            settings.APPLEPATH, self.pt_ID,
            EMR_utilities.dateToday('file format'))
        wt = "%s\EMR_outputs\%s\Other\rcpt-%s.pdf" % (
            settings.WINPATH, self.pt_ID,
            EMR_utilities.dateToday('file format'))
        filename = EMR_utilities.platformText(lt, at, wt)
        canvas = canvas.Canvas(filename, pagesize=letter)
        canvas.setLineWidth(.3)
        canvas.setFont('Helvetica', 12)

        canvas.drawString(
            30, 750, 'PAYMENT FOR MEDICAL SERVICES FOR %s' % self.name_find())
        canvas.drawString(30, 735, 'RENDERED AT BARRON FAMILY MEDICINE')
        canvas.drawString(500, 750, "%s" % EMR_utilities.dateToday())
        canvas.line(480, 747, 580, 747)

        canvas.drawString(275, 725, 'AMOUNT PAID:')
        canvas.drawString(500, 725, "$%s" % self.amount)
        canvas.line(378, 723, 580, 723)

        canvas.drawString(30, 703, 'RECEIVED BY:')
        canvas.line(120, 700, 580, 700)
        canvas.drawString(120, 703, settings.NAME)

        canvas.save()
Example #3
0
 def addPage(self, pageRes):
     streamBuffer, docObject = pageRes
     mainPage = PdfFileReader(streamBuffer)
     for i in range(0, mainPage.getNumPages()):
         try:
             if self.jumpFirst:
                 self.collector.addPage(mainPage.getPage(i))
                 self.jumpFirst = False
             else:
                 page = mainPage.getPage(i)
                 numberPagerBuffer, canvas, doc_orientation = self.getNextPageNumber(
                     page.mediaBox, docObject)
                 try:
                     _orientation, paper = paperFormat(page.mediaBox)
                     self.poolObj.get(
                         'ir.attachment').advancedPlmReportEngine(
                             document=docObject,
                             canvas=canvas,
                             page_orientation=doc_orientation,
                             paper=paper,
                             page_obj=page)
                 except Exception as ex:
                     logging.warning(ex)
                     logging.warning(
                         'advancedPlmReportEngine function not implemented in plm.document object'
                     )
                 canvas.showPage()
                 canvas.save()
                 numberPageReader = PdfFileReader(numberPagerBuffer)
                 mainPage.getPage(i).mergePage(numberPageReader.getPage(0))
                 self.collector.addPage(mainPage.getPage(i))
         except Exception as ex:
             logging.error(ex)
             logging.error('Something went wrong during pdf generation')
Example #4
0
    def __init__(self, pt_ID, amount):
	self.amount = amount
	self.pt_ID = pt_ID
	from reportlab.lib.pagesizes import letter
	from reportlab.pdfgen import canvas
	
	lt = "%s/EMR_outputs/%s/Other/rcpt-%s.pdf" % (settings.LINUXPATH, self.pt_ID, EMR_utilities.dateToday('file format'))
	at = "%s/EMR_outputs/%s/Other/rcpt-%s.pdf" % (settings.APPLEPATH, self.pt_ID, EMR_utilities.dateToday('file format'))
	wt = "%s\EMR_outputs\%s\Other\rcpt-%s.pdf" % (settings.WINPATH, self.pt_ID, EMR_utilities.dateToday('file format'))
	filename = EMR_utilities.platformText(lt, at, wt)
	canvas = canvas.Canvas(filename, pagesize=letter)
	canvas.setLineWidth(.3)
	canvas.setFont('Helvetica', 12)
 
	canvas.drawString(30,750,'PAYMENT FOR MEDICAL SERVICES FOR %s' % self.name_find())
	canvas.drawString(30,735,'RENDERED AT BARRON FAMILY MEDICINE')
	canvas.drawString(500,750,"%s" % EMR_utilities.dateToday())
	canvas.line(480,747,580,747)
 
	canvas.drawString(275,725,'AMOUNT PAID:')
	canvas.drawString(500,725,"$%s" % self.amount)
	canvas.line(378,723,580,723)
 
	canvas.drawString(30,703,'RECEIVED BY:')
	canvas.line(120,700,580,700)
	canvas.drawString(120,703, settings.NAME)
 
	canvas.save()
Example #5
0
def pdf():
    try:
        path = os.path.join(os.path.abspath(os.path.dirname(__file__)),
                            'form.pdf')
        os.remove(path)
    except FileNotFoundError:
        pass
    now = datetime.datetime.now()
    from reportlab.pdfgen import canvas
    canvas = canvas.Canvas("form.pdf", pagesize=letter)
    canvas.setLineWidth(.3)
    canvas.setFont('Helvetica', 12)
    canvas.drawString(450, 50, 'CREATED BY SOLARIS')
    canvas.drawString(
        500, 750, "{day}/{month}/{year}".format(day=now.day,
                                                month=now.month,
                                                year=now.year))
    canvas.line(480, 747, 580, 747)
    canvas.setFont('Helvetica', 18)
    canvas.drawString(225, 725, 'Performance metric')
    canvas.setFont('Helvetica', 12)
    canvas.drawString(50, 670, 'Information:')
    canvas.setFont('Helvetica', 11)
    canvas.drawString(70, 630, '- This data is based on Solaris algorithm')
    canvas.drawString(70, 600, '- Frequency - 1 FPS')
    canvas.drawInlineImage('dio.png', 80, 250, height=270, width=480)
    canvas.save()
    return None
Example #6
0
    def __init__(self, pt_ID, amount):
        self.amount = amount
        self.pt_ID = pt_ID
        from reportlab.lib.pagesizes import letter
        from reportlab.pdfgen import canvas

        canvas = canvas.Canvas("/home/mb/Desktop/GECKO/EMR_outputs/%s/Other/rcpt-%s.pdf" % \
             (self.pt_ID, EMR_utilities.dateToday()), pagesize=letter)
        canvas.setLineWidth(.3)
        canvas.setFont('Helvetica', 12)

        canvas.drawString(
            30, 750, 'PAYMENT FOR MEDICAL SERVICES FOR %s' % self.name_find())
        canvas.drawString(30, 735, 'RENDERED AT BARRON FAMILY MEDICINE')
        canvas.drawString(500, 750, "%s" % EMR_utilities.dateToday())
        canvas.line(480, 747, 580, 747)

        canvas.drawString(275, 725, 'AMOUNT PAID:')
        canvas.drawString(500, 725, "$%s" % self.amount)
        canvas.line(378, 723, 580, 723)

        canvas.drawString(30, 703, 'RECEIVED BY:')
        canvas.line(120, 700, 580, 700)
        canvas.drawString(120, 703, "MICHAEL BARRON MD")

        canvas.save()
Example #7
0
def cratepdf(companynamepdf, companyaddresspdf, amountpdf, staxpdf, emailpdf, timestamppdf, canvas2, datepdf, finalstaxpdf, productpdf):
    canvas = canvas2.Canvas("/home/raj/Documents/MyProjects/Python Invoice Generator with Database Connection and E-mail Support/INVOICE/Invoice (" + str(timestamppdf) + ").pdf", pagesize=letter)
    canvas.setLineWidth(.3)
    canvas.setFont('Helvetica', 12)
    canvas.line(50, 747, 580, 747) #FROM TOP 1ST LINE
    canvas.drawString(280, 750, "INVOICE")
    canvas.drawString(60, 720, "COMPANY NAME:- "+ companynamepdf)
    canvas.drawString(60, 690, "EMAIL-ID:- "+ emailpdf)
    canvas.drawString(60, 660, "ADDRESS:- "+ companyaddresspdf)
    canvas.drawString(450, 720, "DATE :- "+ str(datepdf))
    canvas.line(450, 710, 560, 710)
    canvas.line(50, 640, 580, 640)#FROM TOP 2ST LINE
    canvas.line(50, 748, 50, 50)#LEFT LINE
    canvas.line(400, 640, 400, 50)# MIDDLE LINE
    canvas.line(580, 748, 580, 50)# RIGHT LINE
    canvas.drawString(475, 615, 'TOTAL AMOUNT')
    canvas.drawString(100, 615, 'PRODUCT')
    canvas.line(50, 600, 580, 600)#FROM TOP 3rd LINE
    canvas.drawString(60, 550, productpdf)
    canvas.drawString(500, 550, amountpdf)
    TOTAL = int(amountpdf) * ((int(staxpdf)) / 100)
    canvas.drawString(60, 500, "SERVICE TAX (" +staxpdf+"%)")
    canvas.drawString(500, 500, str(TOTAL))
    canvas.line(50, 100, 580, 100)#FROM TOP 4th LINE
    canvas.drawString(60, 80, " TOTAL AMOUNT")
    canvas.drawString(500, 80, str(finalstaxpdf))
    canvas.line(50, 50, 580, 50)#FROM TOP LAST LINE
    canvas.save()
Example #8
0
def downloadPdf():
    output = BytesIO()
    canvas = canvas.Canvas(output, pagesize=letter)
    width, height = letter
    # print(width)
    # print(height)
    canvas.setLineWidth(.3)
    canvas.setFont('Helvetica', 20)
    canvas.drawString(width / 2 - 60, 750, 'MEDICAL REPORT')

    canvas.drawImage(path + "static/" + str(X[0]), 50, 500, 3 * inch, 3 * inch)
    canvas.drawImage(path + "static/" + str(X[2]), width - 50 - (3 * inch),
                     500, 3 * inch, 3 * inch)
    canvas.drawImage(path + "static/" + str(X[1]), 50, 500 - 3 * inch - 50,
                     3 * inch, 3 * inch)
    canvas.drawImage(path + "static/" + str(X[3]), width - 50 - (3 * inch),
                     500 - 3 * inch - 50, 3 * inch, 3 * inch)
    canvas.drawString(100, 500 - 3 * inch - 150,
                      "LEFT EYE STAGE: " + str(val[0]))
    canvas.drawString(width - (2 * inch) - 100, 500 - 3 * inch - 150,
                      "RIGHT EYE STAGE: " + str(val[1]))

    canvas.save()
    pdf_out = output.getvalue()
    output.close()

    response = make_response(pdf_out)
    response.headers[
        'Content-Disposition'] = "attachment; filename='REPORT1.pdf"
    response.mimetype = 'application/pdf'
    return response
Example #9
0
    def __init__(self, pt_ID, amount):
	self.amount = amount
	self.pt_ID = pt_ID
	from reportlab.lib.pagesizes import letter
	from reportlab.pdfgen import canvas
	
	canvas = canvas.Canvas("/home/mb/Desktop/GECKO/EMR_outputs/%s/Other/rcpt-%s.pdf" % \
						(self.pt_ID, EMR_utilities.dateToday()), pagesize=letter)
	canvas.setLineWidth(.3)
	canvas.setFont('Helvetica', 12)
 
	canvas.drawString(30,750,'PAYMENT FOR MEDICAL SERVICES FOR %s' % self.name_find())
	canvas.drawString(30,735,'RENDERED AT BARRON FAMILY MEDICINE')
	canvas.drawString(500,750,"%s" % EMR_utilities.dateToday())
	canvas.line(480,747,580,747)
 
	canvas.drawString(275,725,'AMOUNT PAID:')
	canvas.drawString(500,725,"$%s" % self.amount)
	canvas.line(378,723,580,723)
 
	canvas.drawString(30,703,'RECEIVED BY:')
	canvas.line(120,700,580,700)
	canvas.drawString(120,703,"MICHAEL BARRON MD")
 
	canvas.save()
Example #10
0
def pdf(name, adult, children, total, time):
    from reportlab.pdfgen import canvas
    canvas = canvas.Canvas("static/website/pdf/print.pdf", pagesize=(300, 500))
    canvas.setLineWidth(.3)
    canvas.setFont('Helvetica', 19)
    canvas.drawInlineImage("static/website/images/butterfly.jpeg",
                           82,
                           443,
                           width=46,
                           height=46)
    canvas.drawString(138, 470, 'Butterfly')
    canvas.drawString(138, 447, 'Garden')
    canvas.line(10, 431, 290, 431)
    canvas.drawInlineImage("qrcodes/qrcode.png",
                           72,
                           271,
                           width=155,
                           height=155)
    canvas.line(10, 264, 290, 264)
    canvas.setFont('Helvetica', 16)
    canvas.drawString(20, 240, 'Total : ' + str(total))
    canvas.setFont('Helvetica', 12)
    canvas.drawString(20, 220, 'Name : ' + str(name))
    canvas.drawString(20, 200, 'Adult : ' + str(adult))
    canvas.drawString(170, 200, 'Children : ' + str(children))
    canvas.drawString(20, 185, 'Time : ' + str(time))
    canvas.line(10, 169, 290, 169)
    canvas.line(10, 170, 290, 170)
    canvas.drawInlineImage("qrcodes/qrcode.png", 72, 10, width=155, height=155)
    canvas.save()
Example #11
0
def print_cards():
    #LETTER = (8.5, 11)
    LETTER = (11, 8.5)
    DPI = 72
    # Set print margins
    MARGIN = 0.5
    x_offset = int(MARGIN * DPI)
    y_offset = int(MARGIN * DPI)
    CARDSIZE = (int(2.49 * DPI), int(3.48 * DPI))
    #scale = CARDSIZE[0] / 375.0  # Default cardsize in px
    cards = convert_to_cards(session['cardtext'])
    byte_io = BytesIO()
    from reportlab.pdfgen import canvas
    canvas = canvas.Canvas(byte_io, pagesize=landscape(letter))
    WIDTH, HEIGHT = landscape(letter)
    #draw = ImageDraw.Draw(sheet)
    for card in cards:
        image = create_card_img(card,session["do_google"])
        image_reader = ImageReader(image)
        canvas.drawImage(image_reader,
                         x_offset,
                         y_offset,
                         width=CARDSIZE[0],
                         height=CARDSIZE[1])
        x_offset += CARDSIZE[0] + 5  # 5 px border around cards
        if x_offset + CARDSIZE[0] > LETTER[0] * DPI:
            x_offset = int(MARGIN * DPI)
            y_offset += CARDSIZE[1] + 5
        if y_offset + CARDSIZE[1] > LETTER[1] * DPI:
            x_offset = int(MARGIN * DPI)
            y_offset = int(MARGIN * DPI)
            canvas.showPage()
    canvas.save()
    byte_io.seek(0)
    return send_file(byte_io, mimetype='application/pdf')
def pdf(name, adult, children, total, date_time, counter):
    from reportlab.pdfgen import canvas
    canvas = canvas.Canvas("static/website/pdf/print.pdf", pagesize=(300, 360))
    canvas.setLineWidth(.3)
    canvas.setFont('Helvetica', 19)
    canvas.drawInlineImage("static/website/images/butterfly.jpeg",
                           82,
                           303,
                           width=46,
                           height=46)
    canvas.drawString(138, 340, 'The')
    canvas.drawString(138, 322, 'Butterfly')
    canvas.drawString(138, 300, 'Corner')
    canvas.setFont('Helvetica', 14)
    canvas.drawString(220, 300, 'Sr. No : ' + str(counter))
    canvas.line(10, 291, 290, 291)
    canvas.drawInlineImage("qrcodes/qrcode.png",
                           72,
                           131,
                           width=155,
                           height=155)
    canvas.line(10, 124, 290, 124)
    canvas.setFont('Helvetica', 16)
    canvas.drawString(20, 100, 'Total : ' + total + ' THB')

    canvas.setFont('Helvetica', 14)
    canvas.drawString(20, 80, 'Date & Time : ' + date_time)
    canvas.drawString(20, 60, 'Name : ' + name)
    canvas.drawString(20, 40, 'Adult : ' + adult)
    canvas.drawString(170, 40, 'Children : ' + children)
    canvas.save()
Example #13
0
def index():
    import StringIO
    # fairy = FairyImage.getrandomfairy()
    # imgstring = fairy['image']
    # filelike = StringIO.StringIO(imgstring)
    # canvas = Image.open(filelike)
    # canvas = FairyImage.addFairyNametoImage(canvas, fairy)
    # output=StringIO.StringIO()
    # canvas.save(output, format="JPEG")
    # contents= output.getvalue().encode('base64')
    # output.close()
    #
    # return render_template("index.html",contents=urllib.quote(contents.rstrip('\n')))
    x = random.randint(1, 3)
    if (x == 1):
        princesses = Image.open("static/Princess_Tabitha.png")
        name = ("Tabitha")
    elif (x == 2):
        princesses = Image.open("static/Princess_Esme.png")
        name = ("Esme")
    else:
        princesses = Image.open("static/Princess_Violet.png")
        name = ("Violet")
    canvas = princesses
    output = StringIO.StringIO()
    canvas.save(output, format="JPEG")
    contents = output.getvalue().encode('base64')
    return render_template("index.html", contents=urllib.quote(contents.rstrip('\n')), Princess_name=name)
Example #14
0
    def get(self, request):
        tables = Table.objects.filter(user=request.user)
        context = {
            'tables': tables,
        }
        from reportlab.lib.pagesizes import letter
        from reportlab.pdfgen import canvas
        from datetime import date
        import random

        today = date.today().strftime("%d/%m/%Y")

        canvas = canvas.Canvas("/tmp/form.pdf", pagesize=letter)
        canvas.setLineWidth(.3)
        canvas.setFont('Helvetica', 12)

        canvas.drawString(30, 750, 'REGALOS S.A de CV')
        canvas.drawString(30, 735, 'FACTURA #%s' % random.randint(1, 1000))
        canvas.drawString(500, 750, today)
        canvas.line(480, 747, 580, 747)

        canvas.drawString(30, 703, 'RFC de REGALOS S.A de CV:')
        canvas.drawString(230, 703, "SAVR090503795")

        canvas.drawString(30, 683, 'Direccion de REGALOS S.A de CV:')
        canvas.drawString(
            230, 683,
            "AV JUAREZ NO. 907, PERIODISTAS, 42000, Pachuca, HIDALGO")

        canvas.drawString(30, 643, 'Nombre:')
        canvas.drawString(230, 643, "Mauricio Mejia")

        canvas.drawString(30, 623, 'RFC:')
        canvas.drawString(230, 623, "MERM971214HDFJMKR07")

        canvas.drawString(30, 603, 'Direcciom:')
        canvas.drawString(230, 603, "Calle 28 133 Progreso Nacional")

        canvas.drawString(30, 583, 'Importe:')
        canvas.drawString(230, 583, "20")

        canvas.drawString(30, 563, 'IVA:')
        canvas.drawString(230, 563, "20")

        canvas.drawString(30, 543, 'TOTAL:')
        canvas.drawString(230, 543, "20")

        canvas.save()

        email = EmailMessage()
        email.subject = "New shirt submitted"
        email.body = "Tu factura esta lista"
        email.from_email = "*****@*****.**"
        email.to = [
            "*****@*****.**",
        ]
        email.attach_file("/tmp/form.pdf")  # Attach a file directly
        email.send()

        return TemplateResponse(request, 'users/profile.html', context)
Example #15
0
def main():
    # PDF document layout
    canvas = canvas.Canvas(
        "H:\College Fourth Year\Development Project\Final Year Project 2018\Forensic Reports\SMS Report.pdf",
        pagesize=letter)

    canvas.setLineWidth(.3)
    canvas.setFont('Helvetica', 12)
    canvas.drawString(30, 750, 'LYIT MOBILE FORENSICS DIVISION')
    canvas.drawString(
        500, 750, "Date: " +
        now.strftime("%d-%m-%y"))  # Prints date of the report(on the fly)
    canvas.line(500, 747, 595, 747)
    canvas.drawString(500, 725, 'Case Number:')
    canvas.drawString(580, 725, "10")
    canvas.line(500, 723, 595, 723)

    # Introduction text
    line1 = 'This forensic report on sms data has been compiled by the forensic'
    line2 = 'examiner in conclusion to the investigation into the RTA'
    line3 = 'case which occurred on the 23/01/2018.'
    textObject = canvas.beginText(30, 700)
    lines = [line1, line2, line3]
    for line in lines:
        textObject.textLine(line)
    canvas.drawText(textObject)

    canvas.save()
Example #16
0
def create_report():
    from reportlab.lib.pagesizes import letter
    from reportlab.pdfgen import canvas

    width, height = letter

    canvas = canvas.Canvas("form.pdf", pagesize=letter)

    canvas.setLineWidth(.3)
    canvas.setFont('Helvetica', 10)

    canvas.drawString(30, 750, 'OFFICIAL COMMUNIQUE')
    canvas.drawString(30, 735, 'OF ACME INDUSTRIES')
    canvas.drawString(500, 750, "12/12/2010")
    canvas.line(480, 747, 580, 747)

    canvas.drawString(275, 725, 'AMOUNT OWED:')
    canvas.drawString(500, 725, "$1,000.00")
    canvas.line(378, 723, 580, 723)

    canvas.drawString(30, 703, 'RECEIVED BY:')
    canvas.line(110, 700, 580, 700)
    canvas.drawString(110, 703, "JOHN DOE")

    canvas.save()
Example #17
0
def createPDF(canvas, files):

    logo = "UQRlogo.png"
    
    partNo = str(entry['Part Number'])
    creator = entry['Creators Name']

    while len(partNo) < 4:
        partNo = '0'+partNo
    
    canvas = canvas.Canvas("PartNo"+ partNo +".pdf", pagesize=letter)
    canvas.setLineWidth(.3)
    canvas.setFont('Helvetica', 12)
     
    canvas.drawString(30,750,'OFFICIAL PART')
    canvas.drawString(30,735,'OF UQ RACING')
    canvas.drawString(500,750, str(datetime.date.today()))
    canvas.line(480,747,580,747)
     
    canvas.drawString(275,725,'PART OF CAR:')
    canvas.drawString(500,725, 'EV42 2017' )
    canvas.line(378,723,580,723)
     
    canvas.drawString(30,703,'PART CREATED BY:')
    canvas.line(150,700,580,700)
    canvas.drawString(160,703, creator.upper() )

    canvas.drawImage(logo, 512, -15)
     
    canvas.save()
Example #18
0
def archive_watermark_page(archive_date):
    """Return PDF object with archiving watermark.

    Args:
        archive_date (datetime.datetime): Date of archiving.

    Returns:
        PyPDF2.pdf.PageObject: Page with just the archive watermark.
    """
    size = {"width": 20 * pagesizes.inch, "height": 18 * pagesizes.inch}
    font = {
        "name": "Helvetica",
        "size": 256,
        "color": colors.red.clone(alpha=0.20),
        "start_x": size["width"] * 0.50,
        "start_y": size["height"] * 0.45,
    }
    text_lines = ["ARCHIVED", archive_date.strftime("%Y-%m-%d")]
    packet = io.BytesIO()
    canvas = reportlab.pdfgen.canvas.Canvas(
        filename=packet, pagesize=(size["width"], size["height"]), bottomup=0
    )
    canvas.setFillColor(font["color"])
    canvas.setFont(psfontname=font["name"], size=font["size"])
    for i, line in enumerate(text_lines):
        canvas.drawCentredString(
            x=font["start_x"], y=(font["start_y"] + canvas._leading * i), text=line
        )
    canvas.save()
    packet.seek(0)
    watermark_page = PyPDF2.PdfFileReader(packet).getPage(0)
    return watermark_page
Example #19
0
    def produce_pdf(self, input_file=None, out_directory=None):

        out = os.path.join(out_directory, self.out_file_name)
        self.data = self._parse_input_file(input_file)
        canvas = reportlab.pdfgen.canvas.Canvas(out, pagesize=pagesizes.A4)
        map(lambda p: self._process_page(canvas, p), self.pages)
        canvas.showPage()
        canvas.save()
def process_stories(filepath):
    with open(filepath, 'r') as infile:
        reader = csv.DictReader(infile)
        canvas = None
        for row in reader:
            canvas = generate_pdf(row, canvas)
        canvas.save()
    print "Stories saved to %s" % OUT_FILENAME
 def generate_barcodes(self):
     for r in range(self.rows):
         for c in range(self.cols):
             if self.entries[r][c].get() not in self.empty:
                 self.generate_code39(canvas, label_pos[r][c],
                                      self.entries[r][c].get())
     canvas.save()
     self.open_pdf()
     self.client_exit()
Example #22
0
 def convert_pdf(image_name, width, height):
 
     from reportlab.pdfgen import canvas
     from reportlab.lib.units import inch
     
     canvas = canvas.Canvas('output.pdf')
     canvas.setPageSize((width*inch, height*inch))
     canvas.drawImage(image_name, 0.1*inch, 0.1*inch, (width-0.1)*inch, (height-0.1)*inch)
     canvas.showPage()
     canvas.save()
Example #23
0
def createPDF(file, title):
    canvas = reportlab.pdfgen.canvas.Canvas(file)
    canvas.setFont('Times-BoldItalic', 12)
    canvas.drawString(inch, 10.5 * inch, title)

    canvas.setFont('Times-Roman', 10)
    canvas.drawCentredString(4.135 * inch, 0.75 * inch,
                             'Page %d' % canvas.getPageNumber())
    canvas.showPage()
    canvas.save()
Example #24
0
 def create_backpdf(image_name):
 
     from reportlab.pdfgen import canvas
     from reportlab.lib.units import inch
     
     canvas = canvas.Canvas('PC_back.pdf')
     canvas.setPageSize((6*inch, 4*inch))
     canvas.drawImage(image_name, 0.1*inch, 0.1*inch, 5.9*inch, 3.9*inch)
     canvas.showPage()
     canvas.save()
Example #25
0
 def create_mug_pdf(image_name):
 
     from reportlab.pdfgen import canvas
     from reportlab.lib.units import inch
     
     canvas = canvas.Canvas('mug.pdf')
     canvas.setPageSize((8.58*inch, 3.7*inch))
     canvas.drawImage(image_name, 0.1*inch, 0.1*inch, 5.9*inch, 3.9*inch)
     canvas.showPage()
     canvas.save()
Example #26
0
def build_filled_pdf_page(page_data: PageData, values: Dict[str, Any]) -> PageObject:
    packet = io.BytesIO()
    canvas = reportlab.pdfgen.canvas.Canvas(
        packet, reportlab.lib.pagesizes.letter, initialFontName="Times-Roman", initialFontSize=14
    )
    for position, emplacement_data in page_data.items():
        canvas.drawString(*position, str(values.get(emplacement_data.name, ""))[: emplacement_data.line_size])
    canvas.showPage()
    canvas.save()
    packet.seek(0)
    return PyPDF2.PdfFileReader(packet).getPage(0)
Example #27
0
def _finish_rendering(canvas):
    canvas.showPage()
    canvas.save()
    print_ = getattr(args, 'print')
    if sys.platform.startswith('linux'):
        if print_:
            os.system('lp "%s"' % default_output_file)
        else:
            os.system('xdg-open "%s"' % default_output_file)
    else:
        os.startfile(default_output_file, 'print' if print_ else 'open')
Example #28
0
def get_stamp_pdf(PROJ_NAME, PAGE_NO):
    from reportlab.pdfgen import canvas
    out_path = tempfile.mktemp(suffix=".pdf")
    canvas = canvas.Canvas(out_path, pagesize=A4)
    canvas.setLineWidth(.3)
    canvas.setFont('Segoe UI', 8)
    canvas.setStrokeColorRGB(0, 0, 0)
    canvas.setFillColorRGB(0, 0, 0)
    canvas.drawString(30, 10, "Feedback Report for {0}".format(PROJ_NAME))
    canvas.drawString(540, 10, "Page {0}".format(PAGE_NO))
    canvas.save()
    return out_path
Example #29
0
def montagea12():
    import StringIO
    size = 800, 550
    canvas = FairyImage.getrandomfairysheet(12)
    canvas.thumbnail(size, Image.ANTIALIAS)
    output = StringIO.StringIO()
    canvas.save(output, format="JPEG")
    contents = output.getvalue().encode('base64')
    output.close()
    isadmin = current_user.has_role('superuser')
    loggedin = current_user.is_authenticated
    return render_template('montage12.html', contents=urllib.quote(contents.rstrip('\n')), admin=isadmin, auth=loggedin)
Example #30
0
    def generate(self):
        canvas = self.canvas
        canvas.setLineWidth(0.3)
        canvas.setFont("Helvetica", 12)
        self.__add_header()

        for i in range(len(self.questions)):
            question = self.questions[i]
            answers = self.answers[i]
            self.__add_block(question, answers, i)

        canvas.save()
Example #31
0
def login():
    import StringIO
    fairy = FairyImage.getrandomfairy()
    imgstring = fairy['image']
    filelike = StringIO.StringIO(imgstring)
    canvas = Image.open(filelike)
    canvas = FairyImage.addFairyNametoImage(canvas, fairy)
    output = StringIO.StringIO()
    canvas.save(output, format="JPEG")
    contents = output.getvalue().encode('base64')
    output.close()

    return render_template("index.html", contents=urllib.quote(contents.rstrip('\n')))
Example #32
0
def generate_lists(lists, title="Coffee list"):
    """
        Given multiple list descriptions as an iterable of list_id and names,
        generate one PDF that contains them all.

        See generate_list.
    """
    outfile = StringIO.StringIO()
    canvas = reportlab.pdfgen.canvas.Canvas(outfile, pagesize=COFFEE_SHEET_PAGE_FORMAT)
    for a_list in lists:
        generate_list(*a_list, title=title, canvas=canvas)
    canvas.save()
    return outfile
Example #33
0
def generate_pdf(request):
    from django.http import HttpResponse
    from reportlab.pdfgen import canvas

    response = HttpResponse(content_type="application/pdf")
    response[
        'Content-Disposition'] = 'attachment; filename = "somefilename.pdf"'

    canvas = canvas.Canvas(response)
    canvas.drawString(300, 800, "Hello World!")
    canvas.showPage()
    canvas.save()

    return response
Example #34
0
def print_image(canvas, image, name):
    w, h = A4
    canvas.drawImage(
        pil_to_rl(image, name),
        0,
        0,
        height=w * 0.95,
        width=w * 0.95,
        preserveAspectRatio=True,
        anchor='sw'
    )
    canvas.drawCentredString(w / 2, 600, name)
    canvas.showPage()
    canvas.save()
Example #35
0
def print_receipt(tot_price, trans_id, cashier_id, amount_paid, amount_rem):
	#global last_trans, canvas, base, values, currentprinter, canvas
	print str(tot_price)+' '+str(trans_id)+' '+str(cashier_id)+str(last_trans)
	#raw_input("Press Enter to continue...")
	canvas = canvas.Canvas("receipt.pdf", pagesize=letter)
	canvas.setLineWidth(.3)
	canvas.setFont('Helvetica', 12)

	canvas.drawString(30,750,'CASHIER ID: '+str(cashier_id))
	canvas.drawString(30,735,'TRANSACTION ID: '+str(trans_id))

	canvas.drawString(500,750,time.strftime("%d/%m/%Y"))
	canvas.line(480,747,580,747)
	 
	canvas.drawString(275,725,'TOTAL PRICE:')
	canvas.drawString(500,725,"$"+str(tot_price))
	canvas.line(378,723,580,723)
	 
	canvas.drawString(30,703,'PRODUCTS:')
	canvas.drawString(120,703,'<Barcode>')
	canvas.drawString(190,703,'<Quantity>')
	canvas.drawString(260,703,'<Price>')

	#items = ['10005058 2 24.00', '10005058 2 24.00']
	base = 683
	print last_trans
	for check in last_trans:
		values = check.split()
		print values
		#raw_input('print check')
		left= 120
		for value in values:
			canvas.drawString(left,base,str(value))
			left+=70
		base=base-30

	canvas.line(120,base,580,base)
	base-=30
	canvas.drawString(120,base,'AMOUNT PAID: $ %.2f'%amount_paid)
	canvas.line(120,base-10,580,base-10)
	base-=30
	canvas.drawString(120,base,'CHANGE: $ %.2f'%amount_rem)
	base-=30
	canvas.line(120,base-10,580,base-10)
	canvas.save()
	currentprinter = win32print.GetDefaultPrinter()
	if len(currentprinter):
		win32print.SetDefaultPrinter(currentprinter)
		win32api.ShellExecute(0, "print", 'receipt.pdf', None,  ".",  0)	
	threading.Timer(15, lambda: os.remove('receipt.pdf') ).start()
Example #36
0
def home():
    import StringIO

    fairy = FairyImage.getrandomfairy()
    imgstring = fairy['image']
    filelike = StringIO.StringIO(imgstring)
    canvas = Image.open(filelike)
    canvas = FairyImage.addFairyNametoImage(canvas, fairy)
    output = StringIO.StringIO()
    canvas.save(output, format="JPEG")
    contents = output.getvalue().encode('base64')
    output.close()
    isadmin = current_user.has_role('superuser')
    loggedin = current_user.is_authenticated
    return render_template("main.html", contents=urllib.quote(contents.rstrip('\n')), admin=isadmin, auth=loggedin)
Example #37
0
    def get2(self, request, *args, **kwargs):
        buffer = io.BytesIO()
        canvas = Canvas(buffer)

        # 내용을 채운다
        canvas.drawString(40, 40, "canvas.drawString")
        canvas.drawAlignedString(40, 80, "canvas.drawAlignedString")
        canvas.drawCentredString(40, 120, "canvas.drawCentredString")

        canvas.showPage()
        canvas.save()

        file_name = "hello.pdf"
        buffer.seek(0)
        return FileResponse(buffer, as_attachment=True, filename=file_name)
def main():

    output_path = "../../data/characters/templates_printout.pdf"

    canvas = reportlab.pdfgen.canvas.Canvas(
        output_path, bottomup=1, pagesize=reportlab.lib.pagesizes.A4)

    canvas_size = reportlab.lib.pagesizes.A4
    width, height = canvas_size

    # Size of image and margin between images on a pdf page
    image_size = int(width * 0.2)
    margin = int(width * 0.06)

    paths = glob.glob("../../data/characters/templates/*.jpg")

    templates = [
        cv2.cvtColor(cv2.imread(path), cv2.COLOR_BGR2GRAY) for path in paths
    ]
    temporary_dir = "/tmp/templates/"

    # Make directory for temporary images if it doesn't already exist
    os.makedirs(temporary_dir, exist_ok=True)

    # Write bordered images to temporary dir
    for path, template in zip(paths, templates):
        temporary_path = temporary_dir + os.path.basename(path)
        cv2.imwrite(temporary_path, template)

    paths_iterator = iter(glob.glob(temporary_dir + "/*.jpg"))

    # Create pages until we run out of template paths
    while True:

        try:

            create_page(canvas, canvas_size, paths_iterator, image_size,
                        margin)
            canvas.showPage()

        except StopIteration:

            break

    canvas.save()

    # Clean up temporary images
    shutil.rmtree(temporary_dir)
Example #39
0
def addbfairy():
    import StringIO
    newfairy = FairyImage.createfairy('m')
    canvas = FairyImage.getfairypicfromdb(newfairy['name'])
    canvas = FairyImage.addFairyNametoImage(canvas, newfairy)
    output = StringIO.StringIO()
    canvas.save(output, format="JPEG")
    contents = output.getvalue().encode('base64')
    output.close()
    loggedin = current_user.is_authenticated
    gfairies = FairyImage.numberoffairies('f')
    bfairies = FairyImage.numberoffairies('m')
    tfairies = bfairies + gfairies
    fairyref = FairyImage.getfairyreferences('FAIRY_TBL')

    return render_template("dblist2.html", gfairies=str(gfairies), bfairies=str(bfairies), tfairies=str(tfairies),
                           fairyref=str(fairyref), contents=urllib.quote(contents.rstrip('\n')), auth=loggedin)
def main():

    output_path = "../../data/characters/templates_printout.pdf"

    canvas = reportlab.pdfgen.canvas.Canvas(
        output_path, bottomup=1, pagesize=reportlab.lib.pagesizes.A4)

    canvas_size = reportlab.lib.pagesizes.A4
    width, height = canvas_size

    # Size of image and margin between images on a pdf page
    image_size = int(width * 0.2)
    margin = int(width * 0.06)

    paths = glob.glob("../../data/characters/templates/*.jpg")

    templates = [cv2.cvtColor(cv2.imread(path), cv2.COLOR_BGR2GRAY) for path in paths]
    temporary_dir = "/tmp/templates/"

    # Make directory for temporary images if it doesn't already exist
    os.makedirs(temporary_dir, exist_ok=True)

    # Write bordered images to temporary dir
    for path, template in zip(paths, templates):
        temporary_path = temporary_dir + os.path.basename(path)
        cv2.imwrite(temporary_path, template)

    paths_iterator = iter(glob.glob(temporary_dir + "/*.jpg"))

    # Create pages until we run out of template paths
    while True:

        try:

            create_page(canvas, canvas_size, paths_iterator, image_size, margin)
            canvas.showPage()

        except StopIteration:

            break

    canvas.save()

    # Clean up temporary images
    shutil.rmtree(temporary_dir)
Example #41
0
    def test5(self):
        "List and display all named colors and their gray equivalents."

        canvas = reportlab.pdfgen.canvas.Canvas(
            outputfile('test_lib_colors.pdf'))

        #do all named colors
        framePage(canvas, 'Color Demo - page %d' % canvas.getPageNumber())

        all_colors = list(reportlab.lib.colors.getAllNamedColors().items())
        all_colors.sort()  # alpha order by name
        canvas.setFont('Times-Roman', 10)
        text = 'This shows all the named colors in the HTML standard (plus their gray and CMYK equivalents).'
        canvas.drawString(72, 740, text)

        canvas.drawString(200, 725, 'Pure RGB')
        canvas.drawString(300, 725, 'B&W Approx')
        canvas.drawString(400, 725, 'CMYK Approx')

        y = 700
        for (name, color) in all_colors:
            canvas.setFillColor(colors.black)
            canvas.drawString(100, y, name)
            canvas.setFillColor(color)
            canvas.rect(200, y - 10, 80, 30, fill=1)
            canvas.setFillColor(colors.color2bw(color))
            canvas.rect(300, y - 10, 80, 30, fill=1)

            c, m, yel, k = colors.rgb2cmyk(color.red, color.green, color.blue)
            CMYK = colors.CMYKColor(c, m, yel, k)
            canvas.setFillColor(CMYK)
            canvas.rect(400, y - 10, 80, 30, fill=1)

            y = y - 40
            if y < 100:
                canvas.showPage()
                framePage(canvas,
                          'Color Demo - page %d' % canvas.getPageNumber())
                canvas.setFont('Times-Roman', 10)
                y = 700
                canvas.drawString(200, 725, 'Pure RGB')
                canvas.drawString(300, 725, 'B&W Approx')
                canvas.drawString(400, 725, 'CMYK Approx')

        canvas.save()
def dict_to_pdf_proc(file_pdf,dict_aa):
	from reportlab.pdfgen import canvas
	fontname_g = "HeiseiKakuGo-W5"
	pdfmetrics.registerFont (UnicodeCIDFont(fontname_g))
	canvas = canvas.Canvas(file_pdf)

	canvas.setFont(fontname_g, 20)

	ypos = 700
	for key in sorted(dict_aa.keys()):
		unit = dict_aa[key]
		canvas.drawString(50,ypos,key)
		canvas.drawString(185,ypos,unit['name'])
		canvas.drawString(285,ypos,str (unit['population']))
		canvas.drawString(400,ypos,unit['date_mod'])
		ypos = ypos - 25
#
	canvas.save()
Example #43
0
    def test5(self):
        "List and display all named colors and their gray equivalents."

        canvas = reportlab.pdfgen.canvas.Canvas(outputfile('test_lib_colors.pdf'))

        #do all named colors
        framePage(canvas, 'Color Demo - page %d' % canvas.getPageNumber())

        all_colors = reportlab.lib.colors.getAllNamedColors().items()
        all_colors.sort() # alpha order by name
        canvas.setFont('Times-Roman', 10)
        text = 'This shows all the named colors in the HTML standard (plus their gray and CMYK equivalents).'
        canvas.drawString(72,740, text)

        canvas.drawString(200,725,'Pure RGB')
        canvas.drawString(300,725,'B&W Approx')
        canvas.drawString(400,725,'CMYK Approx')

        y = 700
        for (name, color) in all_colors:
            canvas.setFillColor(colors.black)
            canvas.drawString(100, y, name)
            canvas.setFillColor(color)
            canvas.rect(200, y-10, 80, 30, fill=1)
            canvas.setFillColor(colors.color2bw(color))
            canvas.rect(300, y-10, 80, 30, fill=1)

            c, m, yel, k = colors.rgb2cmyk(color.red, color.green, color.blue)
            CMYK = colors.CMYKColor(c,m,yel,k)
            canvas.setFillColor(CMYK)
            canvas.rect(400, y-10, 80, 30, fill=1)

            y = y - 40
            if y < 100:
                canvas.showPage()
                framePage(canvas, 'Color Demo - page %d' % canvas.getPageNumber())
                canvas.setFont('Times-Roman', 10)
                y = 700
                canvas.drawString(200,725,'Pure RGB')
                canvas.drawString(300,725,'B&W Approx')
                canvas.drawString(400,725,'CMYK Approx')

        canvas.save()
Example #44
0
def contig_draw(cName, in_file, out_file, annot_mode, key, fct_flags,
                fct_colors):
    """Draw sequence map of a single contig to file."""
    # load contig record
    seq_record = load_genbank(in_file)
    ctg_len = len(seq_record.seq)
    feats = seq_record.features
    cds = [
        feature for feature in feats
        if feature.type == 'CDS' or feature.type == 'cds'
    ]
    if annot_mode == 'all':
        annot_cds = [len(cds)]
    else:
        try:
            annot_cds = [
                1 for feature in cds
                if feature.qualifiers.get(key)[0] != 'no match'
            ]
        except TypeError:
            annot_cds = []
    annot_cnt = sum(annot_cds)
    # calculate main canvas dimensions
    if ctg_len * u < 2000:
        seq_len = 2000
    else:
        seq_len = ctg_len * u
    hCan = hmar * 2 + pNsize + seq_len
    vCan = dBL + vmar * 4 + (annot_cnt / 2) * ck_vsp
    transX = hmar + pNsize
    transY = dBL + vmar * 2 + (annot_cnt / 2) * ck_vsp
    ctg_Y = vmar
    # set up main canvas
    canvas = canvasser(hCan, vCan, transX, transY, out_file)
    # draw contig baseline and features
    base_draw(canvas, cName, ctg_len, feats, key, -doLdn, ctg_Y, 0, 'single',
              annot_cnt, None, None, seq_len, annot_mode, fct_flags,
              fct_colors)
    # draw scale
    seq_scale(canvas, (ctg_len * u) - pNsize, incrT, incrN, dip, dop)
    # write to file and finalize the figure
    canvas.showPage()
    canvas.save()
Example #45
0
def contig_draw(cName, in_file, out_file, annot_mode, key, fct_flags,
                fct_colors):
    """Draw sequence map of a single contig to file."""
    # load contig record
    seq_record = load_genbank(in_file)
    ctg_len = len(seq_record.seq)
    feats = seq_record.features
    cds = [feature for feature in feats
           if feature.type == 'CDS' or feature.type == 'cds']
    if annot_mode == 'all':
        annot_cds = [len(cds)]
    else:
        try:
            annot_cds = [1 for feature in cds
                         if feature.qualifiers.get(key)[0] != 'no match']
        except TypeError:
            annot_cds = []
    annot_cnt = sum(annot_cds)
    # calculate main canvas dimensions
    if ctg_len*u < 2000:
        seq_len = 2000
    else:
        seq_len = ctg_len*u
    hCan = hmar*2 + pNsize + seq_len
    vCan = dBL + vmar*4 + (annot_cnt/2)*ck_vsp
    transX = hmar + pNsize
    transY = dBL + vmar*2 + (annot_cnt/2)*ck_vsp
    ctg_Y = vmar
    # set up main canvas
    canvas = canvasser(hCan, vCan, transX, transY, out_file)
    # draw contig baseline and features
    base_draw(canvas, cName, ctg_len, feats, key, -doLdn, ctg_Y, 0, 'single',
             annot_cnt, None, None, seq_len, annot_mode, fct_flags,
             fct_colors)
    # draw scale
    seq_scale(canvas, (ctg_len*u)-pNsize, incrT, incrN, dip, dop)
    # write to file and finalize the figure
    canvas.showPage()
    canvas.save()
Example #46
0
def pdf(http_request, id):
    id = int(id)
    priority = get_object_or_404(UserPriority, id=id)
    if (http_request.user != priority.user
        and not http_request.user.is_superuser):
        return error_page(http_request, _("Access Denied"),
            _("This invoice is for a different user."))
    response = HttpResponse(mimetype='application/pdf')
    response['Content-Disposition'] = 'attachment; filename=%d.pdf' % id

    country = None
    if priority.country:
        country = priority.country.upper()
        assert len(country) == 2

    if country == 'US':
        pagesize = letter
    else:
        pagesize = A4

    if country == 'DE':
        payment = Decimal('%.2f' % (float(priority.payment) / 1.19))
        tax = Decimal('%.2f' % (float(priority.payment) - float(payment)))
        subject = u"Rechnung Nummer %d" % priority.id
        date = u"Datum: %s" % human_date(priority.activated)
        amounts = [-12, u"Menge", '', 12, u"1", '', '', u"19%", '', '']
        prices = [
            -12, u"Preis", '', 12,
            u"%s %.2f" % (priority.currency, payment), '', '',
            u"%s %.2f" % (priority.currency, tax), '',
            u"%s %.2f" % (priority.currency, priority.payment)]
        descriptions = [
            -12, u"Beschreibung", '', 12,
            u"Priority processing für %s" % priority.user.username,
            u"von %s bis %s" % (human_date(priority.activated),
                                human_date(priority.expire)), '',
            u"Mehrwertsteuer", '', u"Rechnungsbetrag (Brutto)"]
        amounts.extend(['', '',
            u"Vielen Dank für Ihren Auftrag.", '',
            u"Mit freundlichen Grüßen,",
            u"Johann C. Rocholl"])
    else:
        subject = u"Invoice Number %d" % id
        date = u"Date: %s" % human_date(priority.activated)
        amounts = [-12, u"Qty", '', 12, u"1", '']
        prices = [
            -12, u"Price", '', 12,
            u"%s %.2f" % (priority.currency, priority.payment)]
        descriptions = [
            -12, u"Description", '', 12,
            u"Priority processing for %s" % priority.user.username,
            u"from %s to %s" % (human_date(priority.activated),
                                human_date(priority.expire))]
        amounts.extend(['', '',
u"For customers outside Germany, this invoice does not include",
u"sales tax, value added tax (VAT) or goods and services tax (GST).",
u"You may have to pay use tax or reverse charge VAT, according",
u"to the tax laws in your country or state.",
'',
u"Thank you for your business.",
'',
u"Kind regards,",
u"Johann C. Rocholl"])

    canvas = reportlab.pdfgen.canvas.Canvas(response, pagesize=pagesize)
    width, height = pagesize
    pdf_draw_header(canvas, country)
    # canvas.drawString(LEFT_COLUMN, 25*cm, u"Customer:")
    address = get_address(priority.user, [priority])
    drawStrings(canvas, LEFT_COLUMN, 23*cm, *address)
    drawStrings(canvas, LEFT_COLUMN, 17.5*cm, -12, subject)
    drawStrings(canvas, LEFT_COLUMN, 17*cm, 12, date)
    drawStrings(canvas, LEFT_COLUMN, TABLE_TOP, *amounts)
    drawStrings(canvas, MIDDLE_COLUMN, TABLE_TOP, *descriptions)
    drawStrings(canvas, RIGHT_COLUMN, TABLE_TOP, *prices)
    pdf_draw_footer(canvas, country)
    canvas.showPage()
    canvas.save()
    return response
Example #47
0
def generate_list(list_id, names, pre_cross_dict={}, title="Coffee list", canvas=None):
    """
        Generate a PDF for a coffee list

        Parameters:
            list_id: A (preferably unique) ID for this list.
                     Will be embedded as a QR code into the URL
            names:   A list of names for this list
            pre_cross_dict:
                     A dictionary mapping names to a number of crosses to pre-draw
                     onto the list
            title:   A heading for the list. Could e.g. include a date.
            canvas:  If set, draw to this canvas.

        Returns:
            A StringIO instance with the PDF file, or None if canvas is given.
    """

    assert len(names) <= COFFEE_COUNT_PER_PAGE

    # Prepare QR code
    qr_code = tempfile.NamedTemporaryFile(suffix=".png")
    qr_data = "%s?id=%d" % (COFFEE_HOMEPAGE, list_id)
    qrcode.make(qr_data, border=0).save(qr_code.name)

    # Start page, prepare units
    had_canvas = canvas is not None
    if not had_canvas:
        outfile = StringIO.StringIO()
        canvas = reportlab.pdfgen.canvas.Canvas(outfile, pagesize=COFFEE_SHEET_PAGE_FORMAT)

    width, height = COFFEE_SHEET_PAGE_FORMAT
    cm_unit = reportlab.lib.units.cm
    qr_size = 2 * cm_unit
    canvas.translate(1.5 * cm_unit, 1.5 * cm_unit)
    width -= 3 * cm_unit
    height -= 3 * cm_unit

    # Draw orientation markers
    path = canvas.beginPath()
    path.moveTo(cm_unit, height)
    path.lineTo(0, height)
    path.lineTo(0, height - cm_unit)
    canvas.setLineWidth(5)
    canvas.setLineJoin(0)
    canvas.drawPath(path)

    path = canvas.beginPath()
    path.moveTo(width, height - cm_unit)
    path.lineTo(width, height)
    path.lineTo(width - cm_unit, height)
    canvas.drawPath(path)

    path = canvas.beginPath()
    path.moveTo(width, cm_unit)
    path.lineTo(width, 0)
    path.lineTo(width - cm_unit, 0)
    canvas.drawPath(path)

    path = canvas.beginPath()
    path.moveTo(0, cm_unit)
    path.lineTo(0, 0)
    path.lineTo(cm_unit, 0)
    canvas.drawPath(path)

    canvas.setLineWidth(1)

    # Draw title
    canvas.setFont("Helvetica", 16)
    canvas.drawString(.5 * cm_unit, height - 1 * cm_unit, title)

    # Draw the QR code and ID
    canvas.drawImage(qr_code.name, .5 * cm_unit, .5 * cm_unit, qr_size, qr_size)
    canvas.setFont("Helvetica", 8)
    canvas.drawString(.5 * cm_unit, .2 * cm_unit, "#%d" % list_id)

    # Draw bottom text
    canvas.setFont("Helvetica", 9)
    ypos = -.2
    COFFEE_SHEET_BOTTOM_TEXT = getattr(config, "COFFEE_SHEET_BOTTOM_TEXT", "")
    for text in COFFEE_SHEET_BOTTOM_TEXT.split("\n"):
        text = text.strip()
        canvas.drawString(qr_size + 1. * cm_unit, qr_size - ypos * cm_unit, text)
        ypos += .5

    # Draw grid
    grid_y = height - 2*cm_unit
    canvas.line(0, grid_y, width, grid_y)
    for name in names:
        new_y = grid_y - COFFEE_LINE_HEIGHT * cm_unit
        canvas.line(0, grid_y, 0, new_y)
        canvas.line(width, grid_y, width, new_y)
        box_start = COFFEE_NAME_FIELD_WIDTH * cm_unit
        box_width = (width - box_start) / COFFEE_BOXES_PER_LINE
        pre_draw_crosses = pre_cross_dict.get(name, 0)
        for i in range(int((width - box_start) / box_width)):
            canvas.line(box_start, grid_y, box_start, new_y)
            if pre_draw_crosses > 0:
                pre_draw_crosses -= 1
                cross_margin = 2
                canvas.line(box_start + cross_margin, grid_y - cross_margin, box_start + box_width - cross_margin, new_y + cross_margin)
                canvas.line(box_start + cross_margin, new_y + cross_margin, box_start + box_width - cross_margin, grid_y - cross_margin)
            box_start += box_width
        canvas.drawString(.2 * cm_unit, grid_y - (COFFEE_LINE_HEIGHT - .1) * cm_unit, name)
        grid_y = new_y
        canvas.line(0, grid_y, width, grid_y)

    canvas.showPage()

    if not had_canvas:
        canvas.save()
        return outfile
Example #48
0
 def process_canvas(self, canvas, f):
     canvas.save(filename=f)


#
# Colorindo elementos
#

# Parâmetros (R, G, B)
canvas.setFillColorRGB(255, 0, 0)
canvas.rect(60, 300, 50, 100, stroke=0, fill=1)

# Somente uma escala para tons de cinza (0 - 1)
canvas.setFillGray(0.9)
canvas.rect(180, 300, 50, 100, stroke=0, fill=1)

# Alterando a cor da borda
canvas.setStrokeColorRGB(0, 0, 255) 
canvas.rect(300, 300, 50, 100, stroke=1, fill=1)



#
# Utilizando o HexCode
#
from reportlab.lib.colors import HexColor

canvas.setFillColor(HexColor('#ff8100'))
canvas.rect(420, 300, 50, 100, stroke=1, fill=1)

canvas.save()
Example #50
0
    def GET(self):
        data = web.input()
        cid = data['cid']
        tid = data['tid']
        canvas.setLineWidth(.3)
        canvas.setFont('Helvetica', 12)
        canvas.drawString(200,750,'FOUNDATION CONFIGURATION')
      #  canvas.line(200,750,580,747)
        canvas.setFont('Helvetica', 8)

        canvas.drawString(50,700,'SERVER:')
        get_customer_specific_task = model.get_history_by_taskid(cid,tid)
        configuration =  json.loads(get_customer_specific_task[0]['json_data'])
        canvas.drawString(150,700,configuration['foundation']['server'])
 
        canvas.drawString(50,680,'Cluster External IP: ')
        canvas.drawString(180,680,configuration['foundation']['restInput']['cluster_external_ip'])
        canvas.drawString(250,680,'Redundancy Factor:')
        canvas.drawString(420,680,configuration['foundation']['restInput']['redundancy_factor'])

        canvas.drawString(50,660,'Ipmi Netmask:  ')
        canvas.drawString(130,660,configuration['foundation']['restInput']['ipmi_netmask'])
        canvas.drawString(210,660,'Cvm Netmask:')
        canvas.drawString(290,660,configuration['foundation']['restInput']['cvm_netmask'])
        canvas.drawString(380,660,'Hypervisor Netmask:')
        canvas.drawString(510,660,configuration['foundation']['restInput']['hypervisor_netmask'])        

        canvas.drawString(50,630,'CVM Netmask: ')
        canvas.drawString(180,630,configuration['foundation']['restInput']['cvm_netmask'])
        canvas.drawString(280,630,'Cvm Gateway:')
        canvas.drawString(420,630,configuration['foundation']['restInput']['cvm_gateway'])

        canvas.drawString(50,600,'Cvm Dns Servers: ')
        canvas.drawString(180,600,configuration['foundation']['restInput']['cvm_dns_servers'])
        canvas.drawString(280,600,'Cvm Ntp Servers:')
        canvas.drawString(420,600,configuration['foundation']['restInput']['cvm_ntp_servers'])

        canvas.drawString(50,570,'Hypervisor ntp servers: ')
        canvas.drawString(180,570,configuration['foundation']['restInput']['hypervisor_ntp_servers'])
        canvas.drawString(280,570,'Hypervisor Nameserver:')
        canvas.drawString(420,570,configuration['foundation']['restInput']['hypervisor_nameserver'])

        canvas.drawString(50,530,'Hypervisor Password: '******'foundation']['restInput']['hypervisor_password'])
        canvas.drawString(280,530,'Hypervisor Gateway:')
        canvas.drawString(420,530,configuration['foundation']['restInput']['hypervisor_gateway'])
        
        canvas.drawString(50,500,'Ipmi Password: '******'foundation']['restInput']['ipmi_password'])
        canvas.drawString(280,500,'Ipmi User:'******'foundation']['restInput']['ipmi_user'])

        canvas.drawString(50,470,'Ipmi Netmask: ')
        canvas.drawString(180,470,configuration['foundation']['restInput']['ipmi_netmask'])
        canvas.drawString(280,470,'Ipmi Gateway:')
        canvas.drawString(420,470,configuration['foundation']['restInput']['ipmi_gateway'])

        canvas.drawString(50,430,'BLOCKS')
        height = 400
        blocknum = 1
        nodnum = 1
        for oneblock in configuration['foundation']['restInput']['blocks']:
            canvas.drawString(50,height,'BLOCKS'+ str(blocknum))
            if oneblock['nodes'][0]:
                for onenode in oneblock['nodes']:
                    height = height - 20 
                    canvas.drawString(80,height,'Ipmi Mac: ')
                    canvas.drawString(180,height,onenode['ipmi_mac'])
                    canvas.drawString(280,height,'Ipv6 address:')
                    canvas.drawString(420,height,onenode['ipv6_address'])
                    height = height - 20 
                    canvas.drawString(80,height,'Image Now: ')
                    canvas.drawString(180,height,str(onenode['image_now']))
                    canvas.drawString(280,height,'Node Position:')
                    canvas.drawString(420,height,onenode['node_position'])
                    height = height - 20 
                    
                    canvas.drawString(80,height,'Image Successful: ')
                    canvas.drawString(180,height,onenode['image_successful'])
                    canvas.drawString(280,height,'Ipmi Configured:')
                    canvas.drawString(420,height,str(onenode['ipmi_configured']))
                    height = height - 20 

                    canvas.drawString(80,height,'Hypervisor Hostname: ')
                    canvas.drawString(220,height,onenode['hypervisor_hostname'])
                    canvas.drawString(310,height,'Cvm gb ram:')
                    canvas.drawString(420,height,str(onenode['cvm_gb_ram']))
                    height = height - 20 

                    canvas.drawString(80,height,'Ipmi Ip: ')
                    canvas.drawString(180,height,onenode['ipmi_ip'])
                    canvas.drawString(280,height,'Cluster Member:')
                    canvas.drawString(420,height,str(onenode['cluster_member']))
                    height = height - 20 

                    canvas.drawString(80,height,'Cvm Ip: ')
                    canvas.drawString(180,height,onenode['cvm_ip'])
                    canvas.drawString(280,height,'Ipmi configure now:')
                    canvas.drawString(420,height,str(onenode['ipmi_configure_now']))
                    height = height - 40 
                   
                    if height < 100:
        
                        height = 750
                        canvas.showPage()
                        canvas.setFont('Helvetica', 8)
                    canvas.drawString(80,height,'Hypervisor Ip: ')
                    canvas.drawString(180,height,onenode['hypervisor_ip'])
                    canvas.drawString(280,height,'Ipv6 Interface:')
                    canvas.drawString(420,height,onenode['ipv6_interface'])

                nodnum = nodnum + 1
                

            height = height - 20   
            blocknum = blocknum +1
       
        canvas.setFont('Helvetica', 12)
       
        canvas.drawString(200,height,'PRISM CONFIGURATION')
      #  canvas.line(200,750,580,747)
        canvas.setFont('Helvetica', 8)
        
        if configuration['prismDetails']:
            height = height - 20 
            prismDetails =  configuration['prismDetails']
            canvas.drawString(80,height,'Rest url: ')
            canvas.drawString(180,height,prismDetails['restURL'])
            height = height - 20
            canvas.drawString(80,height,'Container:')
            canvas.drawString(180,height,prismDetails['container']['name'])           

            height = height - 20
            prismDetails =  configuration['prismDetails']
            canvas.drawString(80,height,'UserName: '******'authentication']['username'])
            height = height - 20
            canvas.drawString(80,height,'Password:'******'authentication']['password'])   

            height = height - 20
            canvas.drawString(80,height,'Storage Pool:')
            canvas.drawString(180,height,prismDetails['storagepool']['name'])   
            height = height - 20

        canvas.setFont('Helvetica', 12)
       
        canvas.drawString(200,height,'Vcenter CONFIGURATION')
      #  canvas.line(200,750,580,747)
        canvas.setFont('Helvetica', 8)
            
        if configuration['vCenterConf']:
            height = height - 20 
            prismDetails =  configuration['vCenterConf']
            canvas.drawString(80,height,'Host: ')
            canvas.drawString(180,height,prismDetails['host'])
            height = height - 20
            canvas.drawString(80,height,'User:'******'user'])           

            height = height - 20
            canvas.drawString(80,height,'password: '******'password'])
            height = height - 20
            canvas.drawString(80,height,'port:')
            canvas.drawString(180,height,prismDetails['port'])   

            height = height - 20
            canvas.drawString(80,height,'datacenter: ')
            canvas.drawString(180,height,prismDetails['datacenter'])
            height = height - 20
            canvas.drawString(80,height,'datacenter_reuse_if_exist:')
            canvas.drawString(180,height,prismDetails['datacenter_reuse_if_exist'])   

            height = height - 20
            canvas.drawString(80,height,'cluster: ')
            canvas.drawString(180,height,prismDetails['cluster'])
            height = height - 20
            canvas.drawString(80,height,'cluster_reuse_if_exist:')
            canvas.drawString(180,height,prismDetails['cluster_reuse_if_exist'])  
            height = height - 20 
            canvas.drawString(80,height,'HOSTS: ')
            
            
            for onehost in prismDetails['hosts']:
                   
                   
                    canvas.drawString(120,height,'IP: ')
                    canvas.drawString(180,height,onehost['ip'])
                    canvas.drawString(280,height,'user:'******'user'])
                    
                    canvas.drawString(420,height,'Password: '******'pwd']))

                    height = height - 20 
                                    

        canvas.save()
        web.header('Content-Type', 'application/pdf')
        web.header('Content-Disposition','filename=form.pdf')
        data = open('form.pdf', 'rb').read()
        return data
Example #51
0
    def printcards(self):

        drawCard = self.loadPythonFunc("drawCard", self.session.query(Data).get("card.py").data)

        page = request.GET.get("page", "card")
        type = request.GET.get("type", "blank")

        query = (
            self.session.query(Driver, Car, Registration)
            .join("cars", "registration")
            .filter(Registration.eventid == self.eventid)
        )
        if type == "blank":
            registered = [(None, None, None)]
        elif type == "lastname":
            registered = query.order_by(func.lower(Driver.lastname), func.lower(Driver.firstname)).all()
        elif type == "classnumber":
            registered = query.order_by(Car.classcode, Car.number).all()

        if page == "csv":
            # CSV data, just use a template and return
            objects = list()
            for (dr, car, reg) in registered:
                o = Registered()
                o.__dict__.update(dr.__dict__)
                o.__dict__.update(reg.__dict__)
                o.__dict__.update(car.__dict__)  # car is last so id = car.id
                objects.append(o)

            titles = [
                "lastname",
                "firstname",
                "email",
                "address",
                "city",
                "state",
                "zip",
                "phone",
                "sponsor",
                "brag",
                "id",
                "year",
                "make",
                "model",
                "color",
                "number",
                "classcode",
                "indexcode",
            ]
            return self.csv("cards", titles, objects)

            # Otherwise we are are PDF
        try:
            from reportlab.pdfgen import canvas
            from reportlab.lib.units import inch
            from reportlab.lib.utils import ImageReader
        except:
            c.text = "<h4>PDFGen not installed, can't create timing card PDF files from this system</h4>"
            return render_mako("/admin/simple.mako")

        try:
            from PIL import Image
        except ImportError:
            try:
                import Image
            except:
                c.text = "<h4>Python Image not installed, can't create timing card PDF files from this system</h4>"
                return render_mako("/admin/simple.mako")

        if page == "letter":  # Letter has an additional 72 points Y to space out
            size = (8 * inch, 11 * inch)
        else:
            size = (8 * inch, 5 * inch)

        if page == "letter" and len(registered) % 2 != 0:
            registered.append((None, None, None))  # Pages are always two cards per so make it divisible by 2

        buffer = cStringIO.StringIO()
        canvas = canvas.Canvas(buffer, pagesize=size, pageCompression=1)
        carddata = self.session.query(Data).get("cardimage")
        if carddata is None:
            cardimage = Image.new("RGB", (1, 1))
        else:
            cardimage = Image.open(cStringIO.StringIO(carddata.data))

        cardimage = ImageReader(cardimage)

        while len(registered) > 0:
            if page == "letter":
                canvas.translate(0, 18)  # 72/4, bottom margin for letter page
                (driver, car, reg) = registered.pop(0)
                drawCard(canvas, c.event, driver, car, cardimage)
                canvas.translate(0, 396)  # 360+72/2 card size plus 2 middle margins
                (driver, car, reg) = registered.pop(0)
                drawCard(canvas, c.event, driver, car, cardimage)
            else:
                (driver, car, reg) = registered.pop(0)
                drawCard(canvas, c.event, driver, car, cardimage)
            canvas.showPage()
        canvas.save()

        response.headers["Content-type"] = "application/octet-stream"
        response.headers["Content-Disposition"] = "attachment;filename=cards.pdf"
        return buffer.getvalue()
Example #52
0
File: generic.py Project: jnm/sdaps
def create_stamp_pdf(survey, output_filename, questionnaire_ids):
    sheets = 1 if questionnaire_ids is None else len(questionnaire_ids)

    questionnaire_length = survey.questionnaire.page_count

    have_pdftk = False
    # Test if pdftk is present, if it is we can use it to be faster
    try:
        result = subprocess.Popen(["pdftk", "--version"], stdout=subprocess.PIPE)
        # Just assume pdftk is there, if it was executed sucessfully
        if result is not None:
            have_pdftk = True
    except OSError:
        pass

    if not have_pdftk:
        try:
            import pyPdf
        except:
            log.error(_(u"You need to have either pdftk or pyPdf installed. pdftk is the faster method."))
            sys.exit(1)

    # Write the "stamp" out to tmp.pdf if are using pdftk.
    if have_pdftk:
        stampsfile = file(survey.path("tmp.pdf"), "wb")
    else:
        stampsfile = StringIO.StringIO()

    canvas = reportlab.pdfgen.canvas.Canvas(
        stampsfile, bottomup=False, pagesize=(survey.defs.paper_width * mm, survey.defs.paper_height * mm)
    )
    # bottomup = False =>(0, 0) is the upper left corner

    print ungettext(u"Creating stamp PDF for %i sheet", u"Creating stamp PDF for %i sheets", sheets) % sheets
    log.progressbar.start(sheets)
    for i in range(sheets):
        if questionnaire_ids is not None:
            id = questionnaire_ids.pop(0)

        for j in range(questionnaire_length):
            if survey.defs.style == "classic":
                draw_corner_marks(survey, canvas)
                draw_corner_boxes(survey, canvas, j)
                if not survey.defs.duplex or j % 2:
                    if questionnaire_ids is not None:
                        draw_questionnaire_id(canvas, survey, id)

                    if survey.defs.print_survey_id:
                        draw_survey_id(canvas, survey)
            elif survey.defs.style == "code128":
                draw_corner_marks(survey, canvas)

                if not survey.defs.duplex or j % 2:
                    if questionnaire_ids is not None:
                        draw_code128_questionnaire_id(canvas, survey, id)

                    # Survey ID has to be printed in CODE128 mode, because it
                    # contains the page number and rotation.
                    draw_code128_sdaps_info(canvas, survey, j + 1)

                    if survey.global_id is not None:
                        draw_code128_global_id(canvas, survey)
            elif survey.defs.style == "custom":
                # Only draw corner marker
                draw_corner_marks(survey, canvas)

                pass
            else:
                raise AssertionError()

            canvas.showPage()
        log.progressbar.update(i + 1)

    canvas.save()

    print ungettext(u"%i sheet; %f seconds per sheet", u"%i sheet; %f seconds per sheet", log.progressbar.max_value) % (
        log.progressbar.max_value,
        float(log.progressbar.elapsed_time) / float(log.progressbar.max_value),
    )

    if have_pdftk:
        stampsfile.close()
        # Merge using pdftk
        print _("Stamping using pdftk")
        tmp_dir = tempfile.mkdtemp()

        if sheets == 1:
            # Shortcut if we only have one sheet.
            # In this case form data in the PDF will *not* break, in
            # the other code path it *will* break.
            print _(u"pdftk: Overlaying the original PDF with the markings.")
            subprocess.call(
                ["pdftk", survey.path("questionnaire.pdf"), "stamp", survey.path("tmp.pdf"), "output", output_filename]
            )
        else:
            for page in xrange(1, questionnaire_length + 1):
                print ungettext(
                    u"pdftk: Splitting out page %d of each sheet.", u"pdftk: Splitting out page %d of each sheet.", page
                ) % page
                args = []
                args.append("pdftk")
                args.append(survey.path("tmp.pdf"))
                args.append("cat")
                cur = page
                for i in range(sheets):
                    args.append("%d" % cur)
                    cur += questionnaire_length
                args.append("output")
                args.append(os.path.join(tmp_dir, "stamp-%d.pdf" % page))

                subprocess.call(args)

            print _(u"pdftk: Splitting the questionnaire for watermarking.")
            subprocess.call(
                [
                    "pdftk",
                    survey.path("questionnaire.pdf"),
                    "dump_data",
                    "output",
                    os.path.join(tmp_dir, "doc_data.txt"),
                ]
            )
            for page in xrange(1, questionnaire_length + 1):
                subprocess.call(
                    [
                        "pdftk",
                        survey.path("questionnaire.pdf"),
                        "cat",
                        "%d" % page,
                        "output",
                        os.path.join(tmp_dir, "watermark-%d.pdf" % page),
                    ]
                )

            if sheets == 1:
                for page in xrange(1, questionnaire_length + 1):
                    print ungettext(
                        u"pdftk: Watermarking page %d of all sheets.",
                        u"pdftk: Watermarking page %d of all sheets.",
                        page,
                    ) % page
                    subprocess.call(
                        [
                            "pdftk",
                            os.path.join(tmp_dir, "stamp-%d.pdf" % page),
                            "background",
                            os.path.join(tmp_dir, "watermark-%d.pdf" % page),
                            "output",
                            os.path.join(tmp_dir, "watermarked-%d.pdf" % page),
                        ]
                    )
            else:
                for page in xrange(1, questionnaire_length + 1):
                    print ungettext(
                        u"pdftk: Watermarking page %d of all sheets.",
                        u"pdftk: Watermarking page %d of all sheets.",
                        page,
                    ) % page
                    subprocess.call(
                        [
                            "pdftk",
                            os.path.join(tmp_dir, "stamp-%d.pdf" % page),
                            "background",
                            os.path.join(tmp_dir, "watermark-%d.pdf" % page),
                            "output",
                            os.path.join(tmp_dir, "watermarked-%d.pdf" % page),
                        ]
                    )

            args = []
            args.append("pdftk")
            for page in xrange(1, questionnaire_length + 1):
                char = chr(ord("A") + page - 1)
                args.append("%s=" % char + os.path.join(tmp_dir, "watermarked-%d.pdf" % page))

            args.append("cat")

            for i in range(sheets):
                for page in xrange(1, questionnaire_length + 1):
                    char = chr(ord("A") + page - 1)
                    args.append("%s%d" % (char, i + 1))

            args.append("output")
            args.append(os.path.join(tmp_dir, "final.pdf"))
            print _(u"pdftk: Assembling everything into the final PDF.")
            subprocess.call(args)

            subprocess.call(
                [
                    "pdftk",
                    os.path.join(tmp_dir, "final.pdf"),
                    "update_info",
                    os.path.join(tmp_dir, "doc_data.txt"),
                    "output",
                    output_filename,
                ]
            )

        # Remove tmp.pdf
        os.unlink(survey.path("tmp.pdf"))
        # Remove all the temporary files
        shutil.rmtree(tmp_dir)

    else:
        # Merge using pyPdf
        stamped = pyPdf.PdfFileWriter()
        stamped._info.getObject().update(
            {
                pyPdf.generic.NameObject("/Producer"): pyPdf.generic.createStringObject(u"sdaps"),
                pyPdf.generic.NameObject("/Title"): pyPdf.generic.createStringObject(survey.title),
            }
        )

        subject = []
        for key, value in survey.info.iteritems():
            subject.append(u"%(key)s: %(value)s" % {"key": key, "value": value})
        subject = u"\n".join(subject)

        stamped._info.getObject().update(
            {pyPdf.generic.NameObject("/Subject"): pyPdf.generic.createStringObject(subject)}
        )

        stamps = pyPdf.PdfFileReader(stampsfile)

        del stampsfile

        questionnaire = pyPdf.PdfFileReader(file(survey.path("questionnaire.pdf"), "rb"))

        print _(u"Stamping using pyPdf. For faster stamping, install pdftk.")
        log.progressbar.start(sheets)

        for i in range(sheets):
            for j in range(questionnaire_length):
                s = stamps.getPage(i * questionnaire_length + j)
                if not have_pdftk:
                    q = questionnaire.getPage(j)
                    s.mergePage(q)
                stamped.addPage(s)
            log.progressbar.update(i + 1)

        stamped.write(open(output_filename, "wb"))

        print ungettext(
            u"%i sheet; %f seconds per sheet", u"%i sheet; %f seconds per sheet", log.progressbar.max_value
        ) % (log.progressbar.max_value, float(log.progressbar.elapsed_time) / float(log.progressbar.max_value))
Example #53
0
def project_gantt_chart(project_id, format):
    project = get_project_or_404(project_id)
    get_project_member_or_403(project)

    try:
        chart = Chart(project)
    except InvalidGanttChart:
        chart = None

    dynamic = format == 'svg'

    svg = flask.render_template('projects/gantt-chart.svg', chart=chart,
                                project=project, dynamic=dynamic,
                                today=datetime.datetime.utcnow())

    if format == 'svg':
        response = flask.make_response(svg)
        response.mimetype = 'image/svg+xml'
    elif format == 'pdf':
        png = cairosvg.svg2png(svg)
        image = PIL.Image.open(io.BytesIO(png))

        page_size = tuple(reversed(reportlab.lib.pagesizes.A4))
        page_margin = 50

        output = io.BytesIO()
        canvas = reportlab.pdfgen.canvas.Canvas(output, pagesize=page_size)

        def draw_title_header():
            x = page_size[0] / 2
            y = page_size[1] - page_margin
            title1 = 'Gantt Chart for {}'.format(project.name)
            title2 = '{} to {}'.format(chart.start.date(), chart.end.date())
            canvas.setFont('Helvetica', 14)
            canvas.drawCentredString(x, y - 10, title1)
            canvas.setFont('Helvetica', 10)
            canvas.drawCentredString(x, y - 25, title2)

        chart_x = page_margin
        chart_y = page_margin
        chart_width = int(page_size[0] - chart_x - page_margin)
        chart_height = int(page_size[1] - chart_y - page_margin - 50)

        new_height = int(chart_height)
        new_width = int(image.width * (new_height / image.height))
        image = image.resize((new_width, new_height), PIL.Image.ANTIALIAS)

        def split_image():
            for i in range(math.ceil(image.width / chart_width)):
                x2 = (i + 1) * chart_width
                if x2 >= image.width:
                    box = (i * chart_width, 0, image.width, image.height)

                    final = PIL.Image.new(mode='RGB',
                                          size=(chart_width, chart_height),
                                          color=(255, 255, 255))
                    final.paste(image.crop(box), (0, 0))
                    yield final
                else:
                    box = (i * chart_width, 0, x2, image.height)
                    yield image.crop(box)

        for subimage in split_image():
            canvas.drawImage(reportlab.lib.utils.ImageReader(subimage),
                             chart_x, chart_y, width=chart_width,
                             height=chart_height)
            draw_title_header()
            canvas.showPage()

        canvas.save()

        pdf = output.getvalue()
        output.close()

        response = flask.make_response(pdf)
        response.mimetype = 'application/pdf'
    elif format == 'png':
        png = cairosvg.svg2png(svg)

        response = flask.make_response(png)
        response.mimetype = 'image/png'
    else:
        raise errors.NotFound()

    if format != 'svg':
        if not flask.current_app.debug:
            filename = 'Gantt Chart for {}.{}'.format(project.name, format)
            content_disposition = 'attachment; filename="{}"'.format(filename)
            response.headers['Content-Disposition'] = content_disposition

    return response
def pdfFunction(author = 'Jon Barnes' ,
                lab = 'Cascade Meteorite Lab'  ,
                savedFileName = 'pdfTest1'):

    ####Import in Libraries
    #
    from reportlab.pdfgen import canvas
    #
    from reportlab.lib.pagesizes import letter
    from reportlab.lib.pagesizes import landscape
    #
    from reportlab.platypus import Image
    #
    from reportlab.lib.units import cm

    #
    import time

    global imageFileName
    global n_clusters

    print 'start'

    ####Canvas stuff
    canvas = canvas.Canvas(savedFileName + ".pdf", pagesize=letter)
    #
    canvas.setLineWidth(.3)
    #
    canvas.setFont('Helvetica', 12)



    ########################
    #Page 1
    ##Layer 1 - Header Info : Meteorite lab, Thin Section, User, Date
    ########################


    ############
    #Layer 1 - Header Info : Meteorite lab, Thin Section, User, Date
    ############
    #
    ##Lab the Data is From
    canvas.drawString(30,750,lab)
    canvas.drawString(30,735,'Scanning Electron Microscope Analysis')
    #
    ##Info on the image
    #
    canvas.drawString(300,750, "Backscatter Electron Image from " + imageFileName)
    canvas.line(280,747,580,747)
    #
    canvas.drawString(400,730, "Created by " + author) 
    canvas.line(380,727,580,727)
    #
    canvas.drawString(400,710, "Created on " + time.asctime( time.localtime(time.time()) ))
    canvas.line(380,707,580,707)
    #

    #### BSE Tiff Image
    #Image of BSE Tiff
    #bseTif = '/home/jon/Desktop/gsoc2014/semData2014/CML0615(13).tif'
    #canvas.drawImage(bseTif, 50, 400, width=10*cm, height=10*cm, preserveAspectRatio=True)
    #Label Image
    canvas.drawString(50,400, "BSE Image of " + imageFileName)

    #### BSE Tiff Image Histogram
    #Image of BSE Histogram
    #bseHist = '/home/jon/Desktop/BSEHistogramFirstLast3Removed.png'
    #canvas.drawImage(bseHist, 400, 400, width=7*cm, height=7*cm, preserveAspectRatio=True)
    #Label Image
    canvas.drawString(400,400, "BSE Histogram from " + imageFileName)

    ##Save the Page, make new page
    canvas.showPage()
    print 'writing page 1'


    ########################
    #Page 2
    ##Layer 1 - Crop BSE and BSE Hist
    ##Layer 2 - Countour and Heat Map
    ##Layer 3 - Hist of Size and Boxplot of Values
    ########################

    ############
    ####Layer 1 - Crop BSE and BSE Hist
    ############
    #
    ## BSE Cropped Image
    #Image of BSE Tiff cropped
    #bseContour = '/home/jon/Desktop/cropped bse image.png'
    #canvas.drawImage(bseContour, 50, 500, width=10*cm, height=10*cm, preserveAspectRatio=True)
    #Label Image
    canvas.drawString(50,500, "BSE Image subsection of " + imageFileName)
    #
    ##BSE Hist
    #bseHistCrop = '/home/jon/Desktop/bseDistOfCrop.png'
    #canvas.drawImage(bseHistCrop, 350, 600, width=7*cm, height=7*cm, preserveAspectRatio=True)
    #Label Image
    canvas.drawString(350,600, "BSE Histogram from")
    canvas.drawString(350,590, imageFileName + " Cropped Area")

    ############
    ####Layer 2 - Countour and Heat Map
    ############
    #
    ## BSE Tiff Contours
    #Image of BSE Tiff
    #bseContour = '/home/jon/Desktop/testContour.png'
    #canvas.drawImage(bseContour, 50, 300, width=10*cm, height=10*cm, preserveAspectRatio=True)
    #Label Image
    canvas.drawString(50,300, "BSE Image Contours for")
    canvas.drawString(50,290, "subsection of " + imageFileName)
    canvas.drawString(50,280, "Using " + str(n_clusters) + " number of grains")
    #
    #
    #### BSE Tiff BSE Mineral Heat Map
    #Image of BSE Mineral Heat Map
    #bseMineralShade = '/home/jon/Desktop/testShade.png'
    #canvas.drawImage(bseMineralShade, 350, 300, width=7*cm, height=7*cm, preserveAspectRatio=True)
    #Label Image
    canvas.drawString(350,300, "BSE Shaded map from subsection of " + imageFileName)


    ############
    ####Layer 3 - Hist of Size and Boxplot of Values
    ############
    #### Histogram of Sizes of Mineral Group
    #bseMineralShade = '/home/jon/Desktop/pixelSizeOfMineralGroups.png'
    #canvas.drawImage(bseMineralShade, 50, 100, width=7*cm, height=7*cm, preserveAspectRatio=True)
    #Label Image
    canvas.drawString(50,100, "Histogram of Sizes of Mineral Group")
    #
    #
    #### Boxplot of BSE values for Mineral Group
    #bseMineralShade = '/home/jon/Desktop/Scatter Plot of BSE values for Mineral Groups.png'
    #canvas.drawImage(bseMineralShade, 350, 100, width=7*cm, height=7*cm, preserveAspectRatio=True)
    #Label Image
    canvas.drawString(350,100, "Scatter Plot of BSE values for Mineral Group" )
    canvas.drawString(350,90, "Hope to turn into Boxplot Later")
    #
    #

    ##Save the Page, make new page
    canvas.showPage()
    print 'writing page 2'
    
    
    
    
    print 'done'

    ####Save the PDF
    canvas.save()
Example #55
0
File: invoice.py Project: ses4j/ts
def draw_pdf(buffer, invoice):
    """ Draws the invoice """
    canvas = Canvas(buffer, pagesize=A4)
    canvas.translate(0, 29.7 * cm)
    canvas.setFont('Helvetica', 10)

    canvas.saveState()
    header_func(canvas)
    canvas.restoreState()

    canvas.saveState()
    footer_func(canvas, invoice.footer)
    canvas.restoreState()

    canvas.saveState()
    address_func(canvas)
    canvas.restoreState()

    # Client address
    textobject = canvas.beginText(1.5 * cm, -2.5 * cm)
    for line in invoice.client_business_details:
        textobject.textLine(line)

    # if invoice.address.contact_name:
    #     textobject.textLine(invoice.address.contact_name)
    # textobject.textLine(invoice.address.address_one)
    # if invoice.address.address_two:
    #     textobject.textLine(invoice.address.address_two)
    # textobject.textLine(invoice.address.town)
    # if invoice.address.county:
    #     textobject.textLine(invoice.address.county)
    # textobject.textLine(invoice.address.postcode)
    # textobject.textLine(invoice.address.country.name)
    canvas.drawText(textobject)

    # Info
    textobject = canvas.beginText(1.5 * cm, -6.75 * cm)
    textobject.textLine(u'Invoice ID: %s' % invoice.invoice_id)
    textobject.textLine(u'Invoice Date: %s' % invoice.invoice_date.strftime('%d %b %Y'))
    textobject.textLine(u'Client: %s' % invoice.client)

    for line in invoice.body_text:
        textobject.textLine(line)

    canvas.drawText(textobject)

    # Items
    data = [[u'Quantity', u'Description', u'Amount', u'Total'], ]
    for item in invoice.items:
        data.append([
            item.quantity,
            item.description,
            format_currency(item.unit_price, invoice.currency),
            format_currency(item.total(), invoice.currency)
        ])
    data.append([u'', u'', u'Total:', format_currency(invoice.total(), invoice.currency)])
    table = Table(data, colWidths=[2 * cm, 11 * cm, 3 * cm, 3 * cm])
    table.setStyle([
        ('FONT', (0, 0), (-1, -1), 'Helvetica'),
        ('FONTSIZE', (0, 0), (-1, -1), 10),
        ('TEXTCOLOR', (0, 0), (-1, -1), (0.2, 0.2, 0.2)),
        ('GRID', (0, 0), (-1, -2), 1, (0.7, 0.7, 0.7)),
        ('GRID', (-2, -1), (-1, -1), 1, (0.7, 0.7, 0.7)),
        ('ALIGN', (-2, 0), (-1, -1), 'RIGHT'),
        ('BACKGROUND', (0, 0), (-1, 0), (0.8, 0.8, 0.8)),
    ])
    tw, th, = table.wrapOn(canvas, 15 * cm, 19 * cm)
    table.drawOn(canvas, 1 * cm, -10 * cm - th)

    canvas.showPage()
    canvas.save()
Example #56
0
def create_stamp_pdf(survey, output_filename, questionnaire_ids):
    sheets = 1 if questionnaire_ids is None else len(questionnaire_ids)

    questionnaire_length = survey.questionnaire.page_count

    have_pdftk = False
    # Test if pdftk is present, if it is we can use it to be faster
    try:
        result = subprocess.Popen(['pdftk', '--version'], stdout=subprocess.PIPE)
        # Just assume pdftk is there, if it was executed sucessfully
        if result is not None:
            have_pdftk = True
    except OSError:
        pass

    if not have_pdftk:
        try:
            import pyPdf
        except:
            log.error(_(u'You need to have either pdftk or pyPdf installed. pdftk is the faster method.'))
            sys.exit(1)

    # Write the "stamp" out to tmp.pdf if are using pdftk.
    if have_pdftk:
        stampsfile = file(survey.path('tmp.pdf'), 'wb')
    else:
        stampsfile = StringIO.StringIO()

    canvas = \
        reportlab.pdfgen.canvas.Canvas(stampsfile,
                                       bottomup=False,
                                       pagesize=(survey.defs.paper_width * mm,
                                                 survey.defs.paper_height * mm))
    # bottomup = False =>(0, 0) is the upper left corner

    print ungettext(u'Creating stamp PDF for %i sheet', u'Creating stamp PDF for %i sheets', sheets) % sheets
    log.progressbar.start(sheets)
    for i in range(sheets):
        id = questionnaire_ids.pop(0)

        for j in range(questionnaire_length):
            if survey.defs.style == "classic":
                draw_corner_marks(survey, canvas)
                draw_corner_boxes(survey, canvas, j)
                if not survey.defs.duplex or j % 2:
                    if questionnaire_ids is not None:
                        draw_questionnaire_id(canvas, survey, id)

                    if survey.defs.print_survey_id:
                        draw_survey_id(canvas, survey)
            elif survey.defs.style == "code128":
                draw_corner_marks(survey, canvas)

                if not survey.defs.duplex or j % 2:
                    if questionnaire_ids is not None:
                        draw_code128_questionnaire_id(canvas, survey, id)

                    # Survey ID has to be printed in CODE128 mode, because it
                    # contains the page number and rotation.
                    draw_code128_sdaps_info(canvas, survey, j + 1)

                    if survey.global_id is not None:
                        draw_code128_global_id(canvas, survey)
            else:
                raise AssertionError()

            canvas.showPage()
        log.progressbar.update(i + 1)

    canvas.save()

    print ungettext(u'%i sheet; %f seconds per sheet', u'%i sheet; %f seconds per sheet', log.progressbar.max_value) % (
        log.progressbar.max_value,
        float(log.progressbar.elapsed_time) /
        float(log.progressbar.max_value)
    )

    if have_pdftk:
        stampsfile.close()
        # Merge using pdftk
        print _("Stamping using pdftk")
        tmp_dir = tempfile.mkdtemp()

        for page in xrange(1, questionnaire_length + 1):
            print ungettext(u"pdftk: Splitting out page %d of each sheet.", u"pdftk: Splitting out page %d of each sheet.", page) % page
            args = []
            args.append('pdftk')
            args.append(survey.path('tmp.pdf'))
            args.append('cat')
            cur = page
            for i in range(sheets):
                args.append('%d' % cur)
                cur += questionnaire_length
            args.append('output')
            args.append(os.path.join(tmp_dir, 'stamp-%d.pdf' % page))

            subprocess.call(args)

        print _(u"pdftk: Splitting the questionnaire for watermarking.")
        subprocess.call(['pdftk', survey.path('questionnaire.pdf'),
                         'dump_data', 'output',
                         os.path.join(tmp_dir, 'doc_data.txt')])
        for page in xrange(1, questionnaire_length + 1):
            subprocess.call(['pdftk', survey.path('questionnaire.pdf'), 'cat',
                             '%d' % page, 'output',
                             os.path.join(tmp_dir, 'watermark-%d.pdf' % page)])

        for page in xrange(1, questionnaire_length + 1):
            print ungettext(u"pdftk: Watermarking page %d of all sheets.", u"pdftk: Watermarking page %d of all sheets.", page) % page
            subprocess.call(['pdftk',
                             os.path.join(tmp_dir, 'stamp-%d.pdf' % page),
                             'background',
                             os.path.join(tmp_dir, 'watermark-%d.pdf' % page),
                             'output',
                             os.path.join(tmp_dir, 'watermarked-%d.pdf' % page)])

        args = []
        args.append('pdftk')
        for page in xrange(1, questionnaire_length + 1):
            char = chr(ord('A') + page - 1)
            args.append('%s=' % char + os.path.join(tmp_dir, 'watermarked-%d.pdf' % page))

        args.append('cat')

        for i in range(sheets):
            for page in xrange(1, questionnaire_length + 1):
                char = chr(ord('A') + page - 1)
                args.append('%s%d' % (char, i + 1))

        args.append('output')
        args.append(os.path.join(tmp_dir, 'final.pdf'))
        print _(u"pdftk: Assembling everything into the final PDF.")
        subprocess.call(args)

        subprocess.call(['pdftk', os.path.join(tmp_dir, 'final.pdf'),
                         'update_info', os.path.join(tmp_dir, 'doc_data.txt'),
                         'output', output_filename])

        # Remove tmp.pdf
        os.unlink(survey.path('tmp.pdf'))
        # Remove all the temporary files
        shutil.rmtree(tmp_dir)

    else:
        # Merge using pyPdf
        stamped = pyPdf.PdfFileWriter()
        stamped._info.getObject().update({
            pyPdf.generic.NameObject('/Producer'): pyPdf.generic.createStringObject(u'sdaps'),
            pyPdf.generic.NameObject('/Title'): pyPdf.generic.createStringObject(survey.title),
        })

        subject = []
        for key, value in survey.info.iteritems():
            subject.append(u'%(key)s: %(value)s' % {'key': key, 'value': value})
        subject = u'\n'.join(subject)

        stamped._info.getObject().update({
            pyPdf.generic.NameObject('/Subject'): pyPdf.generic.createStringObject(subject),
        })

        stamps = pyPdf.PdfFileReader(stampsfile)

        del stampsfile

        questionnaire = pyPdf.PdfFileReader(
            file(survey.path('questionnaire.pdf'), 'rb')
        )

        print _(u'Stamping using pyPdf. For faster stamping, install pdftk.')
        log.progressbar.start(sheets)

        for i in range(sheets):
            for j in range(questionnaire_length):
                s = stamps.getPage(i * questionnaire_length + j)
                if not have_pdftk:
                    q = questionnaire.getPage(j)
                    s.mergePage(q)
                stamped.addPage(s)
            log.progressbar.update(i + 1)

        stamped.write(open(output_filename, 'wb'))

        print ungettext(u'%i sheet; %f seconds per sheet', u'%i sheet; %f seconds per sheet',
                        log.progressbar.max_value) % (
                            log.progressbar.max_value,
                            float(log.progressbar.elapsed_time) /
                            float(log.progressbar.max_value))
Example #57
0
  def create_frontpdf(toaddress_full,fromaddress_full = from_add):
#  (to_name, to_street_address, to_city, to_state, to_zip_code, from_name, from_street_address, from_city, from_state, from_zip_code):
# 
#
#  tempaddr1 = {
#            'name': 'Siddharth Saha',
#            'address_line': '220 William T Morrissey, Sunset Town',
#            'address_city': 'Boston',
#            'address_state': 'MA',
#            'address_country': 'US',
#            'address_zip': '02125'
#        }

      to_name = toaddress_full["name"]
      to_street_address = toaddress_full["address_line1"]
      to_city = toaddress_full["address_city"]
      to_state = toaddress_full["address_state"]
      to_zip_code = toaddress_full["address_zip"]
  
      from_name = fromaddress_full["name"]
      from_street_address = fromaddress_full["address_line1"]
      from_city = fromaddress_full["address_city"]
      from_state = fromaddress_full["address_state"]
      from_zip_code = fromaddress_full["address_zip"]
      
      from reportlab.pdfgen import canvas
      from reportlab.lib.units import inch
      from reportlab.lib.colors import black, white
  
      #CREATE THE FRONT SIDE
      canvas = canvas.Canvas("PC_front.pdf")
      canvas.setLineWidth(.3)
      canvas.setFont('Helvetica', 10)
      canvas.setPageSize((6*inch, 4*inch))
  
      #Border and Stamp
      canvas.setFillColor(white)
      canvas.rect(0.1*inch, 0.1*inch, 5.8*inch, 3.8*inch, stroke=1, fill=1)
      #canvas.rect(4.8*inch, 2.8*inch, 0.85*inch, 0.85*inch, stroke=1, fill=1)
  
      #Center Line
      canvas.line(3*inch, 0.5*inch, 3*inch, 3.5*inch)
  
      #To Address Lines (5 nos)
      
      canvas.setFillColor(black)
      canvas.drawString(3.4*inch, 3.4*inch,'To,')
      canvas.drawString(3.5*inch, 3.2*inch,to_name)
      canvas.drawString(3.5*inch, 3.0*inch,to_street_address)
      canvas.drawString(3.5*inch, 2.8*inch,to_city)
      canvas.drawString(3.5*inch, 2.6*inch,to_state)
      canvas.drawString(3.5*inch, 2.4*inch,to_zip_code)
  
      #From Address Lines (5 nos)
      
      canvas.setFillColor(black)
      canvas.drawString(3.4*inch, 2.0*inch,'From,')
      canvas.drawString(3.5*inch, 1.8*inch,from_name)
      canvas.drawString(3.5*inch, 1.6*inch,from_street_address)
      canvas.drawString(3.5*inch, 1.4*inch,from_city)
      canvas.drawString(3.5*inch, 1.2*inch,from_state)
      canvas.drawString(3.5*inch, 1.0*inch,from_zip_code)
  
      canvas.setFont('Helvetica', 18)
      canvas.drawString(0.5*inch, 2.5*inch,'Many Many Happy ')
      canvas.drawString(0.5*inch, 2.0*inch,'Returns of the Day')
      
  
      canvas.save()
def pdfFunctionLoop(author="Jon Barnes", lab="Cascade Meteorite Lab", savedFileName="pdfTestLoop1"):

    ####Import in Libraries
    #
    from reportlab.pdfgen import canvas

    #
    from reportlab.lib.pagesizes import letter
    from reportlab.lib.pagesizes import landscape

    #
    from reportlab.platypus import Image

    #
    from reportlab.lib.units import cm

    #
    import time

    global imageFileName
    global n_clusters

    print "start"

    ####Canvas stuff
    canvas = canvas.Canvas(savedFileName + ".pdf", pagesize=letter)
    #
    canvas.setLineWidth(0.3)
    #
    canvas.setFont("Helvetica", 12)

    ########################
    # Page 1
    ## Header Info : Meteorite lab, Thin Section, User, Date
    ##Lab the Data is From
    canvas.drawString(30, 750, lab)
    canvas.drawString(30, 735, "Scanning Electron Microscope Analysis")
    #
    canvas.drawString(400, 730, "Created by " + author)
    canvas.line(380, 727, 580, 727)
    #
    canvas.drawString(400, 710, "Created on " + time.asctime(time.localtime(time.time())))
    canvas.line(380, 707, 580, 707)
    #
    #### BSE Tiff Image
    # Image of BSE Tiff
    bseMainFile = "/home/jon/Desktop/gsoc2014/CML0615(13).tif"
    canvas.drawImage(bseMainFile, 50, 100, width=15 * cm, height=15 * cm, preserveAspectRatio=True)
    canvas.drawString(100, 100, "Back Scatter Electron (BSE) Image of Metorite thin section CML0615 ;")
    canvas.drawString(100, 80, "mosaic image 13, CML0615(13). Grey scale shows average density.")
    canvas.drawString(100, 60, "Lighter spots are heavier then darker spots.")
    #
    ##Save the Page, make new page
    canvas.showPage()
    print "writing page 1"

    bsePNGpath = "/home/jon/Desktop/gsoc2014/"

    bsePNGfile = "croppedImageForCML0615(13)BOX"
    bsePNG = bsePNGpath + bsePNGfile

    bseCROPpngFile = "output"
    bseCROPpng = bsePNGpath + bseCROPpngFile

    bseNumber = 1

    fileExt = ".png"

    for i in range(62):
        canvas.drawString(400, 400, "this is page 1+" + str(i))

        #### BSE Tiff Image
        # Image of BSE Tiff
        bseWholeFile = bsePNG + str(bseNumber) + fileExt
        canvas.drawImage(bseWholeFile, 50, 400, width=10 * cm, height=10 * cm, preserveAspectRatio=True)

        # Label Image
        bsePNGfileWhole = bsePNGfile + str(bseNumber)
        canvas.drawString(50, 400, "BSE Image of " + bsePNGfileWhole)

        #### BSE Crop Tiff Image
        # Image of BSE Tiff
        bseCROPWholeFile = bseCROPpng + str(bseNumber) + fileExt
        canvas.drawImage(bseCROPWholeFile, 400, 400, width=5 * cm, height=5 * cm, preserveAspectRatio=True)

        # Label Image
        bsePNGfileWhole = bsePNGfile + str(bseNumber)
        canvas.drawString(400, 400, "Crop Location in BSE Image of " + bseCROPWholeFile)

        bseNumber += 1

        print "writting page " + str(i)
        canvas.showPage()

    print "done"
    ####Save the PDF
    canvas.save()
Example #59
0
    def printcards(self):

        drawCard = self.loadPythonFunc("drawCard", self.session.query(Data).get("card.py").data)

        page = request.GET.get("page", "card")
        type = request.GET.get("type", "blank")

        query = (
            self.session.query(Driver, Car, Registration)
            .join("cars", "registration")
            .filter(Registration.eventid == self.eventid)
        )
        if type == "blank":
            registered = [(None, None, None)]
        elif type == "lastname":
            registered = query.order_by(func.lower(Driver.lastname), func.lower(Driver.firstname)).all()
        elif type == "classnumber":
            registered = query.order_by(Car.classcode, Car.number).all()

        if page == "csv":
            # CSV data, just use a template and return
            c.registered = registered
            response.headers["Content-type"] = "application/octet-stream"
            response.headers["Content-Disposition"] = "attachment;filename=cards.csv"
            response.charset = "utf8"
            return render_mako("/admin/csv.mako")

            # Otherwise we are are PDF
        try:
            from reportlab.pdfgen import canvas
            from reportlab.lib.units import inch
        except:
            c.text = "<h4>PDFGen not installed, can't create timing card PDF files from this system</h4>"
            return render_mako("/admin/simple.mako")

        if page == "letter":  # Letter has an additional 72 points Y to space out
            size = (8 * inch, 11 * inch)
        else:
            size = (8 * inch, 5 * inch)

        if page == "letter" and len(registered) % 2 != 0:
            registered.append((None, None, None))  # Pages are always two cards per so make it divisible by 2

        buffer = cStringIO.StringIO()
        canvas = canvas.Canvas(buffer, pagesize=size, pageCompression=1)
        while len(registered) > 0:
            if page == "letter":
                canvas.translate(0, 18)  # 72/4, bottom margin for letter page
                (driver, car, reg) = registered.pop(0)
                drawCard(canvas, c.event, driver, car)
                canvas.translate(0, 396)  # 360+72/2 card size plus 2 middle margins
                (driver, car, reg) = registered.pop(0)
                drawCard(canvas, c.event, driver, car)
            else:
                (driver, car, reg) = registered.pop(0)
                drawCard(canvas, c.event, driver, car)
            canvas.showPage()
        canvas.save()

        response.headers["Content-type"] = "application/octet-stream"
        response.headers["Content-Disposition"] = "attachment;filename=cards.pdf"
        return buffer.getvalue()