Font names using multi-byte strings

Mark Gibson <[email protected]> Thu, 15 Jan 2026 17:09:34 +0000
Newsgroups gmane.text.xml.fop.user
Message-ID <SN7PR04MB8767FCEF0C434834531030E0DD8CA@SN7PR04MB8767.namprd04.prod.outlook.com>
--_000_SN7PR04MB8767FCEF0C434834531030E0DD8CASN7PR04MB8767namp_
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

Hi,

I thought I'd just poll the community on this one, as I can't see it report=
ed anywhere.

We have a PDF that lists its fonts using Japanese characters (in this case,=
 it's MS Gothic and MS PGothic, where "Gothic" actually is in Japanese char=
acters).

When trying to import that image using fo:external-graphic (fop-pdf-images.=
jar), we get an exception with the message "Only 8-bit characters allowed b=
y this implementation".

In reviewing FOP code, org.apache.fop.pdf.PDFName.toHex() throws this excep=
tion if the character id is > 256.

Does this mean FOP cannot handle cases where the names of PDF records are n=
ot in simple ascii range?

Caused by: java.lang.IllegalArgumentException: Only 8-bit characters allowe=
d by this implementation
        at org.apache.fop.pdf.PDFName.toHex(PDFName.java:78)
        at org.apache.fop.pdf.PDFName.escapeName(PDFName.java:64)
        at org.apache.fop.pdf.PDFName.<init>(PDFName.java:42)
        at org.apache.fop.render.pdf.pdfbox.PDFCloner.cloneForNewDocument(P=
DFCloner.java:106)
        at org.apache.fop.render.pdf.pdfbox.PDFCloner.readCOSDictionary(PDF=
Cloner.java:154)
        at org.apache.fop.render.pdf.pdfbox.PDFCloner.cloneForNewDocument(P=
DFCloner.java:104)
        at org.apache.fop.render.pdf.pdfbox.PDFCloner.readCOSObject(PDFClon=
er.java:134)
        at org.apache.fop.render.pdf.pdfbox.PDFCloner.cloneForNewDocument(P=
DFCloner.java:84)
        at org.apache.fop.render.pdf.pdfbox.PDFCloner.readCOSDictionary(PDF=
Cloner.java:154)
        at org.apache.fop.render.pdf.pdfbox.PDFCloner.cloneForNewDocument(P=
DFCloner.java:104)
        at org.apache.fop.render.pdf.pdfbox.PDFCloner.readCOSDictionary(PDF=
Cloner.java:154)
        at org.apache.fop.render.pdf.pdfbox.PDFCloner.cloneForNewDocument(P=
DFCloner.java:104)
        at org.apache.fop.render.pdf.pdfbox.PDFBoxAdapter.cloneForNewDocume=
nt(PDFBoxAdapter.java:141)
        at org.apache.fop.render.pdf.pdfbox.PDFBoxAdapter.createStreamFromP=
DFBoxPage(PDFBoxAdapter.java:212)
        at org.apache.fop.render.pdf.pdfbox.AbstractPDFBoxHandler.createStr=
eamForPDF(AbstractPDFBoxHandler.java:111)
        at org.apache.fop.render.pdf.pdfbox.PDFBoxImageHandler.handleImage(=
PDFBoxImageHandler.java:77)

--_000_SN7PR04MB8767FCEF0C434834531030E0DD8CASN7PR04MB8767namp_
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

