Thanks Mariano & Alan. Adding width to TD or TH tags did resolve the
problem using the original html.py file without the fix implemented.*(Mariano,
I tried installing your script and at this point it still fails when no
width is specified. Another little issue, os.startfile() seems to be a
Windows-only method.)*
So now, things are operational again. Looking forward to Mariano's html.py
improvements.
On Sunday, July 15, 2012 3:04:04 PM UTC-4, Mariano Reingart wrote:
>
> On Sat, Jul 14, 2012 at 5:06 PM, thinkwell wrote:
> > Hello everyone,
> >
> > I'm experimenting with pyfpdf with HTML formatting, but it's not going
> so
> > well. Is a bit buggy. For example, this code generates a KeyError:
> 'width'.
> >
> > {from gluon.contrib.pyfpdf import FPDF, HTMLMixin
> > from gluon.html import *
> >
> > header = HEAD('html2pdf', _align='center')
> >
> > pets = TABLE(_border=1, _width="100%")
> > pets.append(TR(TH('Dogs'),TH("Cats"),TH('Snakes')))
> > pets.append(TR('Collies','Tabby','Python'))
> > pets.append(TR('Akitas', 'Persian', 'Garter'))
> >
> >
> > class MyFPDF(FPDF, HTMLMixin):
> > pass
> >
> > html2 = pets.xml()
> >
> > print html2
> >
> > pdf=MyFPDF()
> > #First page
> > pdf.add_page()
> > pdf.write_html(html2)
> > pdf.output('html2.pdf','F')}
> >
> > I
> > {/usr/lib/python2.7/HTMLParser.pyc in goahead(self, end)
> > 156 if startswith('<', i):
> > 157 if starttagopen.match(rawdata, i): # < + letter
> > --> 158 k = self.parse_starttag(i)
> > 159 elif startswith("</", i):
> > 160 k = self.parse_endtag(i)
> >
> > /usr/lib/python2.7/HTMLParser.pyc in parse_starttag(self, i)
> > 322 self.handle_startendtag(tag, attrs)
> > 323 else:
> > --> 324 self.handle_starttag(tag, attrs)
> > 325 if tag in self.CDATA_CONTENT_ELEMENTS:
> > 326 self.set_cdata_mode(tag)
> >
> > /home/dave/PythonTraining/web2py/gluon/contrib/pyfpdf/html.pyc in
> > handle_starttag(self, tag, attrs)
> > 245 self.td = dict([(k.lower(), v) for k,v in
> > attrs.items()])
> > 246 self.th = True
> > --> 247 if self.td.has_key('width'):
> > 248 self.table_col_width.append(self.td['width'])
> > 249 if tag=='thead':
> >
> > KeyError: 'width'
> > }
> >
> > I tried changing line 247 to -
> > {if self.td.has_key('width'):}
> >
> > But the KeyError is still getting raised. :-(
>
> You need to restart the webservice to apply changes in gluon
>
> > Is generating reports from HTML not recommended? In addition to this
> > KeyError, I've frequently gotten "list out of range" exceptions raised
> as
> > well, on what seem like the most vanilla of experiments.
>
> Current html2pdf conversion will not work properly if you don't use
> explicit widths for table cells.
> You can see the supported tags and a working example here:
>
> http://code.google.com/p/pyfpdf/wiki/WriteHTML
>
> Actually, I'm working in a better html2pdf render, using helpers and
> web2pyHTMLParser:
>
> http://code.google.com/p/pyfpdf/source/browse/fpdf/html.py
>
> Hopefully, web2py helpers will improve the rendering mechanisms
>
> Best regards,
>
> Mariano Reingart
> http://www.sistemasagiles.com.ar
> http://reingart.blogspot.com
>