My book provides a workaround for this problem of FOP not supporting the
font-selection-strategy property. See:
http://www.sagehill.net/docbookxsl/SpecialChars.html#SwitchSymbol
It requires a stylesheet customization, as well as changing the XML source files for
any missing characters. Hopefully the FOP developers will fix this limitation soon.
Bob Stayton
Sagehill Enterprises
[email protected]
----- Original Message -----
From: "Fabien Tillier" <[email protected]>
To: <[email protected]>; <[email protected]>
Sent: Thursday, July 08, 2010 8:41 AM
Subject: RE: [docbook-apps] RE: XSL-FO and unicode
If I only set Arial Unicode MS <xsl:param name="body.font.family" select="'Arial
Unicode MS'"/>, I get the symbols, but only those :( (and numbers...)
And Acrobat tells me the used fonts are Helvetica and Symbol...
As I like to try things, I set the fonts to
<xsl:param name="symbol.font.family" select="'Arial Unicode MS'"/>
<xsl:param name="body.font.family" select="'Helvetica,Arial,Serif'"/>
Thus, trying to use Arial Unicode MS for symbole (though I am completely sure it won't
work)
And I was right. So, I am afraid I am in a dead-end...
-----Message d'origine-----
De : [email protected] [mailto:[email protected]]
Envoyé : jeudi 8 juillet 2010 16:57
À : Fabien Tillier; [email protected]
Objet : RE: [docbook-apps] RE: XSL-FO and unicode
I understand your frustration. I happen to be dealing with a lot of these
font/character issues myself right now, so my head's in it. Hopefully I can help
further. The situation is very different for HTML vs. PDF.
As far as HTML goes, unless you are publishing HTML Help (CHM), I recommend sticking
with UTF-8 for HTML output, and if possible make sure all your font style declarations
end with one of the standard font keywords ("monospace", "sans-serif", or "serif").
When the HTML output is displayed, for each character the browser should automatically
select an available font if the font you explicitly specified doesn't contain that
character.
PDF has a much more limited fallback mechanism, and furthermore FOP itself does not
even fully implement the XSL-FO 1.1 specification. As a result you have to jump
through a lot more hoops to guarantee the correct display of all Unicode characters.
When I look in the properties, only
Helvetica font is used, not Symbol, which I indicate in the XSL-FO
stylesheet with
<xsl:param name="symbol.font.family" select="'Symbol'"/>
<xsl:param name="body.font.family" select="'Helvetica,Arial,Serif'"/>
Unfortunately I think you are running into a limitation of FOP that the DocBook
stylesheets don't seem set up to let you circumvent. I went and looked at the DocBook
stylesheet reference at
http://docbook.sourceforge.net/release/xsl/current/doc/index.html (sorry I didn't do
this before), and according to the documentation, the symbol font names "are
automatically appended to the body or title font family name when fonts are specified
in a font-family property in the FO output". But as we've said, FOP disregards all but
the first font name, so appending more font names to the end of the list is not going
to have any effect.
As of inserting Arial Unicode in FOP, I hesitate, as the ttf file is 22Mb
in size...
I believe that FOP subsets all fonts, so you probably don't have to worry about the
size. The font does only come with MS Office, but if you know that all systems you
publish on will have MS Office installed, then the simplest solution is probably this:
<xsl:param name="body.font.family" select="'Arial Unicode
MS,Helvetica,Arial,Serif'"/>
You might then run into a further limitation, however. My understanding is that "Arial
Unicode MS" does not have bold and italic variations, so if you do this you might find
that bold and italics do not show up in the PDF. I have not yet experimented to see
what really happens here.
-----Original Message-----
From: Fabien Tillier [mailto:[email protected]]
Sent: Thursday, July 08, 2010 4:46 AM
To: Cavicchio, Rob; [email protected]
Subject: RE: [docbook-apps] RE: XSL-FO and unicode
Thanks rob.
I still do have some troubles....
I am using the same docbook xml to generate either HTML or PDF. Some
characters (µ, °) are visible in PDF but not in HTML while others (alpha,
beta) are visible in HTML but not in PDF....
I am getting mad, as both are encoded the same way in the original XML...
Maybe it is because I am using ISO-8859-1 ?
If I try with UTF-8, I get correct display in HTML but the problem is
still there in FOP(huh, PDF). When I look in the properties, only
Helvetica font is used, not Symbol, which I indicate in the XSL-FO
stylesheet with
<xsl:param name="symbol.font.family" select="'Symbol'"/>
<xsl:param name="body.font.family" select="'Helvetica,Arial,Serif'"/>
I have that strange feeling I am running in circles...
As of inserting Arial Unicode in FOP, I hesitate, as the ttf file is 22Mb
in size...
Regards,
Fabien
-----Message d'origine-----
De : [email protected] [mailto:[email protected]]
Envoyé : mercredi 7 juillet 2010 18:57
À : [email protected]
Objet : [docbook-apps] RE: XSL-FO and unicode
Fabien Tillier [mailto:[email protected]] wrote:
> In the xsl-fo, I get
> <fo:block>α</fo:block>
>
> And in PDF, a wonderful "#"
> So, after some further readings, I found that I had to add some fonts,
> so in the XSL Customization, I added
>
> <xsl:param name="symbol.font.family" select="'Arial Sans
> Unicode,Symbol,ZapfDingbats'"/>
>
> But that does not change a thing.... though in the fo, I have <fo:root
> xmlns:fo="http://www.w3.org/1999/XSL/Format" font-family="serif,Arial
> Sans Unicode,Symbol,ZapfDingbats" font-size="10pt" text-align="justify"
> line-height="normal" font-selection-strategy="character-by-character"
> line-height-shift-adjustment="disregard-shifts" writing-mode="lr-tb"
> language="en">
I don't know what OS you're working in, but I don't recognize the font
name "Arial Sans Unicode". Do you mean "Arial Unicode MS"? The most
current version of that font is available on Windows systems that have
Office 2003 or later installed, and it does contain the character you
specified, which is U+03B1 ("Greek Small Letter Alpha").
The "Symbol" font also contains this character, and I recommend using that
instead because it is one of the Base 14 fonts that will always be
available in PDF. I think you'll find that if you put "Symbol" first in
your font list, it will work. As Mauritz pointed out, FOP does not handle
alternate font selections, so it will only use the first font you specify
("Arial Sans Unicode" in your list). If the glyph doesn't exist in that
font or in the default fallback font (which I think is always "Times"),
you'll get a "missing glyph" symbol.
If you do want to load OS fonts such as "Arial Unicode MS", in addition to
specifying the font name in the FO, you need to create a FOP configuration
file and add the <auto-detect /> instruction, as documented here:
http://xmlgraphics.apache.org/fop/0.95/fonts.html#basics
*************************
Rob Cavicchio
Principal Technical Writer & Information Architect
EMC Captiva
Information Intelligence Group
EMC Corporation
3721 Valley Centre Drive, Ste 200
San Diego, CA 92130
P: (858) 320-1208
F: (858) 320-1010
E: [email protected]
The opinions expressed here are my personal opinions. Content published
here is not read or approved in advance by EMC and does not necessarily
reflect the views and opinions of EMC.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]