xmlgraphics-fop-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jeremias Maerki <...@jeremias-maerki.ch>
Subject Re: Supporting unusual encodings for Type 1 fonts
Date Wed, 13 Feb 2008 11:12:59 GMT
Just some details what each approach will produce:

#1 produces a /CIDFontType0 CIDFont [1] and a /Type0 Composite Font
referencing the former.

#2 produces one or more /Type1 fonts.

[1] for TrueType we produce a CIDFontType2 CIDFont and a /Type0
Composite font for each TrueType font. OpenOffice produces one or more
/TrueType fonts for each TrueType font.

#1 would always generate a CID font for simplicity. What you propose is
basically a "#2a", i.e. produce a /Type1 font if the document stays
within the default encoding of the font. If additional characters are
used FOP would switch to CID fonts instead of producing a /Type1 font.
So this needs elements from #1 and #2. Possible and probably makes sense
if CID fonts work in the first place. I like it.

BTW, I just found out that I have to generate a ToUnicode CMap if a
Type1 font doesn't use one of the encodings that are predefined in the
PDF spec. So a little more work for me there.

On 13.02.2008 11:57:34 Vincent Hennebert wrote:
> Hi Jeremias,
> 
> With solution #1, if I happen to use only the glyphs from the font that 
> are available in its default encoding, will the resulting PDF be the 
> same as in solution #2?
> What I mean is, will feature-incomplete PDF readers be able to display 
> it? In which case this wouldn’t be that bad.
> 
> Anyway, solution #1 also looks cleaner to me, so go for it. If that 
> means that I’ll have to create a RFE for my favourite PDF reader, then 
> I’ll do it ;-)
> 
> Vincent
> 
> 
> Jeremias Maerki wrote:
> > I've been asked to look into the possibility to support unusual
> > encodings (like Cyrillic) with Type 1 fonts. Right now we only support
> > WinAnsiEncoding (plus special handling for Symbol and ZapfDingbats).
> > 
> > I already have an AFM parser. The AFM parser is the precondition to
> > safely support non-standard encodings as only this file contains the
> > glyph list of a font.
> > 
> > I'm now on a good way to support non-WinAnsi encodings since I can now
> > build CodePointMapping instances from an AFM file. I then have to teach
> > the PDF and PS renderers to make use of these special encodings.
> > 
> > That's step 1, but it will only make the font's native encoding
> > available in FOP. The number of available glyphs for a Type 1 font will
> > still remain under 255 (typicaly under 223 as the first 32 chars are
> > usually not used). To support all glyphs of a Type 1 font we need more
> > and I found two possible ways to pursue:
> > 
> > 1. Treat Type 1 fonts as CID fonts.
> > 
> > + Probably the cleaner approach.
> > + All glyphs are supported under one single font (no font renderer-level
> >   font switching required, see below)
> > - Makes the generated PDF/PS code a little less readable but that's not
> >   important.
> > 
> > 2. Do something like OpenOffice when handling fonts with more than 255
> > chars: Create multiple single-byte encodings which map to the same base
> > font. This will require an 1:n relationship from font to char mapping
> > which the renderers also have to handle. The first encoding will be
> > equal to the font's default encoding (PDF calls that the "implicit base
> > encoding"). The other encoding(s) will be built from the rest of the
> > available characters. In the renderer it will be necessary to switch
> > fonts from one character to another (not the same as switching from
> > Helvetica to Symbol, i.e. not at FO level, but at renderer level).
> > 
> > + Higher compatibility with PDF viewers which are not yet
> >   feature-complete.
> > + Keeps the generated PDF/PS code more readable (not important)
> > - Switching between derived fonts (i.e. font with a common base font but
> >   with special encodings) is necessary. SingleByteFont needs to be split
> >   in two classes.
> > 
> > An example: The "Baskerville Cyrillic" font contains 264
> > characters/glyphs. The default encoding only contains 221 characters. So
> > 43 additional characters can be made available like this.
> > 
> > I'm currently leaning towards CID fonts as it is probably the cleaner
> > approach. Both solutions are probably pretty much the same in terms of
> > effort. The CID approach will take more work in the PS renderer and the
> > multi-encoding approach will make changes necessary in FOP's font
> > library.
> > 
> > If anyone has thoughts on this, I'd appreciate it. I'll finish the
> > changes for supporting the default encodings and then finish the
> > processing feedback stuff before I finish this here.
> > 
> > Jeremias Maerki
> 
> 
> -- 
> Vincent Hennebert                            Anyware Technologies
> http://people.apache.org/~vhennebert         http://www.anyware-tech.com
> Apache FOP Committer                         FOP Development/Consulting




Jeremias Maerki


Mime
View raw message