def __call__(self, record=None, filepath=None, folder=None, filename=None, hideTemplate=False, rebuild=True, htmlContent=None, page_debug=None, is_draft=None, **kwargs): """Return the html corresponding to a given record. The html can be loaded from a cached document or created as new if still doesn't exist""" if record is None: record = Bag() self.htmlContent = htmlContent self._data = Bag() self.is_draft = is_draft self.record = record self.setData('record', record) #compatibility for k, v in kwargs.items(): self.setData(k, v) if not filepath: folder = folder or tempfile.mkdtemp() filepath = os.path.join(folder, filename or self.outputDocName(ext='html')) self.filepath = filepath if not rebuild: with open(self.filepath, 'r') as f: result = f.read() return result self.templates = kwargs.pop('templates', self.templates) self.letterhead_id = kwargs.pop('letterhead_id', self.letterhead_id) self.print_button = kwargs.pop('print_button', self.print_button) if self.onRecordLoaded() is False: return False self.showTemplate(hideTemplate is not True) self.htmlTemplate = None self.prepareTemplates() self.page_debug = page_debug or self.page_debug self.builder = GnrHtmlBuilder( page_width=self.page_width, page_height=self.page_height, page_margin_top=self.page_margin_top, page_margin_bottom=self.page_margin_bottom, page_margin_left=self.page_margin_left, page_margin_right=self.page_margin_right, page_debug=self.page_debug, print_button=self.print_button, htmlTemplate=self.htmlTemplate, css_requires=self.get_css_requires(), showTemplateContent=self.showTemplateContent, parent=self) result = self.createHtml(filepath=self.filepath, body_attributes=self.body_attributes) return result
def init(self, **kwargs): self.maintable = self.maintable or self.resource_table self.maintable_obj = self.db.table(self.maintable) if self.templates: self.htmlTemplate = self.db.table('adm.htmltemplate').getTemplate(self.templates) self.builder = GnrHtmlBuilder(page_width=self.page_width, page_height=self.page_height, page_margin_top=self.page_margin_top, page_margin_bottom=self.page_margin_bottom, page_margin_left=self.page_margin_left, page_margin_right=self.page_margin_right, page_debug=self.page_debug, print_button=self.print_button, htmlTemplate=self.htmlTemplate)
def __call__(self, record=None, filepath=None, rebuild=False, dontSave=False, pdf=False, runKwargs=None, showTemplateContent=None, **kwargs): """This method returns the html corresponding to a given record. the html can be loaded from a cached document or created if still doesn't exist. """ if not record: return False self.showTemplateContent = showTemplateContent or True loadResult = self.loadRecord(record, **kwargs) if loadResult == False: return False self.htmlTemplate = None if self.templates: self.htmlTemplate = self.db.table('adm.htmltemplate').getTemplate(self.templates) self.page_height = self.page_height or self.htmlTemplate['main.page.height'] or 280 self.page_width = self.page_width or self.htmlTemplate['main.page.width'] or 200 self.page_header_height = self.page_header_height or self.htmlTemplate['layout.top?height'] or 0 self.page_footer_height = self.page_footer_height or self.htmlTemplate['layout.bottom?height'] or 0 self.page_leftbar_width = self.page_leftbar_width or self.htmlTemplate['layout.left?width'] or 0 self.page_rightbar_width = self.page_leftbar_width or self.htmlTemplate['layout.right?width'] or 0 self.page_margin_top = self.page_margin_top or self.htmlTemplate['main.page.top'] or 0 self.page_margin_left = self.page_margin_left or self.htmlTemplate['main.page.left'] or 0 self.page_margin_right = self.page_margin_right or self.htmlTemplate['main.page.right'] or 0 self.page_margin_bottom = self.page_margin_bottom or self.htmlTemplate['main.page.bottom'] or 0 self.builder = GnrHtmlBuilder(page_width=self.page_width, page_height=self.page_height, page_margin_top=self.page_margin_top, page_margin_bottom=self.page_margin_bottom, page_margin_left=self.page_margin_left, page_margin_right=self.page_margin_right, page_debug=self.page_debug, print_button=self.print_button, htmlTemplate=self.htmlTemplate, showTemplateContent=self.showTemplateContent) #if not (dontSave or pdf): self.filepath = filepath or os.path.join(self.hmtlFolderPath(), self.outputDocName(ext='html')) #else: # self.filepath = None # if self.page_height<self.page_width: self.orientation='Landscape' else: self.orientation='Portrait' if rebuild or not os.path.isfile(self.filepath): html = self.createHtml(filepath=self.filepath, **kwargs) else: with open(self.filepath, 'r') as f: html = f.read() if pdf: temp = tempfile.NamedTemporaryFile(suffix='.pdf') self.page.getService('print').htmlToPdf(self.filepath, temp.name, orientation=self.orientation) with open(temp.name, 'rb') as f: html = f.read() self.onRecordExit(self.getData('record')) return html
def getHtmlBuilder(self, letterhead_pkeys=None): """Prepare the layout template :param tpl: the template""" letterhead_pkeys = letterhead_pkeys.split(',') if isinstance( letterhead_pkeys, basestring) else letterhead_pkeys first_letterhead = letterhead_pkeys[0] f = self.query(where='$id IN :pk', pk=letterhead_pkeys, bagFields=True).fetchAsDict('id') first_letterhead_record = f[first_letterhead] if len(letterhead_pkeys) == 1 and first_letterhead_record['based_on']: return self.getHtmlBuilder(self.letterheadChain(first_letterhead)) base_letterhead_bag = Bag() base_letterhead_bag.setItem('layer_0', Bag(first_letterhead_record['data'])) builder = GnrHtmlBuilder(htmlTemplate=base_letterhead_bag) builder.initializeSrc() height = builder.page_height - builder.page_margin_top - builder.page_margin_bottom width = builder.page_width - builder.page_margin_left - builder.page_margin_right #page = builder.body.div(height='%imm' %builder.page_height,width='%imm' %builder.page_width, # position='relative',_class='letterhead_page') page = builder.body.div(style="""position:relative; width:%smm; height:%smm; top:0mm; left:0mm; """ % (builder.page_width, builder.page_height), _class='letterhead_page') builder.letterhead_root = page.div( style="""position:absolute; top:%imm; left:%imm; right:%imm; bottom:%imm;""" % (builder.page_margin_top, builder.page_margin_left, builder.page_margin_right, builder.page_margin_bottom)) for i, pkey in enumerate(letterhead_pkeys): regions = self.letterhead_layer(builder, Bag(f[pkey]['data']), width=width, height=height, count=i) builder._regions = regions regions['center_center'].attributes['content_node'] = 't' return builder
def print_tutorial_content(self,record_id=None,**kwargs): builder = GnrHtmlBuilder(page_height=297, page_width=21, page_margin_top=5, page_margin_left=5) builder.initializeSrc() builder.styleForLayout() data = Bag() if self.print_table: if self.record_mode: if record_id: data = self.db.table(self.print_table).record(pkey=record_id).output('bag') else: data = self.db.table(self.print_table).query().selection().output('records') self.printContent(builder.body,data=data) result = Bag() result['htmlsource'] = builder.toHtml() builder.toPdf(self.site.getStaticPath('page:testpdf','preview.pdf',autocreate=-1)) result['pdfsrc'] = self.site.getStaticUrl('page:testpdf','preview.pdf') return result
def onIniting(self, request_args=None, request_kwargs=None): self.builder = GnrHtmlBuilder(srcfactory=self.srcfactory)
top=5, left=5, border_width=0.3, border_color='grey', border_style='solid') headers_row = l.row(height=10) headers_row.cell('Sigla', width=20, style='text-align:center; font-weight:bold;') headers_row.cell('Nome', style='text-indent:10mm; font-weight:bold;') for pr in province: r = l.row(height=10) r.cell(pr['sigla'], width=20, style='text-align:center;') r.cell(pr['nome'], style='text-indent:10mm;') if __name__ == '__main__': builder = GnrHtmlBuilder(page_height=297, page_width=21, page_margin_top=5, page_margin_left=5) builder.initializeSrc() builder.styleForLayout() example_1(builder.body) builder.toHtml('/Users/saverioporcari/esempi_stampa/example.html') builder.toPdf('/Users/saverioporcari/esempi_stampa/example.pdf')