コード例 #1
0
ファイル: test.py プロジェクト: svilendobrev/rl2wx
def draw_table(context, pagesize):
    from reportlab.platypus.doctemplate import SimpleDocTemplate
    from reportlab.platypus import Table, TableStyle, Paragraph
    from reportlab.lib import colors
    from canvas import Canvas

    if OUT2PDF:
        from reportlab.pdfgen.canvas import Canvas

        context = "alabala.pdf"

    data = []
    for i in range(3):
        row = []
        for j in range(3):
            row.append(str(i) + str(j) + unicode("bp", "cp1251"))
        data.append(row)

    widths = [20, None, None]
    table = Table(data, colWidths=widths)

    if 1:
        style = TableStyle(())

        from reportlab.pdfbase.ttfonts import TTFont
        from reportlab.pdfbase import pdfmetrics
        from reportlab import rl_config

        rl_config.T1SearchPath.insert(0, "/usr/share/fonts/X11/Type1/")
        pdfmetrics.dumpFontData()

        # pdfmetrics.registerFont( TTFont('TIMES', 'Verdana.ttf'))

        fontname = "CharterBT-Roman"
        pdfmetrics.findFontAndRegister(fontname)

        style.add("FONTNAME", (0, 0), (-1, -1), fontname, 84)
        style.add("FONTSIZE", (0, 0), (-1, -1), 24)
        style.add("LEADING", (0, 0), (-1, -1), 24)
        style.add("BOX", (0, 0), (-1, -1), 0.25, colors.black)
        style.add("INNERGRID", (0, 0), (-1, -1), 0.25, colors.black)
        # style.add('LINEABOVE', (0,1), (-1,-1), 0.25, colors.black)
        style.add("LINEBELOW", (0, -1), (-1, -1), 2, colors.green)

        style.add("LEFTPADDING", (0, 0), (-1, -1), 0)
        style.add("RIGHTPADDING", (0, 0), (-1, -1), 0)
        style.add("BOTTOMPADDING", (0, 0), (-1, -1), 0)
        style.add("TOPPADDING", (0, 0), (-1, -1), 0)

        table.setStyle(style)

    story = 3 * [table]

    doc = SimpleDocTemplate(filename=context, pagesize=pagesize)
    if not OUT2PDF:
        doc.setPageCallBack(getattr(context, "new_page", None))
    doc.build(story, canvasmaker=Canvas)
コード例 #2
0
ファイル: rl.py プロジェクト: svilendobrev/rl2wx
def coords(canvas):
    from reportlab.lib.units import inch, mm
    from reportlab.lib.colors import pink, black, red, blue, green
    from reportlab.pdfbase import pdfmetrics

    c = canvas
    #c.grid([inch, 2*inch, 3*inch, 4*inch], [0.5*inch, inch, 1.5*inch, 2*inch, 2.5*inch])

    x1 = 10*mm
    x2 = x1 + 30*mm

    c.setLineWidth( 0.1)

    for i in range( 8, 20*4,2):
        c.setStrokeColor( i % 8 and green or red)
        y = i * mm
        c.line( x1, y, x2, y)
    y=20*4*mm
    c.setStrokeColor( green)
    c.line( 0, y, x2+5, y)
    c.setStrokeColor( black)
    c.line( 0, 0, 130, 0)

    from reportlab import rl_config
    rl_config.T1SearchPath.insert( 0, '/usr/share/fonts/X11/Type1/')
    pdfmetrics.dumpFontData()
    fontname = 'CharterBT-Roman'
    pdfmetrics.findFontAndRegister( fontname)
    fontsize = 190
    c.setFont( fontname, fontsize)

    c.drawString( 0*mm, 0, 'Ap12345')

    if 0:
        point = inch / 72.0

        text = 'Aa'
        width = canvas.stringWidth( 'A', font, fontsize)

        y1 = 10*mm
        from math import sqrt
        height = sqrt(fontsize**2 - width**2)
        y2 = y1 + height

        c.setStrokeColor( red)
        coords = [ mm * i for i in range(10,10+int(height)) ]
        c.grid( coords, coords)

        c.setStrokeColor( green)
        c.line( 10*mm, y1, 300*mm, y1)
        c.line( 10*mm, y2, 300*mm, y2)
        c.setFont( font, fontsize)

        c.setStrokeColor( black)
        c.drawString( 10*mm, y1, text)
