Пример #1
0
def PDFDocument(**argv):
    pil = Image.open(argv["pic_add"]).resize(
        (250, 43), Image.ANTIALIAS).transpose(Image.FLIP_TOP_BOTTOM)
    p = ImageReader(pil)
    w, h = A4
    c = canvas.Canvas("Invoice\Invoice   " + argv['inv_no'] + ".pdf",
                      pagesize=A4,
                      bottomup=0)
    c.setFont("Times-Bold", 24)
    c.drawImage(p, 2.5 * inch, 0.5 * inch)
    heading = 2 * inch
    c.drawString(L_margin, heading, argv['company_name'])
    c.setFillColor(HexColor('#9558fb'))
    c.rect(5.65 * inch - 15, heading - 20,
           (7.8500000000000005 * inch - 5.65 * inch) + 15, 0.35 * inch, 1, 1)
    c.setFillColor(colors.white)
    c.drawString(5.65 * inch, heading, "Invoice")
    for i in range(4 - len(argv['inv_no'])):
        argv['inv_no'] = "0" + argv['inv_no']
    argv['inv_no'] = "#" + argv['inv_no']
    c.drawRightString(7.8500000000000005 * inch - 15, heading, argv['inv_no'])
    c.setFillColor(colors.black)
    c.setFont("Helvetica", 11)
    c.drawString(5.65 * inch, (heading + 0.35 * inch), "Invoice Date")
    c.drawRightString(7.8500000000000005 * inch, (heading + 0.35 * inch),
                      argv['date'])
    c.setFont("Helvetica", 11)
    DrawString(argv['company_add'], c, L_margin, (heading + 0.5 * inch), 15)
    c.setFont("Times-Bold", 15)
    c.drawString(L_margin,
                 CalucateY((heading + 0.5 * inch), Address, 0.23 * inch),
                 "Bill To :")
    c.setFont("Times-Bold", 16)
    c.drawString(
        L_margin,
        CalucateY((heading + 0.5 * inch), Address, 0.23 * inch) + 0.3 * inch,
        argv['cus_name'])
    hei = CalucateY((heading + 0.5 * inch), Address, 0.23 * inch) + 0.3 * inch
    c.setFont("Helvetica", 11)
    DrawString(argv['cus_add'], c, L_margin, hei + 0.25 * inch, 15)
    ori = (hei + inch, L_margin)
    rowheight = [0.25 * inch]
    columnwidth = [0.35 * inch, 3.5 * inch, 1.1 * inch, 0.9 * inch, 1.5 * inch]
    item = argv['plist']
    if len(item) < 11:
        itemmultiply = 10 - len(item)
        item = item + extra * itemmultiply
    amt = 0
    for i in item:
        if i[4] == "":
            continue
        amt = amt + float(i[4])
    s = Table(c,
              ori,
              no_of_rows=len(item) + 1,
              no_of_column=len(item[0]),
              rowheight=rowheight,
              columnwidth=columnwidth)
    for i in range(5):
        if i == 0:
            lining = N + W + S
        elif i == 4:
            lining = N + E + S
        else:
            lining = N + S
        s.modify(0,
                 i,
                 text=data[i],
                 fontcolour=colors.white,
                 bg=HexColor('#9558fb'),
                 bpad=2 * mm,
                 font=("Helvetica", 11),
                 justify='center',
                 lining=lining)
    for i in range(len(item)):
        las = len(item) - 1
        if i == 0:
            lining = N + E + W
        elif i == las:
            lining = S + E + W
        else:
            lining = E + W
        if i % 2 == 0:
            bg = HexColor('#f2ecfd')
        else:
            bg = HexColor('#e8dcff')
        for t in range(len(item[i])):
            if t == 1:
                justify = 'left'
            elif t == 4 or t == 3:
                justify = 'right'
            else:
                justify = 'center'
            s.modify(i + 1,
                     t,
                     text=item[i][t],
                     fontcolour=colors.black,
                     bpad=2 * mm,
                     font=("Helvetica", 11),
                     justify=justify,
                     lining=lining,
                     bg=bg)
    s.Draw()
    tab2_ori = s.Get_Cor(-1, -2)
    x2, y2 = tab2_ori[0][0]
    w2, h2 = tab2_ori[0][1]
    tab2_ori = [x2, y2 + h2 + 0.2 * inch]
    tab2_ori.reverse()
    cw = [0.9 * inch, 1.5 * inch]
    rh = [0.25 * inch, 0.25 * inch]
    tab = Table(c,
                tab2_ori,
                rowheight=rh,
                columnwidth=cw,
                no_of_rows=2,
                no_of_column=2)
    tab.modify(0,
               0,
               text="SubTotal",
               justify='right',
               bpad=2 * mm,
               font=("Helvetica", 11),
               fontcolour=colors.black)
    tab.modify(1,
               0,
               text="Discount",
               justify='right',
               bpad=2 * mm,
               font=("Helvetica", 11),
               fontcolour=colors.black)
    tab.modify(0,
               1,
               text=str(amt),
               justify='right',
               bpad=2 * mm,
               font=("Helvetica", 11),
               fontcolour=colors.black,
               rightpadding=12 * mm)
    Gtol = argv['Gtol']
    dis = amt - Gtol
    tab.modify(1,
               1,
               text=str(dis),
               justify='right',
               bpad=2 * mm,
               font=("Helvetica", 11),
               fontcolour=colors.black,
               rightpadding=12 * mm)
    tab.Draw()
    c.setFont("Helvetica", 11)
    DrawString(argv['bottom_detail'], c, L_margin, y2 + h2 + 0.40909 * inch,
               15)
    b = sum(columnwidth) + L_margin
    tab2_ori = tab.Get_Cor(-1, -1)
    x2, y2 = tab2_ori[0][0]
    w2, h2 = tab2_ori[0][1]
    c.setFont('Times-Bold', 20)
    c.setFillColor(HexColor('#9558fb'))
    ju = c.stringWidth("GrandTotal  -  " + str(Gtol), 'Times-Bold', 20)
    c.rect((x2 + w2 - 15) - ju - 15, y2 + 0.9 * inch, ju + 30, 0.4 * inch, 1,
           1)
    c.setFillColor(colors.white)
    c.drawRightString(x2 + w2 - 15, y2 + 1.2 * inch,
                      "GrandTotal  -  " + str(Gtol))
    c.setFillColor(colors.black)
    c.setFont("Helvetica", 11)
    if len(item) >= 10:
        Sign = 11 * inch
    else:
        Sign = 9.5 * inch
    c.drawString(L_margin, Sign, "Customer Signature")
    c.drawRightString(b - 0.12 * inch, Sign, "Signature")

    c.showPage()
    c.save()

    os.startfile("Invoice\Invoice   " + inv_no + ".pdf")