昨日に続き、fop + SVG で PDF を作る際の文字化け対策についての備忘録
続けて、少し調べた結果、-c オプションで指定するコンフィグレーションファイルに指定する方法を少し変えると、追加設定が上手く行く事が判ったけど…
上手く煮え切らないなぁ…
昨日の続きで少し調べてたら、fop.conf に次の様に設定すると文字化けせずに PDF を作成する事が出来ました!
<?xml version="1.0" encoding="utf-8">
< fop >
<renderers>
<renderer mime="application/pdf">
<fonts>
<font kerning="yes" embed-url="file:///C:/Users/User/Downloads/fop-2.1/ipaexm.ttf">
<font-triplet name="IPAex Mincho" style="normal" weight="normal"/>
</font>
</fonts>
</renderer>
</renderers>
</fop>
これは、 IPA の IPAexフォント Ver.003.01 を指定してみたくて設定してみました
# でも、マトリックスファイルの URL を指定すると上手く行かないんだよなぁ…
SVG の指定はこんな感じ
<text x="94mm" y="64mm" font-size="12" text-anchor="start" font-family="IPAex Mincho" font-weight="400" font-style="normal">東京都特許許可局</text>
実行はこんな感じ
C:\Users\User\Downloads\fop-2.1\fop.bat -c fop.conf sample1.fo -x -pdf test1.pdf
詳しく調べていないんですが、この設定で実行すると、PDF に IPAexMincho が埋め込まれます
ですが、この方法は PDF 以外には使えません
-png , -awt ,-ps で、色々試してますが上手く行かない…
作戦として、fop を -awt 付きでプレビュー & 印刷 で使おうかと思ってたんですが、PDF とフォントが違うので困ってしまった…
実際は SVG をブラウザーで表示してしまうと言う手もあるんだろうけど、再現性が良くないよね…
何方かのブログで読んだか、Serif とか SansSerif とかに指定してしまう!と言うのも有りなのか….
Ubuntu の場合:
Ubuntu は Ubuntu 16.04.2 LTS で動作確認中!(本当はコッチで動かす予定)
ちなみに aptitude で fop と、IPAex 明朝とゴシックを追加しました
フォントのリストを fc-list で確認すると
/usr/share/fonts/truetype/fonts-japanese-mincho.ttf: IPAexMincho,IPAex明朝:style=Regular
/usr/share/fonts/truetype/fonts-japanese-gothic.ttf: IPAexGothic,IPAexゴシック:style=Regular
こんな感じで追加されています
で、SVG でのフォントファミリーの指定を
<text x="94mm" y="64mm" font-size="12" text-anchor="start" font-family="IPAexMincho">東京都特許許可局</text>
こんな風に指定したら、何とかなった…
でも font-weight の指定とかが動かないね…
fop.conf (設定ファイル) は、やっぱり上手く行かないので、auto-detect を指定する事にした
<?xml version="1.0" encoding="utf-8" ?>
…
<fop>
<renderers>
<renderer mime="application/pdf">
<fonts>
<auto-detect />
<!--
<font kerning="yes" embed-url="file:///usr/share/fonts/truetype/fonts-japanese-mincho.ttf"
metrics-url="file:///home/user/TT/ipaexm.xml">
<font-triplet name="IPAex Mincho" style="normal" weight="normal"/>
</font>
<font kerning="yes" embed-url="file:///usr/share/fonts/truetype/fonts-japanese-gothic.ttf"
metrics-url="file:///home/user/TT/ipaexm.xml">
<font-triplet name="IPAex Gothic" style="normal" weight="normal"/>
</font>
-->
</fonts>
</renderer>
こんな感じ
マトリックスファイルファイルの作成もしてみたけど、結果はエラーして作成できない…
user@ubuntuST27:~/TT$ java -cp /usr/share/java/fop-2.1.jar org.apache.fop.fonts.apps.TTFReader -fn "IPAex Gothic" /usr/share/fonts/opentype/ipaexfont-gothic/ipaexg.ttf ipaexg.xml
作成はこんな感じで OK!
で、設定は コンフィグレーションファイルの残骸の通り…
PDF にフォントを埋め込みたいなら、 embed-url を通常通り指定すれば良いのでコメントを有効化すれば大丈夫です
で、作成はこんな感じ!
user@ubuntuST27:~/TT$ fop -c fop.conf sample1.fo -pdf test.pdf
[warning] /usr/bin/fop: No java runtime was found
[WARN] FOUserAgent - The contents of fo:external-graphic line 1 exceed the available area in the inline-progression direction by 28347 millipoints. (See position 11:62)
[WARN] FOUserAgent - The contents of fo:region-body on page 1 exceed its viewport by 34131 millipoints. (See position 5:25)
[WARN] FOUserAgent - Font "OCR-B,normal,400" not found. Substituting with "any,normal,400".
[WARN] FOUserAgent - Font "IPAexGothic,normal,700" not found. Substituting with "IPAexGothic,normal,400".
[INFO] FOUserAgent - Rendered page #1.
user@ubuntuST27:~/TT$
font-weight と font-style は normal しか指定できない
ちなみに、OCR-B と IPAexGothic の Bold 指定は試しに突っ込んであるので警告が出ます
Substituting って言うのを指定すれば良いのかな…
あんまり時間がとれない…どこまで調べるか…
.
2017-04-19 追記:
-png , -awt でフォントが違うのは困るので、コンフィグレーションファイルで auto-delect を image/png と application/awt へ追加しました
結果、これで再現性は高くなりましたので、暫くこれで凌ぐしかないか…
<?xml version="1.0" encoding="utf-8" ?>
<fop>
<renderers>
<renderer mime="application/pdf">
<fonts>
<font kerning="yes" embed-url="file:///C:/Users/user/Downloads/fop-2.1/ipaexm.ttf">
<font-triplet name="IPAex Mincho" style="normal" weight="normal"/>
</font>
<font kerning="yes" embed-url="file:///C:/Users/user/Downloads/fop-2.1/ipaexg.ttf">
<font-triplet name="IPAex Gothic" style="normal" weight="normal"/>
</font>
<font kerning="yes" embed-url="file:///C:/Windows/Fonts/KNY-OCRB.ttf">
<font-triplet name="OCR-B" style="normal" weight="normal"/>
</font>
</fonts>
</renderer>
<renderer mime="image/png">
<fonts>
<auto-detect />
</fonts>
</renderer>
<renderer mime="application/awt">
<fonts>
<auto-detect />
</fonts>
</renderer>
</renderers>
</fop>
ただ、-png を指定したとき、checkTTC が毎回行われてしまうのでどうしたモノか..
それと、IPAex Mincho とかをインストールしていないので、 IPA Mincho とかに置き換えてるんだと思うのですが正しく対比されません
SVG での font-family を IPAexMincho とすると上手く対比されますので、これなら Ubuntu でも行けそうかな..
チェックしている所で出力されるログを確認するとこんな感じになっています
…
4 19, 2017 11:15:04 午前 org.apache.fop.fonts.truetype.OpenFont checkTTC
情報: IPAGothic <-- selected
4 19, 2017 11:15:04 午前 org.apache.fop.fonts.truetype.OpenFont checkTTC
情報: IPAPGothic
…
4 19, 2017 11:15:04 午前 org.apache.fop.fonts.truetype.OpenFont checkTTC
情報: IPAGothic
4 19, 2017 11:15:04 午前 org.apache.fop.fonts.truetype.OpenFont checkTTC
情報: IPAPGothic <-- selected
…
4 19, 2017 11:15:04 午前 org.apache.fop.fonts.truetype.OpenFont checkTTC
情報: IPAMincho <-- selected
4 19, 2017 11:15:04 午前 org.apache.fop.fonts.truetype.OpenFont checkTTC
情報: IPAPMincho
…
4 19, 2017 11:15:05 午前 org.apache.fop.fonts.truetype.OpenFont checkTTC
情報: IPAMincho
4 19, 2017 11:15:05 午前 org.apache.fop.fonts.truetype.OpenFont checkTTC
情報: IPAPMincho <-- selected
…
多分、selected と表示されているフォント名が選択できるんだと思うので、似ているフォント名を font-family へ指定すれば良いんじゃ無いかと思う..
それと、Windows 版では font-weight とかも少し効くようです
ただ、100~900 とか言う指定は効かない様子..
normal と bold 位しか効いてないなぁ….
.
まだ続くか?