Hi, I have tried again to generate a pdf file from an htlm file with someunicode characters. There is my test program. It's a simplified version, in the original program there is a lot of additional test lines.
def pp(): from gluon.contrib.pyfpdf import FPDF, HTMLMixin class MyFPDF(FPDF, HTMLMixin): def header(self): pass def footer(self): pass # 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%") pdf=MyFPDF() pdf.add_font('DejaVu', '', 'DejaVuSansCondensed.ttf', uni=True) pdf.add_page() pdf.set_font('DejaVu','',10) # set font method 1 # table =TAG.font(table, _face="DejaVu") # set font method 2 html = str(XML(table, sanitize=False)) pdf.write_html(html) response.headers['Content-Type'] = "application/pdf" return pdf.output(dest='S') I am sure that the font file is loaded, but it seems that the font is not used. I have tried two methods to change the font, but the results are the same. It doesn't look like Sanserif and every Unicode-Character is printed with every single utf-8 byte. Maybe it's only a small error, but I could not find it. Regards, Martin[image: Inline-Bild 3] 2013/4/30 Jurgis Pralgauskis <jurgis.pralgaus...@gmail.com> > > Which font do you want to include? > > DejaVu - I guess it covers western languages.. (could be withouth > bold/italics to save space) > Another one could be for eastern chars (buy I don't know anything about > them...) > > > I gave you contributor access > > Thanks :) > > > On Wed, May 1, 2013 at 12:22 AM, Mariano Reingart <reing...@gmail.com>wrote: > >> Which font do you want to include? >> >> The font pack is 15MB, I don't know if it could be included with web2py. >> Also, the problem is that no one is complete (you need several fonts >> to cover west / east languages) >> >> https://pyfpdf.googlecode.com/files/fpdf_unicode_font_pack.zip >> >> BTW, thanks for you comments, I gave you contributor access, so you >> can change the docs directly in the wiki if you like so: >> >> https://code.google.com/p/pyfpdf/w/list >> >> If you have any patch, also I'll be happy to review and include it ;-) >> >> Best regards, >> >> Mariano Reingart >> http://www.sistemasagiles.com.ar >> http://reingart.blogspot.com >> >> >> On Sun, Apr 28, 2013 at 7:40 AM, Jurgis Pralgauskis >> <jurgis.pralgaus...@gmail.com> wrote: >> > by the way -- would it be possible to pack at least one ttf with web2py, >> > and in normalize_text , when it notices unicode, >> > automatically add (and set) default ttf font (if such is not set) to >> render >> > ok ? >> > >> > >> > >> > On Sun, Apr 28, 2013 at 12:18 PM, Jurgis Pralgauskis >> > <jurgis.pralgaus...@gmail.com> wrote: >> >> >> >> SOLVED - the problem was that I needed to reload web2py -- for changed >> >> html.py to make effect ;) >> >> >> >> one more issue >> >> that after write_html(..) it "forgets" the previously set font >> (should >> >> be at least mentioned in docs.. :) >> >> https://code.google.com/p/pyfpdf/issues/detail?id=54#c2 >> >> >> >> >> >> >> >> >> >> On Sat, Apr 27, 2013 at 9:06 PM, Mariano Reingart <reing...@gmail.com> >> >> wrote: >> >>> >> >>> Did you add the TTF unicode font with add_font? >> >>> Can you post a complete example (ie a script.py just with the code to >> >>> test), so I can reproduce it easily. >> >>> >> >>> Best regards, >> >>> >> >>> Mariano Reingart >> >>> http://www.sistemasagiles.com.ar >> >>> http://reingart.blogspot.com >> >>> >> >>> >> >>> On Sat, Apr 27, 2013 at 7:30 AM, Jurgis Pralgauskis >> >>> <jurgis.pralgaus...@gmail.com> wrote: >> >>> > I see 2 lines were changed, the main >> >>> > >> >>> > - if 'face' in attrs and attrs['face'].lower() in self.font_list: >> >>> > + if 'face' in attrs: >> >>> > >> >>> > but I still get >> >>> > >> >>> > >> >>> > File >> >>> > >> "/home/jurgis/web2py/applications/apskaitele/controllers/default.py", >> >>> > line 61, in pdftest >> >>> > >> >>> > >> >>> > pdf.write_html(u"<font face='DejaVu'>Ąžuolas</font>" >> >>> > ) >> >>> > >> >>> > >> >>> > File "/home/jurgis/web2py/gluon/contrib/fpdf/html.py", line 397, in >> >>> > write_html >> >>> > >> >>> > File "/usr/local/lib/python2.7/HTMLParser.py", line 114, in feed >> >>> > >> >>> > self.goahead(0) >> >>> > File "/usr/local/lib/python2.7/HTMLParser.py", line 152, in >> goahead >> >>> > >> >>> > if i < j: self.handle_data(rawdata[i:j]) >> >>> > >> >>> > File "/home/jurgis/web2py/gluon/contrib/fpdf/html.py", line 122, >> in >> >>> > handle_data >> >>> > >> >>> > File "/home/jurgis/web2py/gluon/contrib/fpdf/fpdf.py", line 822, >> in >> >>> > write >> >>> > >> >>> > txt = self.normalize_text(txt) >> >>> > >> >>> > File "/home/jurgis/web2py/gluon/contrib/fpdf/fpdf.py", line 1012, >> in >> >>> > normalize_text >> >>> > >> >>> > txt = txt.encode('latin1') >> >>> > >> >>> > UnicodeEncodeError: 'latin-1' codec can't encode characters in >> position >> >>> > 0-1: >> >>> > ordinal not in range(256 >> >>> > ) >> >>> > >> >>> > >> >>> > >> >>> > and if I >> >>> > pdf.write_html(u"<font face='DejaVu'>Ąžuolas</font>".encode('utf8')) >> >>> > >> >>> > I get Ä„Å3⁄4uolas >> >>> > >> >>> > >> >>> > >> >>> > >> >>> > On Sat, Apr 27, 2013 at 3:24 AM, Mariano Reingart < >> reing...@gmail.com> >> >>> > wrote: >> >>> >> >> >>> >> Sorry, I misread the email. >> >>> >> >> >>> >> Unicode fonts were not supported in html2pdf. >> >>> >> >> >>> >> I've made a change to allow them, please update html.py: >> >>> >> >> >>> >> https://pyfpdf.googlecode.com/hg/fpdf/html.py >> >>> >> >> >>> >> Then, you need to load a ttf unicode font, and then pass it in >> <font> >> >>> >> face attribute: >> >>> >> >> >>> >> pdf=MyFPDF() >> >>> >> # add utf8 font >> >>> >> pdf.add_font('DejaVu', '', 'DejaVuSansCondensed.ttf', uni=True) >> >>> >> # first page: >> >>> >> pdf.add_page() >> >>> >> pdf.write_html(u"<font face='DejaVu'>Ąžuolas</font>") >> >>> >> >> >>> >> For more info and complete code, see: >> >>> >> >> >>> >> https://code.google.com/p/pyfpdf/wiki/Web2Py >> >>> >> >> >>> >> Let me know if that works so I can update the docs and web2py >> contrib >> >>> >> version >> >>> >> >> >>> >> Best regards >> >>> >> Mariano Reingart >> >>> >> http://www.sistemasagiles.com.ar >> >>> >> http://reingart.blogspot.com >> >>> >> >> >>> >> >> >>> >> On Fri, Apr 26, 2013 at 11:45 PM, Mariano Reingart >> >>> >> <reing...@gmail.com> >> >>> >> wrote: >> >>> >> > On Fri, Apr 26, 2013 at 11:42 PM, Mariano Reingart >> >>> >> > <reing...@gmail.com> >> >>> >> > wrote: >> >>> >> >> On Fri, Apr 26, 2013 at 6:34 PM, Jonathan Lundell >> >>> >> >> <jlund...@pobox.com> >> >>> >> >> wrote: >> >>> >> >>> On 26 Apr 2013, at 1:17 PM, Jurgis Pralgauskis >> >>> >> >>> <jurgis.pralgaus...@gmail.com> wrote: >> >>> >> >>> >> >>> >> >>> ok, SOLVED ttf issue for unicode example >> >>> >> >>> http://code.google.com/p/pyfpdf/wiki/Unicode >> >>> >> >>> just needed to create directory gluon > contrib > fpdf > >> font >> >>> >> >>> and place needed ttf files insited it :) >> >>> >> >>> then pdf.write(8, u"Ąžuolas") works fine >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> The fpdf logic uses utf8 for fonts it sees as UTF-based, >> otherwise >> >>> >> >>> latin-1. >> >>> >> >>> It looks to me as though either it isn't recognizing your >> fonts as >> >>> >> >>> UTF, or >> >>> >> >>> there's some overlooked case that it's making a mistake with. >> Have >> >>> >> >>> a >> >>> >> >>> look at >> >>> >> >>> FPDF.set_font: >> >>> >> >>> >> >>> >> >>> self.unifontsubset = (self.fonts[fontkey]['type'] == >> >>> >> >>> 'TTF') >> >>> >> >>> >> >>> >> >>> ...and make sure it's getting set. >> >>> >> >>> >> >>> >> >> >> >>> >> >> Yes, as Jhonatan saids, FPDF (and the PDF standard, BTW) only >> >>> >> >> support >> >>> >> >> latin1 characters for standard font. >> >>> >> >> >> >>> >> >> If you need utf8 characters, you need to embeed a T >> >>> >> > >> >>> >> > You need to embed a UTF8 TTF font, for example: >> >>> >> > >> >>> >> > # Add a DejaVu Unicode font (uses UTF-8) >> >>> >> > # Supports more than 200 languages. For a coverage status see: >> >>> >> > # >> >>> >> > >> >>> >> > >> http://dejavu.svn.sourceforge.net/viewvc/dejavu/trunk/dejavu-fonts/langcover.txt >> >>> >> > pdf.add_font('DejaVu', '', 'DejaVuSansCondensed.ttf', uni=True) >> >>> >> > >> >>> >> > (sorry, the previous message was sent incomplete) >> >>> >> > >> >>> >> > I'll try to enhance the docs about this, thank for reporting the >> >>> >> > issue >> >>> >> > >> >>> >> > Best regards >> >>> >> > >> >>> >> > Mariano Reingart >> >>> >> > http://www.sistemasagiles.com.ar >> >>> >> > http://reingart.blogspot.com >> >>> >> >> >>> >> -- >> >>> >> >> >>> >> --- >> >>> >> You received this message because you are subscribed to a topic in >> the >> >>> >> Google Groups "web2py-users" group. >> >>> >> To unsubscribe from this topic, visit >> >>> >> >> >>> >> >> https://groups.google.com/d/topic/web2py/KJDeQoLKw-M/unsubscribe?hl=en. >> >>> >> To unsubscribe from this group and all its topics, send an email to >> >>> >> web2py+unsubscr...@googlegroups.com. >> >>> >> >> >>> >> For more options, visit https://groups.google.com/groups/opt_out. >> >>> >> >> >>> >> >> >>> > >> >>> > >> >>> > >> >>> > -- >> >>> > Jurgis Pralgauskis >> >>> > tel: 8-616 77613; >> >>> > Don't worry, be happy and make things better ;) >> >>> > http://galvosukykla.lt >> >>> > >> >>> > -- >> >>> > >> >>> > --- >> >>> > You received this message because you are subscribed to the Google >> >>> > Groups >> >>> > "web2py-users" group. >> >>> > To unsubscribe from this group and stop receiving emails from it, >> send >> >>> > an >> >>> > email to web2py+unsubscr...@googlegroups.com. >> >>> > For more options, visit https://groups.google.com/groups/opt_out. >> >>> > >> >>> > >> >>> >> >>> -- >> >>> >> >>> --- >> >>> You received this message because you are subscribed to a topic in the >> >>> Google Groups "web2py-users" group. >> >>> To unsubscribe from this topic, visit >> >>> >> https://groups.google.com/d/topic/web2py/KJDeQoLKw-M/unsubscribe?hl=en. >> >>> To unsubscribe from this group and all its topics, send an email to >> >>> web2py+unsubscr...@googlegroups.com. >> >>> For more options, visit https://groups.google.com/groups/opt_out. >> >>> >> >>> >> >> >> >> >> >> >> >> -- >> >> Jurgis Pralgauskis >> >> tel: 8-616 77613; >> >> Don't worry, be happy and make things better ;) >> >> http://galvosukykla.lt >> > >> > >> > >> > >> > -- >> > Jurgis Pralgauskis >> > tel: 8-616 77613; >> > Don't worry, be happy and make things better ;) >> > http://galvosukykla.lt >> > >> > -- >> > >> > --- >> > You received this message because you are subscribed to the Google >> Groups >> > "web2py-users" group. >> > To unsubscribe from this group and stop receiving emails from it, send >> an >> > email to web2py+unsubscr...@googlegroups.com. >> > For more options, visit https://groups.google.com/groups/opt_out. >> > >> > >> >> -- >> >> --- >> You received this message because you are subscribed to a topic in the >> Google Groups "web2py-users" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/web2py/KJDeQoLKw-M/unsubscribe?hl=en. >> To unsubscribe from this group and all its topics, send an email to >> web2py+unsubscr...@googlegroups.com. >> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> > > > -- > Jurgis Pralgauskis > tel: 8-616 77613; > Don't worry, be happy and make things better ;) > http://galvosukykla.lt > > -- > > --- > You received this message because you are subscribed to the Google Groups > "web2py-users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to web2py+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/groups/opt_out. > > -- --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/groups/opt_out.
<<image.png>>