The current way that fonts are handled is hobbled by the fact that the Graphics2D is
the class that PDFGraphics2D and
SVGGraphics2D inherit from.
One problem is that java.awt.Font can only instantiate fonts that the JVM knows about.
What is needed is a call to tell both
PDFGraphics2D and SVGGraphics2D which fonts to map each java.awt.Font to.
There are a few problems that need to be solved:
1) When generating to PDF one needs a way to tell it to map TrueType fonts to
metrically equivalent Type 1 fonts.
ie when it sees a particlar java.awt.Font instance it should use Type 1 font XYZ in
the output.
Rather than the F1, F2,. etc sort of nomenclature that is used in
FontSetup/FontInfo instead the mapping should be between
particular java.awt.Font instances and some textually described font (eg "Helvetica"
or something similar).
This has to be callable to be set up in advance before some graphics library that
only knows Graphics2D calls would be
called.
2) When generating to a format that supports font lists (eg in CSS where if font a
isn't available then try fonts b and then c) one
needs a way to specify to generate a list of fonts in the output format.
The problem is that the Graphics2D setFont only allows a single font to be
currently specified. Well, I want to be able to call
some other method and tell SVGGraphics2D (or whatever similar class that generates to
other formats) in advance that when it
sees a set to a particular java.awt.Font then it should look-up and find a list of
fonts that will serve in its place in the target
document that is being generated.
The interface here would be the same as for what is described in the first problem
above but there would be a list of fonts
rather than a single font in the text that the java.awt.Font object got mapped to.
3) Some of the font family names that Java uses are unwise for general web page and
CSS use.
For example, on my machine running NT4 SP6a if I instantiate a font of type
"sansserif" and style Font.ITALIC then the font-
family name that Java assigns to it is "sansserif.italic". If one tries to instantiate
a font of type "sansserif.italic" and give it style
Font.ITALIC Java will literally default it to Arial because Java says that the font
family "sansserif.italic" does not have an italic
style. The "sansserif.italic" font family has its italic style assigned to PLAIN!
As a result Batik will generate a style in a font-face tag that looks like:
style="font-family:sansserif.italic; font-style:italic; font-weight:normal;"
Its dumb to put styles in as part of the font family name. Downstream at some point
some display device is going to say that
it doesn't even have a font family of "sansserif.italic" and will default to some
other font. Batik or FOP ought to provide a way for
programmers to prevent this sort of nonsense from mucking things up at some later
stage of processing.
Font family names that get put into generated output files ought not to be made
into some overly specific name just because
Sun or Microsoft (not sure who to blame for this) defined a font family in this
fashion. That information belongs with font-style. Its
far more easy to start with "sansserif" and the italic as separate properties and look
for a font family that puts italic in as part of
its name than it is to go in the opposite direction. Doing it always in one direction
for look-ups makes it easier and more
consistent.
Imagine one popped down a combo box on some interface, listed all font families,
the user chose sansserif.italic, and then the
user chose the italic property, and then the result was that the display software
found that that font family used a totally different
font.
My point in mentioning SVGGraphics2D in this message is that PDFGraphics2D and
SVGGraphics2D should receive the same
enhancement in terms of what the added methods should look like. I even think that
they should inherit from a base class that
gets these methods (and perhaps supporting other classes to hold the data that gets
passed to them) defined for them.
Bottom line: We ought to define some common methods in PDFGraphics2D and SVGGraphics2D
that will allow a programmer
to use the same calls in Batik and FOP to handle fonts more intelligently.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]