try
pdf.write_html("<font face='DejaVu'>%s</font>" % html )


On Thu, May 2, 2013 at 9:34 AM, Martin Weissenboeck <mweis...@gmail.com>wrote:

> 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 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.


<<image.png>>

Reply via email to