def draw_right_image(self,
                      canvas,
                      url,
                      x,
                      y,
                      w,
                      h,
                      x_padding=0,
                      y_padding=0,
                      title=''):
     try:
         canvas.drawImage(url,
                          x + x_padding,
                          y - h - y_padding,
                          w,
                          h,
                          preserveAspectRatio=True)
     except:
         canvas.roundRect(x + x_padding,
                          y - y_padding - h,
                          w,
                          h,
                          0,
                          stroke=1,
                          fill=0)
         canvas.line(x + x_padding, y - y_padding + h - h,
                     x + x_padding + w, y - y_padding - h)
         canvas.line(x + x_padding, y - y_padding - h, x + x_padding + w,
                     y - y_padding + h - h)
Example #2
0
def title(canvas, doc):
    canvas.saveState()

    lemma_img = 'L:/resources/code/models/accuracy_assessment/report/images/'
    lemma_img += 'lemma_logo.gif'

    # Page background
    canvas.setStrokeColor(colors.black)
    canvas.setLineWidth(1)
    canvas.setFillColor('#e6ded5')
    canvas.roundRect(0.5 * u.inch,
                     0.5 * u.inch,
                     7.5 * u.inch,
                     10.0 * u.inch,
                     0.15 * u.inch,
                     stroke=1,
                     fill=1)

    # Page banner - image
    canvas.drawImage(lemma_img,
                     0.5 * u.inch,
                     7.5 * u.inch,
                     width=7.5 * u.inch,
                     height=3 * u.inch,
                     mask='auto')

    canvas.restoreState()
Example #3
0
def roundedBox(canvas,
               x0=4.5 * cm,
               y0=2.5 * cm,
               width=12.5 * cm,
               heigh=1.63 * cm,
               linewidth=1.5,
               radius=0.25 * cm):
    canvas.setLineWidth(linewidth)
    canvas.roundRect(x0, y0, width, heigh, radius)
    def _draw_single_border(self, canvas, x, width, height): 
        canvas.saveState()
        if type(self.BORDER_COLOR) == str:
            canvas.setFillColor(self.BORDER_COLOR)
        else:
            canvas.setFillColorRGB(self.BORDER_COLOR[0]/255,
                                   self.BORDER_COLOR[1]/255,
                                   self.BORDER_COLOR[2]/255)
        canvas.roundRect(x, 0, width, height,
                         self.CARD_CORNER_DIAMETER, stroke=0, fill=1)

        canvas.restoreState()
 def _draw_single_border(self, canvas, x, width, height):
     canvas.saveState()
     canvas.setFillColor(self.border_color)
     canvas.roundRect(
         x,
         0,
         width,
         height,
         max(self.CARD_CORNER_DIAMETER - self.bleed, 0.0 * mm),
         stroke=0,
         fill=1,
     )
     canvas.restoreState()
Example #6
0
def landscape(canvas, doc):
    canvas.saveState()

    # Page background
    canvas.setStrokeColor(colors.black)
    canvas.setLineWidth(1)
    canvas.setFillColor('#e6ded5')
    canvas.roundRect(0.5 * u.inch,
                     0.5 * u.inch,
                     10.0 * u.inch,
                     7.5 * u.inch,
                     0.15 * u.inch,
                     stroke=1,
                     fill=1)
    canvas.restoreState()
Example #7
0
def titulo_pdf_proovedor(canvas, doc):
    datos = DATOS_DE_LA_EMPRESA.objects.get(pk=1)
    membrete= '%s \n RIF %s \n DIRECCION: %s \n TELEFONOS: %s / %s \n ZONA POSTAL: %s'%(datos.NOMBRE.upper(),
                                     datos.RIF.upper(), datos.DIRECCION.upper(),
                                     datos.TELEFONO, datos.CELULAR,
                                     datos.CODIGO_POSTAL)
    nombre= datos.NOMBRE.upper()
    rif = 'RIF: %s'% (datos.RIF.upper())
    direccion= 'DIRECCION: %s'% (datos.DIRECCION.upper())
    telefonos = '%s / %s'% (datos.TELEFONO, datos.CELULAR)
    codigo_postal='CODIGO POSTAL: %s'% (datos.CODIGO_POSTAL)


    canvas.saveState()
    canvas.setFillColorRGB(0,0,0)
    #canvas.drawCentredString(50, PAGE_HEIGHT-150, membrete)

    #canvas.drawString(100, 800, str(libro.titulo))#Obtenemos el titulo de un libro y lap.drawImage(str(libro.portada.url), 100, 100, width=400, height=600) 
    # mostramos y guardamos el objeto PDF. 

    canvas.setFont('Times-Bold',12)
    canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-110, nombre)
    canvas.roundRect(0, 750, 694, 120, 20, stroke=0, fill=1) 

    canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-130, rif)
    textobject = canvas.beginText()
    textobject.setTextOrigin(inch, 400)
    textobject.setFont("Helvetica-Oblique", 14)
    for line in direccion:
        textobject.textLine(line)
    textobject.setFillGray(0.4)
    textobject.textLines(direccion)
    canvas.drawText(textobject)
    #canvas.drawString(100, 100, direccion)
    canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-170, telefonos)
    canvas.drawCentredString(PAGE_WIDTH/2.0, PAGE_HEIGHT-190, codigo_postal)

    canvas.drawString(12, 10 * 50, "First Page / %s" % membrete)

    canvas.restoreState()
