Okay so the downloaded code the pdf works but the normal HTML view doesn't.
invalid view (default/report.html) On Thu, Mar 15, 2012 at 11:48 AM, Alan Etkin <[email protected]> wrote: > I should check the code in the book, but I used a controller example > that should be available in the book's support files at > http://www.packtpub.com/support and it worked for my environment: > > Python 2.6.5 > Mandriva GNU/Linux 2010 > web2py (last mercurial version) > > A complete working installer can be downloaded from the same url (in > the apps folder) > > On Mar 15, 2:54 pm, Bruce Wade <[email protected]> wrote: > > Fresh blank version of web2py, in default controller: > > > > def report(): > > import os > > response.title = "web2py sample report" > > > > # include a chart from google chart > > url = " > http://chart.apis.google.com/chart?cht=p3&chd=t:60,40&chs=500x200&ch1...World&.png > > " > > chart = IMG(_src=url, _width="250", _height="100") > > > > # create a small table with some data: > > rows = [THEAD(TR(TH("Key", _width="70%"), > > TH("Value", _width="30%"))), > > TBODY(TR(TD("Hello"), TD("60")), > > TR(TD("World"), TD("40")))] > > > > table = TABLE(*rows, _border="0", _align="center", _width="50%") > > > > if request.extension == "pdf": > > from gluon.contrib.pyfpdf import FPDF, HTMLMixin > > > > # create a custom class with the required functionalities > > class MyFPDF(FPDF, HTMLMixin): > > def header(self): > > "hook to draw custom page header (logo and title)" > > > > # remember to copy logo_pb.png to static/images (and > remove > > alpha channel) > > #logo = os.path.join(request.folder, "static", "images", > > "logo_pb.png") > > #self.image(logo, 10, 8, 33) > > self.set_font("Arial", "B", 15) > > self.cell(65) # padding > > self.cell(60, 10, response.title, 1, 0, 'C') > > self.ln(20) > > > > def footer(self): > > "hook to draw custom page footer (printing page numbers)" > > self.set_y(-15) > > self.set_font('Arial', 'I', 8) > > txt = 'Page %s of %s' % (self.page_no(), > > self.alias_nb_pages()) > > self.cell(0, 10, txt, 0, 0, 'C') > > pdf = MyFPDF() > > > > # create a page and serialize/render HTML objects > > pdf.add_page() > > pdf.write_html(table.xml()) > > #pdf.write_html(CENTER(chart).xml()) > > > > # prepare PDF to download: > > response.headers['Content-Type'] = 'application/pdf' > > return pdf.output(dest='S') > > > > # else normal html view > > return dict(chart=chart, table=table) > > > > I thought it was the logo so I commented it out, but still the exact same > > error. > > > > Looks like it is failing here: > > def _parsepng(self, name): > > #Extract info from a PNG file > > if name.startswith("http://") or name.startswith("https://"): > > import urllib > > f = urllib.urlopen(name) > > > > Which I am not sure why considering there is no PNG in my code so I guess > > it is doing something behind the scene. I even commented out the chart > line > > so there should be no image issues. > > > > > > > > > > > > > > > > > > > > On Thu, Mar 15, 2012 at 10:49 AM, Bruce Wade <[email protected]> > wrote: > > > Install what app? I am following the instructions to create a PDF. > > > > > On Thu, Mar 15, 2012 at 10:47 AM, Alan Etkin <[email protected]> > wrote: > > > > >> How are you running the code? Did you install the app from the apps > > >> folder? > > > > >> On Mar 15, 2:29 pm, Bruce Wade <[email protected]> wrote: > > >> > Chapter 10: Creating PDF reports > > > > >> > Error: > > > > >> > Traceback (most recent call last): > > >> > File > > >> > "/home/bruce/Development/bossteam_dev/projects/yaw_dev/gluon/restricted.py", > > >> > line 204, in restricted > > >> > exec ccode in environment > > >> > File > > >> > "/home/bruce/Development/bossteam_dev/projects/yaw_dev/applications/welcome/views/generic.pdf", > > >> > line 9, in <module> > > >> > pass > > >> > File > > >> > "/home/bruce/Development/bossteam_dev/projects/yaw_dev/gluon/contrib/generics.py", > > >> > line 63, in pdf_from_html > > >> > return pyfpdf_from_html(html) > > >> > File > > >> > "/home/bruce/Development/bossteam_dev/projects/yaw_dev/gluon/contrib/generics.py", > > >> > line 55, in pyfpdf_from_html > > >> > pdf.write_html(html,image_map=image_map) > > >> > File > > >> > "/home/bruce/Development/bossteam_dev/projects/yaw_dev/gluon/contrib/pyfpdf/html.py", > > >> > line 388, in write_html > > >> > h2p.feed(text) > > >> > File "/usr/lib/python2.7/HTMLParser.py", line 109, in feed > > >> > self.goahead(0) > > >> > File "/usr/lib/python2.7/HTMLParser.py", line 151, in goahead > > >> > k = self.parse_starttag(i) > > >> > File "/usr/lib/python2.7/HTMLParser.py", line 272, in > parse_starttag > > >> > self.handle_startendtag(tag, attrs) > > >> > File "/usr/lib/python2.7/HTMLParser.py", line 334, in > > >> handle_startendtag > > >> > self.handle_starttag(tag, attrs) > > >> > File > > >> > "/home/bruce/Development/bossteam_dev/projects/yaw_dev/gluon/contrib/pyfpdf/html.py", > > >> > line 262, in handle_starttag > > >> > x, y, w, h, link=self.href) > > >> > File > > >> > "/home/bruce/Development/bossteam_dev/projects/yaw_dev/gluon/contrib/pyfpdf/fpdf.py", > > >> > line 807, in image > > >> > info=self._parsepng(name) > > >> > File > > >> > "/home/bruce/Development/bossteam_dev/projects/yaw_dev/gluon/contrib/pyfpdf/fpdf.py", > > >> > line 1296, in _parsepng > > >> > f = urllib.urlopen(name) > > >> > File "/usr/lib/python2.7/urllib.py", line 84, in urlopen > > >> > return opener.open(url) > > >> > File "/usr/lib/python2.7/urllib.py", line 205, in open > > >> > return getattr(self, name)(url) > > >> > File "/usr/lib/python2.7/urllib.py", line 331, in open_http > > >> > h = httplib.HTTP(host) > > >> > File "/usr/lib/python2.7/httplib.py", line 1061, in __init__ > > >> > self._setup(self._connection_class(host, port, strict)) > > >> > File "/usr/lib/python2.7/httplib.py", line 693, in __init__ > > >> > self._set_hostport(host, port) > > >> > File "/usr/lib/python2.7/httplib.py", line 718, in _set_hostport > > >> > raise InvalidURL("nonnumeric port: '%s'" % host[i+1:]) > > >> > InvalidURL: nonnumeric port: '' > > > > >> > I also found this argument list to look very strange, look at the > host > > >> > string, plus port is NoneFunction argument list > > > > >> > (self=<httplib.HTTPConnection instance>, host='127.0.0.1:8000 > http:', > > >> > port=None) > > > > >> > -- > > >> > -- > > >> > Regards, > > >> > Bruce Wadehttp:// > > >> > ca.linkedin.com/in/brucelwadehttp://www.wadecybertech.comhttp://www.warplydesigned.comhttp://www.f. > .. > > > > > -- > > > -- > > > Regards, > > > Bruce Wade > > >http://ca.linkedin.com/in/brucelwade > > >http://www.wadecybertech.com > > >http://www.warplydesigned.com > > >http://www.fitnessfriendsfinder.com > > > > -- > > -- > > Regards, > > Bruce Wadehttp:// > ca.linkedin.com/in/brucelwadehttp://www.wadecybertech.comhttp://www.warplydesigned.comhttp://www.fitnessfriendsfinder.com > -- -- Regards, Bruce Wade http://ca.linkedin.com/in/brucelwade http://www.wadecybertech.com http://www.warplydesigned.com http://www.fitnessfriendsfinder.com

