FattView/fpdf/tests/cover/test_issue33.py


Home Back

# -*- coding: utf-8 -*-

"Test issue 33 (Cannot import GIF files that don't have transparency)"

#PyFPDF-cover-test:format=PDF
#PyFPDF-cover-test:fn=issue_33.pdf
#PyFPDF-cover-test:hash=be95c7ef3a5b14b5a54a52f7eaf3a9e4
#PyFPDF-cover-test:2to3=no
#PyFPDF-cover-test:pil=yes

import common
from fpdf import FPDF

import os, sys, tempfile
try:
    try:
        import Image
    except:
        from PIL import Image
except ImportError:
    Image = None


def genbar():
    # bg
    bg = Image.new("L", (112, 1), 1)
    bg = bg.resize((112, 11))
    # stripes
    vbarnum = [0x4F43484B, 0xEE90D642, 0xF11A2735, 0xD71A]
    vbar = Image.new("L", (112, 1), 1)
    pix = vbar.load()
    pos = 0
    for b in vbarnum:
        for i in range(32):
            pix[pos, 0] = 0 if (b & 1) else 1
            b = b >> 1
            pos += 1
            if pos >= 112: break    
    vbar = vbar.resize((112, 31), Image.NEAREST)
    # digit
    dignum = [0x398, 0x6dc, 0x61a, 0x31b, 0x1bf, 0x6d8, 0x7d8]
    dbar = Image.new("L", (16, 7), 1)
    pix = dbar.load()
    pos = 0
    ypos = 0
    for b in dignum:
        for i in range(16):
            pix[pos, ypos] = 0 if (b & 1) else 1
            b = b >> 1
            pos += 1
        ypos += 1
        pos = 0
    # result
    bar = Image.new("L", (114, 44), 2)
    bar.paste(vbar, (1, 1))
    bar.paste(bg, (1, 32))
    for i in range(4):
        bar.paste(dbar, (35 + i * 12, 34))
    return bar


def dotest(outputname, nostamp):
    plane = genbar()
    palette = (0,0,0, 255,255,255) + (128,128,128)*254
    img = Image.fromstring("P", plane.size, plane.tostring())
    img.putpalette(palette)

    f = tempfile.NamedTemporaryFile(delete = False, suffix = ".gif")
    gif1 = f.name
    f.close()
    f = tempfile.NamedTemporaryFile(delete = False, suffix = ".gif")
    gif2 = f.name
    f.close()

    img.save(gif1, "GIF", optimize = 0)
    img.save(gif2, "GIF", transparency = 1, optimize = 0)

    pdf = FPDF()
    if nostamp:
        pdf._putinfo = lambda: common.test_putinfo(pdf)
    pdf.add_page()
    pdf.set_font('Arial', '', 16)
    pdf.write(8, "Transparency")
    pdf.ln()
    pdf.write(8, "    Transparency")
    pdf.ln()
    pdf.write(8, "        Transparency")
    pdf.ln()
    pdf.image(gif1, x = 15, y = 15)

    pdf.write(8, "Transparency")
    pdf.ln()
    pdf.write(8, "    Transparency")
    pdf.ln()
    pdf.write(8, "        Transparency")
    pdf.ln()
    pdf.image(gif2, x = 15, y = 39)

    pdf.output(outputname, 'F')

    os.unlink(gif1)
    os.unlink(gif2)
    
def main():
    si = common.read_cover_info(__file__)
    da = common.parse_test_args(sys.argv, si["fn"])
    if not common.check_env(si, da):
        return
    dotest(da["fn"], da["autotest"] or da["check"])
    common.check_result(si, da)
    
if __name__ == "__main__":
    main()


Powered by Code, a simple repository browser by Fabio Di Matteo