Example #8
0
        side = 'A'
        
            
#    day = startdate + timedelta(days=leday)
#    day2 = startdate + timedelta(days=pages) + timedelta(days=leday)

    bx = bindpad
    by = pad
    
    tx = w/2 - (bindpad+pad)
    ty = h - pad*2
    
    print("Bottom x,y =%s,%s" %(bx, by))
    print("Top x,y =%s,%s" %(tx, ty))
    
    canvas.roundRect(bx, by, tx, ty, 9, stroke=1, fill=0)
    
    
    ts = day.strftime("%A %B %d, %Y")
    print(ts)
    
    canvas.drawString(bindpad+10,ty ,ts)
    #canvas.setFillColor(black)
    
    #ADD LINES
    hours = ['8','9','10','11','12','1','2','3','4','5',]
    i=0
    for hour in hours:
        i=i+1
        print(i)
        y = h - pad - i*50
Example #9
0
    def beforeDrawPage(self, canvas, doc):
        BaseInvoiceTemplate.beforeDrawPage(self, canvas, doc)
        self.rcptFrame.addFromList(self.rcpttext, canvas)
        with save_state(canvas):
            p = canvas.beginPath()
            to = canvas.beginText()
            to.setTextOrigin(20 * mm, self.height - 44 * mm)
            to.setFont('Helvetica', 8)
            to.textOut(_(u'Your reference'))
            to.setFont('Helvetica', 10)
            to.textOut(' ')
            to.textLine(self.buyerref)
            to.setFont('Helvetica', 8)
            to.textLine(_(u'Your notes'))
            paragraphs = [
                Paragraph(line, self.styles['Normal'])
                for line in self.annotation
            ]
            self.annotationframe.addFromList(paragraphs, canvas)
            canvas.drawText(to)

            if self.pgnum and self.total != 0:
                ypos = self.height - 75 * mm - 5
                to = canvas.beginText()
                to.setTextOrigin(20 * mm, ypos)
                to.setFont('Helvetica', 10)
                to.textLine('Betalas till')
                to.setFont('Helvetica-Bold', 12)
                to.textOut('Pg ' + formatters.pgnum(self.pgnum))

                to.setTextOrigin(55 * mm, ypos)
                to.setFont('Helvetica', 10)
                to.textLine('OCR / referens')
                to.setFont('Helvetica-Bold', 12)
                to.textOut(self.ocr)

                to.setTextOrigin(85 * mm, ypos)
                to.setFont('Helvetica', 10)
                to.textLine('Att betala')
                to.setFont('Helvetica-Bold', 12)
                to.textLine(formatters.money(self.total, True))

                ypos = to.getY() - 5
                if self.expiryDate:
                    to.setTextOrigin(20 * mm, ypos)
                    to.setFont('Helvetica', 10)
                    to.textLine(u'Förfallodatum')
                    to.setFont('Helvetica-Bold', 12)
                    to.textLine(formatters.date(self.expiryDate))

                    latestyle = ParagraphStyle('Late',
                                               fontName='Helvetica',
                                               fontSize=8,
                                               leading=9)
                    lateframe = Frame(45 * mm,
                                      ypos - 15,
                                      65 * mm,
                                      22,
                                      id='latefee',
                                      leftPadding=0,
                                      bottomPadding=0,
                                      rightPadding=0,
                                      topPadding=0,
                                      showBoundary=self.showBoundary)
                    lateframe.addFromList([Paragraph(self.latefee, latestyle)],
                                          canvas)

                canvas.drawText(to)
                canvas.roundRect(17 * mm, ypos - 21, 100 * mm + 68, 68, 6)

                # Need to set ECI to UTF-8
                # seee https://github.com/zxing/zxing/blob/3de3374dd25739bde952c788c1064cb17bc11ff8/core/src/main/java/com/google/zxing/qrcode/decoder/Mode.java
                # etc, update qrcode encoder...
                qd = Drawing()
                # No border, deal with quiet zone manually
                data = [QRECI(26), QR8bitByte(self.qrcode)]
                q = qr.QrCodeWidget(data,
                                    barLevel='L',
                                    barBorder=4.0,
                                    barWidth=68.0,
                                    barHeight=68.0)
                qd.add(q)
                renderPDF.draw(qd, canvas, 117 * mm, ypos - 21)

                qrstyle = ParagraphStyle('QR',
                                         fontName='Helvetica',
                                         fontSize=10,
                                         leading=12)
                qrinfoframe = Frame(145 * mm,
                                    ypos - 21,
                                    self.width - 160 * mm,
                                    68,
                                    id='qrinfo',
                                    topPadding=0,
                                    leftPadding=0,
                                    bottomPadding=0,
                                    rightPadding=0,
                                    showBoundary=self.showBoundary)
                qrinfoframe.addFromList([
                    Paragraph(
                        u'Om du betalar med bankapp kan du skanna QR-koden '
                        u'bredvid eller OCR-raden nedan. '
                        u'Läs mer om QR-koden på http://usingqr.se', qrstyle)
                ], canvas)

                # http://www.nordea.se/sitemod/upload/root/content/nordea_se/foretag/programleverantorer/filer/ocr_totalin.pdf
                to = canvas.beginText()
                to.setTextOrigin(10 * mm, self.height - 105 * mm)
                to.setFont('OCRB', 10)

                #  7777777777666666666655555555554444444444333333333322222222221111111111000000000
                #  9876543210987654321098765432109876543210987654321098765432109876543210987654321
                # '#              123456789012 #12345678 50   9 >                12345678 #14#    '
                #  # ooooooooooooooooooooooooo #kkkkkkkk öö   c >                PpppppppP#tt#

                ocrformat = '# {ocr:>25} #{totalkr:>8} {totaldec:<02}   {totalcheck:1} > {pgnum:>23} #14#    '
                totalkr = str(int(self.total))  # integer part of Decimal
                totaldec = str(int(self.total % 1 *
                                   100))  # fraction part of Decimal
                totalcheck = luhn.luhn_checksum(
                    str(self.total).replace('.', '') + '0')
                ocrkeys = {
                    'ocr': self.ocr,
                    'totalkr': totalkr,
                    'totaldec': totaldec,
                    'totalcheck': totalcheck,
                    'pgnum': self.pgnum
                }

                ocrline = ocrformat.format(**ocrkeys)

                assert len(ocrline) == 79
                to.textLine(ocrline)

                canvas.drawText(to)
