Esempio n. 1
0
    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
Esempio n. 2
0
 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)
Esempio n. 3
0
    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
Esempio n. 4
0
    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
Esempio n. 5
0
 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
Esempio n. 6
0
 def onIniting(self, request_args=None, request_kwargs=None):
     self.builder = GnrHtmlBuilder(srcfactory=self.srcfactory)
Esempio n. 7
0
                    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')