4-Byte Unicode Not Supported in FOP


How to use FOP to support all Unicode characters including 4-byte Unicode characters?

✍: FYIcenter.com


If you want to use FOP to support all Unicode characters, you can follow this tutorial:

1. Download a font file that can support all Unicode characters from https://ftp.gnu.org/gnu/unifont/unifont.

2. Selete the latest version in TTF format: unifont-10.0.07.ttf.

3. Build the font definition file:

\local\fop-2.2\fop>java -cp %FOP_PATH%\build\fop.jar;
   -d \fyicenter\unifont-10.0.07.ttf \fyicenter\Unicode.xml

4. Create a FOP configuration file,

<?xml version="1.0"?>
<!-- cfg-unicode.xml
     Copyright (c) 2018 FYIcenter.com
<fop version="1.0">
    <renderer mime="application/pdf">
        <font metrics-url="\fyicenter\Unicode.xml" kerning="yes" 
          <font-triplet name="Unicode" style="normal" weight="normal"/>
          <font-triplet name="Unicode" style="normal" weight="bold"/>
          <font-triplet name="Unicode" style="italic" weight="normal"/>

5. Create a test FO file, unicode-test.fo:

<?xml version="1.0" encoding="utf-8"?>
<!-- unicode-test.fo
     Copyright (c) 2018 FYIcenter.com
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <fo:simple-page-master master-name="myPage">
      <fo:region-body margin="1in"/>
  <fo:page-sequence master-reference="myPage">
    <fo:flow flow-name="xsl-region-body" font-family="Unicode">
      <fo:block>1-Byte Unicode &amp;#x41;: &#x41;&#x42;&#x43;</fo:block>
      <fo:block>2-Byte Unicode &amp;#x0278;: &#xFE18;&#xA015;</fo:block>
      <fo:block>4-Byte Unicode &amp;#x1F60B;: &#x1F60B;</fo:block>

6. Run FOP to generate the PDF output:

>\local\fop-2.2\fop\fop -c \fyicenter\cfg-unicode.xml 
   \fyicenter\unicode-test.fo \fyicenter\unicode-test.pdf

WARNING: Glyph "?" (0xd83d) not available in font "UnifontMedium".
WARNING: Glyph "?" (0xde0b) not available in font "UnifontMedium".
INFO: Rendered page #1.

The two warning messages are actually caused by a single issue. FOP does not support the 4-byte Unicode characters U+1F60B. It first converted the U+1F60B into two characters 0xd83d and 0xde0b, then declared that those two characters are not supported by the Unicode font.

Open the PDF file with Acrobat Reader, you see that 1-byte and 2-byte Unicode characters are generated correctly. But the 4-byte Unicode character is not:
4-Byte Unicode Not Supported in FOP


Download and Installing of FOP 2.x

Use Unicode Characters with FOP

Managing Fonts in FOP PDF Output

⇑⇑ FAQ for FOP (Formatting Object Processor)

2018-03-17, 553👍, 0💬