Example #10
0
def make_a_table(canvas, ncol, nrow, entries, str_index):
    width, height = A4
    cell_size = 16 * mm

    table_data = []
    for i in range(nrow):
        row = []
        for j in range(ncol):
            if 1 < j < ncol - 1:
                row.append('')
            else:
                try:
                    row.append(entries[i])
                except:
                    row.append('')
        table_data.append(row)

    kanji_tbl_style = []
    kanji_tbl_style.append(('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black))
    kanji_tbl_style.append(('BOX', (0, 0), (-1, -1), 0.25, colors.black))
    for i in range(ncol):
        kanji_tbl_style.append(('ALIGN', (i, 0), (i, -1), 'CENTER'))
        kanji_tbl_style.append(('VALIGN', (i, 0), (i, -1), 'BOTTOM'))
        kanji_tbl_style.append(('FONT', (i, 0), (i, -1), 'Stroke', 36))
        if i == ncol - 1:
            kanji_tbl_style.append(('TEXTCOLOR', (i, 0), (i, -1), NAVY))
        elif i < 2:
            kanji_tbl_style.append(('TEXTCOLOR', (i, 0), (i, -1), GRAY))

    kanji_tbl = Table(table_data, colWidths=cell_size, rowHeights=cell_size)
    kanji_tbl.setStyle(TableStyle(kanji_tbl_style))
    kanji_tbl.wrapOn(canvas, width, height)
    table_x, table_y = 12 * mm, 21 * mm
    kanji_tbl.drawOn(canvas, table_x, table_y)

    kanji_info = []
    info_tbl_style = []
    info_style = ParagraphStyle(
        name='Info',
        fontName='Hiragino',
        fontSize=7,
    )
    for i in range(nrow):
        try:
            text = Paragraph(kanji_lookup[entries[i]], info_style)
            kanji_info.append([text])
        except:
            kanji_info.append([''])
    info_tbl_style.append(('VALIGN', (0, 0), (-1, -1), 'TOP'))
    info_tbl = Table(kanji_info, colWidths=50 * mm, rowHeights=cell_size)
    info_tbl.setStyle(TableStyle(info_tbl_style))
    info_tbl.wrapOn(canvas, width, height)
    info_tbl.drawOn(canvas, table_x + cell_size * ncol, table_y)

    for i in range(nrow):
        coord_trans = (table_x + cell_size * ncol + 50 * mm,
                       table_y + cell_size * i)
        if i % 2 == 1:
            char_x = table_x + cell_size * ncol + 5 * mm
        else:
            char_x = table_x + cell_size * ncol + 22 * mm
        coord_char = (char_x, table_y + cell_size * i + 2 * mm)

        try:
            kanji = entries[nrow - i - 1]
            canvas.setFillColor(BLACK)
            canvas.setFont('Times-Italic', 8)
            canvas.drawRightString(*coord_trans, trans_lookup[kanji])

            if kanji in font_lookup['bone']:
                canvas.setFillColor(GREEN30)
                canvas.setFont('Bone', 55)
            elif kanji in font_lookup['tenbun']:
                canvas.setFillColor(RED30)
                canvas.setFont('Tenbun', 55)
            else:
                continue
            canvas.drawString(*coord_char, kanji)
        except:
            pass

    sep_x = table_x + cell_size * ncol + 0.5 * mm
    canvas.setLineWidth(0.1 * mm)
    canvas.line(sep_x, table_y, sep_x, table_y + cell_size * nrow)
    canvas.setFillColor(LIGHTGRAY)
    rect_x, rect_y = table_x, height - 16 * mm
    canvas.roundRect(rect_x,
                     rect_y,
                     70 * mm,
                     10 * mm,
                     1 * mm,
                     fill=1,
                     stroke=0)
    canvas.setFont('Hiragino', 12)
    canvas.setFillColor(BLACK)
    canvas.drawString(rect_x + 2 * mm, rect_y + 3 * mm,
                      "Joytan Kanji Practice | 漢字練習帳")

    # Name with underline
    canvas.setLineWidth(0.1 * mm)
    canvas.setFillColor(BLACK)
    canvas.setFont('Hiragino', 10)
    name_x, name_y = width - 90 * mm, height - 14 * mm
    canvas.drawString(name_x, name_y, "名前:")
    canvas.line(name_x, name_y - 2 * mm, name_x + 70 * mm, name_y - 2 * mm)

    # Left footer
    canvas.setFont('Helvetica-Bold', 10)
    coord_msg = (table_x, table_y - 5 * mm)
    canvas.drawString(
        *coord_msg, "Support our project: https://kokimame.github.io/joytan/")
    coord_index = (table_x, table_y - 12 * mm)
    canvas.drawString(*coord_index, "%s | © Joytan" % str_index)

    # Right footer
    coord_l1 = (width - 20 * mm, table_y - 5 * mm)
    coord_l2 = (width - 20 * mm, table_y - 10 * mm)
    coord_l3 = (width - 20 * mm, table_y - 13 * mm)
    canvas.setFont('Hiragino', 9)
    canvas.drawRightString(*coord_l1, "【部首】/画数/学年 オンヨミ くんよみ")
    canvas.setFont('Hiragino', 8)
    canvas.drawRightString(
        *coord_l2,
        "【radical】/#stroke/grade Onyomi(Katakana) Kunyomi (Hiragana)")
    canvas.setFont('Times-Italic', 7)
    canvas.drawRightString(*coord_l3, "* Rough kanji-wise translation")

    # Additional lines
    canvas.setDash([0.1 * mm, 1.2 * mm])
    canvas.setLineCap(1)

    # Dotted vertical lines
    for i in range(ncol):
        x = table_x + cell_size / 2 + cell_size * i
        canvas.line(x, table_y, x, table_y + nrow * cell_size)
    # Dotted horizontal  lines
    for i in range(nrow):
        trans_y = table_y + cell_size / 2 + cell_size * i
        canvas.line(table_x, trans_y, table_x + ncol * cell_size, trans_y)
    # Separation between the Info panel
    for i in range(nrow + 1):
        x = table_x + cell_size * ncol
        trans_y = table_y + cell_size * i
        canvas.line(x, trans_y, x + 50 * mm, trans_y)

    canvas.showPage()