<html xmlns:o=3D"urn:schemas-microsoft-com:office:office" xmlns:w=3D"urn:sc=
hemas-microsoft-com:office:word" xmlns:m=3D"http://schemas.microsoft.com/of=
fice/2004/12/omml" xmlns=3D"http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dus-ascii"=
>
<meta name=3D"Generator" content=3D"Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
	{font-family:"Cambria Math";
	panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
	{font-family:Aptos;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
	{margin:0cm;
	font-size:12.0pt;
	font-family:"Aptos",sans-serif;
	mso-ligatures:standardcontextual;
	mso-fareast-language:EN-US;}
span.EmailStyle17
	{mso-style-type:personal-compose;
	font-family:"Aptos",sans-serif;
	color:windowtext;}
.MsoChpDefault
	{mso-style-type:export-only;
	mso-fareast-language:EN-US;}
@page WordSection1
	{size:612.0pt 792.0pt;
	margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
	{page:WordSection1;}
--></style>
</head>
<body lang=3D"EN-GB" link=3D"#467886" vlink=3D"#96607D" style=3D"word-wrap:=
break-word">
<div class=3D"WordSection1">
<p class=3D"MsoNormal">Hi,<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">I thought I&#8217;d just poll the community on this =
one, as I can&#8217;t see it reported anywhere.<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">We have a PDF that lists its fonts using Japanese ch=
aracters (in this case, it&#8217;s MS Gothic and MS PGothic, where &#8220;G=
othic&#8221; actually is in Japanese characters).<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">When trying to import that image using fo:external-g=
raphic (fop-pdf-images.jar), we get an exception with the message &#8220;On=
ly 8-bit characters allowed by this implementation&#8221;.<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">In reviewing FOP code, org.apache.fop.pdf.PDFName.to=
Hex() throws this exception if the character id is &gt; 256.<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal">Does this mean FOP cannot handle cases where the nam=
es of PDF records are not in simple ascii range?<o:p></o:p></p>
<p class=3D"MsoNormal"><o:p>&nbsp;</o:p></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
Caused by: java.lang.IllegalArgumentException: Only 8-bit characters allowe=
d by this implementation<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.fop.pdf.PDFName.to=
Hex(PDFName.java:78)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.fop.pdf.PDFName.es=
capeName(PDFName.java:64)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.fop.pdf.PDFName.&l=
t;init&gt;(PDFName.java:42)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.fop.render.pdf.pdf=
box.PDFCloner.cloneForNewDocument(PDFCloner.java:106)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.fop.render.pdf.pdf=
box.PDFCloner.readCOSDictionary(PDFCloner.java:154)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.fop.render.pdf.pdf=
box.PDFCloner.cloneForNewDocument(PDFCloner.java:104)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.fop.render.pdf.pdf=
box.PDFCloner.readCOSObject(PDFCloner.java:134)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.fop.render.pdf.pdf=
box.PDFCloner.cloneForNewDocument(PDFCloner.java:84)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.fop.render.pdf.pdf=
box.PDFCloner.readCOSDictionary(PDFCloner.java:154)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.fop.render.pdf.pdf=
box.PDFCloner.cloneForNewDocument(PDFCloner.java:104)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.fop.render.pdf.pdf=
box.PDFCloner.readCOSDictionary(PDFCloner.java:154)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.fop.render.pdf.pdf=
box.PDFCloner.cloneForNewDocument(PDFCloner.java:104)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.fop.render.pdf.pdf=
box.PDFBoxAdapter.cloneForNewDocument(PDFBoxAdapter.java:141)<o:p></o:p></s=
pan></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.fop.render.pdf.pdf=
box.PDFBoxAdapter.createStreamFromPDFBoxPage(PDFBoxAdapter.java:212)<o:p></=
o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.fop.render.pdf.pdf=
box.AbstractPDFBoxHandler.createStreamForPDF(AbstractPDFBoxHandler.java:111=
)<o:p></o:p></span></p>
<p class=3D"MsoNormal"><span style=3D"font-family:&quot;Courier New&quot;">=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.fop.render.pdf.pdf=
box.PDFBoxImageHandler.handleImage(PDFBoxImageHandler.java:77)<o:p></o:p></=
span></p>
</div>
</body>
</html>

--_000_SN7PR04MB8767FCEF0C434834531030E0DD8CASN7PR04MB8767namp_--