Ok thanks I will try that, just looking for the easiest solution because we need to generate a lot of invoices.
On Thu, Mar 15, 2012 at 4:57 PM, Massimo Di Pierro < massimo.dipie...@gmail.com> wrote: > I remind you that web2py comes with markmin2pdf too. It should work with > most utf8 characters. > > > On Thursday, 15 March 2012 17:52:24 UTC-5, Detectedstealth wrote: >> >> Thanks I will have to look into it, or possibly just use reportlab. >> >> On Thu, Mar 15, 2012 at 2:17 PM, Alan Etkin <spame...@gmail.com> wrote: >> >>> I belive Chinese is not ported to pypdf (the php software supported it >>> via a special class). AFAIK the chinese fonts BIG5 or GB must be >>> installed in the server. Maybe you could start an issue for adding it >>> in the project page. >>> >>> http://code.google.com/p/**pyfpdf/ <http://code.google.com/p/pyfpdf/> >>> >>> On 15 mar, 17:53, Bruce Wade <bruce.w...@gmail.com> wrote: >>> > Does pyfpdf support Chinese yet? I tried using Chinese by the >>> characters >>> > were not rendered in Chinese. Or do I need to set some kind of font. >>> > >>> > >>> > >>> > >>> > >>> > >>> > >>> > >>> > >>> > On Thu, Mar 15, 2012 at 1:35 PM, Alan Etkin <spame...@gmail.com> >>> wrote: >>> > > That error page is likely to be sent because of the new generic view >>> > > security rule. I'm using the response.generic_patterns = ["*",] in >>> the >>> > > controller file and it works well (the sentence wasn't included in >>> the >>> > > original file). >>> > >>> > > On 15 mar, 17:15, Bruce Wade <bruce.w...@gmail.com> wrote: >>> > > > 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 <spame...@gmail.com> >>> 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/**supportandit<http://www.packtpub.com/supportandit>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 <bruce.w...@gmail.com> 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<http://chart.apis.google.com/chart?cht=p3&chd=t:60,40&chs=500x200&ch1> >>> . >>> > > .. >>> > > > > > " >>> > > > > > 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 < >>> bruce.w...@gmail.com> >>> > > > > wrote: >>> > > > > > > Install what app? I am following the instructions to create >>> a PDF. >>> > >>> > > > > > > On Thu, Mar 15, 2012 at 10:47 AM, Alan Etkin < >>> spame...@gmail.com> >>> > > > > wrote: >>> > >>> > > > > > >> How are you running the code? Did you install the app from >>> the >>> > > apps >>> > > > > > >> folder? >>> > >>> > > > > > >> On Mar 15, 2:29 pm, Bruce Wade <bruce.w...@gmail.com> >>> 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<http://ca.linkedin.com/in/brucelwadehttp://www.wadecybertech.comhttp://www.warplydesigned.comhttp://www.f> >>> > > . >>> > > > > .. >>> > >>> > > > > > > -- >>> > > > > > > -- >>> > > > > > > Regards, >>> > > > > > > Bruce Wade >>> > > > > > >http://ca.linkedin.com/in/**brucelwade<http://ca.linkedin.com/in/brucelwade> >>> > > > > > >http://www.wadecybertech.com >>> > > > > > >http://www.warplydesigned.com >>> > > > > > >http://www.**fitnessfriendsfinder.com<http://www.fitnessfriendsfinder.com> >>> > >>> > > > > > -- >>> > > > > > -- >>> > > > > > Regards, >>> > > > > > Bruce Wadehttp:// >>> > >>> > > ca.linkedin.com/in/**brucelwadehttp://www.** >>> wadecybertech.comhttp://www.**warplydesigned.comhttp://www.f<http://ca.linkedin.com/in/brucelwadehttp://www.wadecybertech.comhttp://www.warplydesigned.comhttp://www.f> >>> **. >>> > > .. >>> > >>> > > > -- >>> > > > -- >>> > > > Regards, >>> > > > Bruce Wadehttp:// >>> > > ca.linkedin.com/in/**brucelwadehttp://www.** >>> wadecybertech.comhttp://www.**warplydesigned.comhttp://www.**f.<http://ca.linkedin.com/in/brucelwadehttp://www.wadecybertech.comhttp://www.warplydesigned.comhttp://www.f.> >>> .. >>> > >>> > -- >>> > -- >>> > Regards, >>> > Bruce Wadehttp://ca.linkedin.com/in/**brucelwadehttp://www.** >>> wadecybertech.comhttp://www.**warplydesigned.comhttp://www.** >>> fitnessfriendsfinder.com<http://ca.linkedin.com/in/brucelwadehttp://www.wadecybertech.comhttp://www.warplydesigned.comhttp://www.fitnessfriendsfinder.com> >>> >> >> >> >> -- >> -- >> Regards, >> Bruce Wade >> http://ca.linkedin.com/in/**brucelwade<http://ca.linkedin.com/in/brucelwade> >> http://www.wadecybertech.com >> http://www.warplydesigned.com >> http://www.**fitnessfriendsfinder.com<http://www.fitnessfriendsfinder.com> >> > -- -- Regards, Bruce Wade http://ca.linkedin.com/in/brucelwade http://www.wadecybertech.com http://www.warplydesigned.com http://www.fitnessfriendsfinder.com