[cairo] Problem with pdfs containing fonts with 0x7fff glyphs or more
Adrian Johnson
ajohnson at redneon.com
Sun May 13 07:33:40 PDT 2007
Eugeniy Meshcheryakov wrote:
> Hello,
>
> While testing my program (uses cairo) with large font files, I found that
> sometimes text in created pdfs cannot be displayed with kpdf or xpdf. gv
> works for some of the pdfs, but gives errors for others. I do not know
> if this is an error in cairo, or in those pdf viewers.
>
> I used fntsample ( http://sf.net/projects/fntsample ) with CODE2000
> font (CFF outlines). I start getting problems when try to generate pdf
This font is a TrueType font. For some reason the TrueType subsetting
has failed and a CFF/Type2 fallback font has been embedded.
> with the following command:
>
> fntsample -f CODE2000.TTF -o 1.pdf -i 0x0000-0x8fbc
> (creates pdf with characters in range U+0000-U+8BC,
> file available at http://people.debian.org/~eugen/bad-pdfs/1.pdf)
>
> Fontforge shows that embedded font contains exactly 0x7FFF glyphs. gv is
> still able to display this file. Both xpdf and kpdf can display file
> with characters in range U+0000-U+8BB
> (http://people.debian.org/~eugen/bad-pdfs/2.pdf). kpdf, xpdf and gv
> cannot display file that contains all encoded characters from the font
> (fntsample without -i, http://people.debian.org/~eugen/bad-pdfs/3.pdf).
All three of these files appear to display correctly in xpdf 3.02 and
kpdf 0.5.5 and ghostscript 8.56, and acroread 7. Can you provide a
screenshot or more detail about what the problem is as these files look
fine to me.
The last file, 3.pdf, fails with a /stackoverflow error in ghostscript
versions prior to 8.56. I did some further testing with this font
and fntsample and creating a pdf with characters in the range
0x0000-0xf000 works with all version of ghostscript. Creating a pdf with
characters in the range 0x0000-0xff00 fails with ghostscript versions
prior to 8.56. Creating a pdf with characters in the range 0x1000-0xffff
works with all versions.
One possible workaround, if you want to limit the number of glyphs
per embedded font, is to create multiple cairo_font_face_t faces for
each font.
For example:
face = cairo_ft_font_face_create_for_ft_face (ft_face, 0);
cairo_set_font_face(cr, face);
... show some glyphs
face = cairo_ft_font_face_create_for_ft_face (ft_face, 0);
cairo_set_font_face(cr, face);
... show some more glyphs
Each time a cairo_font_face_t is created from
cairo_ft_font_face_create_for_ft_face(), a separate font will be
embedded for all glyphs shown with that face. I'm not sure if this is a
bug or a feature.
> Does anyone know, if this is problem in cairo code or in those viewers?
>
> Versions of programs:
> cairo 1.4.6
> kpdf 3.5.6
> xpdf 3.02
> gv 3.6.2
> gs-esp 8.15.3
>
> Regards,
> Eugeniy Meshcheryakov
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> cairo mailing list
> cairo at cairographics.org
> http://cairographics.org/cgi-bin/mailman/listinfo/cairo
More information about the cairo
mailing list