コード例 #3
0
def pisaDocument(
    src, 
    dest, 
    path = None, 
    link_callback = None,
    debug = 0,
    show_error_as_pdf = False, 
    default_css = None,
    **kw):

    try:       
        c = pisaContext(
            path, 
            debug = debug)
        c.pathCallback = link_callback
        
        # XXX Handle strings and files    
        if type(src) in types.StringTypes:
            src = cStringIO.StringIO(src)
        
        if default_css is None:
            default_css = DEFAULT_CSS
        
        pisaParser(src, c, default_css)
    
        if 0:
            import reportlab.pdfbase.pdfmetrics as pm
            pm.dumpFontData()
        
        # Avoid empty pages
        if not c.story:
            c.addPara(force=True)
    
        # Remove anchors if they do not exist (because of a bug in Reportlab)
        for frag, anchor in c.anchorFrag:       
            if anchor not in c.anchorName:                        
                frag.link = None
                
        out = cStringIO.StringIO()
        
        doc = PmlBaseDoc(
            out,
            pagesize = c.pageSize,
            author = c.meta["author"].strip(),
            subject = c.meta["subject"].strip(),
            keywords = [x.strip() for x in c.meta["keywords"].strip().split(",") if x],
            title = c.meta["title"].strip(),
            showBoundary = 0,
            allowSplitting = 1)
    
        # XXX It is not possible to access PDF info, because it is private in canvas
        # doc.info.producer = "pisa <http://www.holtwick.it>" 
               
        if c.templateList.has_key("body"):
            body = c.templateList["body"]
            del c.templateList["body"]
        else:
            x, y, w, h = getBox("1cm 1cm -1cm -1cm", c.pageSize)    
            body = PmlPageTemplate(
                id="body",
                frames=[
                    Frame(x, y, w, h, 
                        id = "body",
                        leftPadding = 0,
                        rightPadding = 0,
                        bottomPadding = 0,
                        topPadding = 0)],
                pagesize = c.pageSize)
    
        # print body.frames
    
        # print [body] + c.templateList.values()
        doc.addPageTemplates([body] + c.templateList.values())             
        doc.build(c.story)    
        
        # Add watermarks
        if pyPdf:             
            # print c.pisaBackgroundList   
            for bgouter in c.pisaBackgroundList:                    
                # If we have at least one background, then lets do it
                if bgouter:
                    istream = out 
                    # istream.seek(2,0) #cStringIO.StringIO(data)
                    try:                            
                        output = pyPdf.PdfFileWriter()
                        input1 = pyPdf.PdfFileReader(istream)
                        ctr = 0                        
                        for bg in c.pisaBackgroundList:                                
                            page = input1.getPage(ctr)
                            if bg:
                                if os.path.exists(bg):                    
                                    # print "BACK", bg                
                                    bginput = pyPdf.PdfFileReader(open(bg, "rb"))
                                    # page.mergePage(bginput.getPage(0))
                                    pagebg = bginput.getPage(0)
                                    pagebg.mergePage(page)
                                    page = pagebg 
                                else:
                                    c.warning("Background PDF %s doesn't exist." % bg)
                            output.addPage(page)
                            ctr += 1
                        out = cStringIO.StringIO()
                        output.write(out)
                        # data = sout.getvalue()
                    except Exception, e:
                        c.error("Exception: %s" % str(e))
                    # istream.close()
                # Found a background? So leave loop after first occurence
                break
        else:
コード例 #4
0
def pisaDocument(src,
                 dest,
                 path=None,
                 link_callback=None,
                 debug=0,
                 show_error_as_pdf=False,
                 default_css=None,
                 **kw):

    try:
        c = pisaContext(path, debug=debug)
        c.pathCallback = link_callback

        # XXX Handle strings and files
        if type(src) in types.StringTypes:
            src = cStringIO.StringIO(src)

        if default_css is None:
            default_css = DEFAULT_CSS

        pisaParser(src, c, default_css)

        if 0:
            import reportlab.pdfbase.pdfmetrics as pm
            pm.dumpFontData()

        # Avoid empty pages
        if not c.story:
            c.addPara(force=True)

        # Remove anchors if they do not exist (because of a bug in Reportlab)
        for frag, anchor in c.anchorFrag:
            if anchor not in c.anchorName:
                frag.link = None

        out = cStringIO.StringIO()

        doc = PmlBaseDoc(out,
                         pagesize=c.pageSize,
                         author=c.meta["author"].strip(),
                         subject=c.meta["subject"].strip(),
                         keywords=[
                             x.strip()
                             for x in c.meta["keywords"].strip().split(",")
                             if x
                         ],
                         title=c.meta["title"].strip(),
                         showBoundary=0,
                         allowSplitting=1)

        # XXX It is not possible to access PDF info, because it is private in canvas
        # doc.info.producer = "pisa <http://www.holtwick.it>"

        if c.templateList.has_key("body"):
            body = c.templateList["body"]
            del c.templateList["body"]
        else:
            x, y, w, h = getBox("1cm 1cm -1cm -1cm", c.pageSize)
            body = PmlPageTemplate(id="body",
                                   frames=[
                                       Frame(x,
                                             y,
                                             w,
                                             h,
                                             id="body",
                                             leftPadding=0,
                                             rightPadding=0,
                                             bottomPadding=0,
                                             topPadding=0)
                                   ],
                                   pagesize=c.pageSize)

        # print body.frames

        # print [body] + c.templateList.values()
        doc.addPageTemplates([body] + c.templateList.values())
        doc.build(c.story)

        # Add watermarks
        if pyPdf:
            # print c.pisaBackgroundList
            for bgouter in c.pisaBackgroundList:
                # If we have at least one background, then lets do it
                if bgouter:
                    istream = out
                    # istream.seek(2,0) #cStringIO.StringIO(data)
                    try:
                        output = pyPdf.PdfFileWriter()
                        input1 = pyPdf.PdfFileReader(istream)
                        ctr = 0
                        for bg in c.pisaBackgroundList:
                            page = input1.getPage(ctr)
                            if bg:
                                if os.path.exists(bg):
                                    # print "BACK", bg
                                    bginput = pyPdf.PdfFileReader(
                                        open(bg, "rb"))
                                    # page.mergePage(bginput.getPage(0))
                                    pagebg = bginput.getPage(0)
                                    pagebg.mergePage(page)
                                    page = pagebg
                                else:
                                    c.warning(
                                        "Background PDF %s doesn't exist." %
                                        bg)
                            output.addPage(page)
                            ctr += 1
                        out = cStringIO.StringIO()
                        output.write(out)
                        # data = sout.getvalue()
                    except Exception, e:
                        c.error("Exception: %s" % str(e))
                    # istream.close()
                # Found a background? So leave loop after first occurence
                break
        else: