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)
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)
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:
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: