- PR -

JavaでSVGに変換(Batikで)したとき日本語が文字化け

1
投稿者投稿内容
会議室デビュー日: 2003/10/07
投稿数: 9
お住まい・勤務地: 神戸
投稿日時: 2004-04-13 20:27
こんにちは件名の通りの問題が発生しています。
Batikのorg.apache.batik.swing.JSVGCanvas上まででは問題なく表示できるのですが、
いざ、SVGに変換して、Adobeのプラグインなどで確認すると日本語の部分が文字化けし
「□(四角形)」になっていたり、フォントが正しく表示しなくなっていたりします。
AdobeのIllustratorとかで確認したらFont自体が表示されなくなってしまいました。
これらの文字化けの対策方法が存在するでしょうか?
それとも、Batikで変換したSVGをAdobeのプラグイン上から見るというのは
そもそも間違いということなのでしょうか?
BatikのFontに関しての情報などがあれば、
よろしくお願いします。


環境
WinXP Professional
j2sdk1.4.2_04
Apache Batik1.5.1
eclipse2.1.1


<---以下ソース--------------------------------------------->
<---SVGGeneratorSample.java-------------------------------->
import java.awt.*;
import javax.swing.*;
import java.io.*;
import org.apache.batik.svggen.SVGGraphics2D;
import org.apache.batik.dom.GenericDOMImplementation;
import org.w3c.dom.*;

public class SVGGeneratorSample extends JFrame {
public SVGGeneratorSample() {
super("SVGGeneratorSample");
getContentPane().setLayout(new BorderLayout());
}

public static void main(String[] args) {
SVGGeneratorSample frame = new SVGGeneratorSample();
DrawArea drawArea = new DrawArea();
frame.getContentPane().add(drawArea);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 600);
frame.setVisible(true);

DOMImplementation domImpl =
GenericDOMImplementation.getDOMImplementation();

/** 引数
* qualifiedName - 作成する文書型の修飾名
* publicId - 外部サブセットの公開識別子
* systemId - 外部サブセットのシステム識別子
*/
Document document = domImpl.createDocument(null, "svg", null);

SVGGraphics2D svgGenerator = new SVGGraphics2D(document);
svgGenerator.setSVGCanvasSize(new Dimension(600, 500));
drawArea.paint(svgGenerator);

boolean useCSS = true;
try {
Writer out = new OutputStreamWriter(
new FileOutputStream("SVGGeneratorSample.svg"), "UTF-8");
svgGenerator.stream(out, useCSS);
} catch(IOException e) {
e.printStackTrace();
}
}
}

class DrawArea extends JComponent {
public void paint(Graphics g) {
g.drawLine(48, 40, 304, 224);
g.setColor(Color.red);
g.fillOval(224, 144, 64, 64);
g.setColor(Color.blue);
g.setFont(new Font("SansSerif", Font.BOLD, 20));
g.drawString("SansSerifのBOLDです", 96, 20);
g.setFont(new Font("Symbol", Font.ITALIC, 30));
g.drawString("しんぼる", 96, 50);
g.setFont(new Font("Serif", Font.PLAIN, 10));
g.drawString("いいいい", 96, 100);
g.setFont(new Font("Dialog", Font.ITALIC, 15));
g.drawString("だいあろぐ", 96, 150);
g.setFont(new Font("Monospaced", Font.BOLD, 35));
g.drawString("トゥルータイプFont", 96, 200);
g.setFont(new Font("MS Gothic", Font.PLAIN, 35));
g.drawString("MSゴシックフォント", 96, 230);
g.setFont(new Font("HGP行書体", Font.PLAIN, 35));
g.drawString("HGP行書体", 96, 250);
g.setFont(new Font("HG正楷書体-PRO", Font.PLAIN, 35));
g.drawString("HG正楷書体-PRO", 96, 300);

}
}

<---------------------------------------------------------->
<---------------------------------------------------------->
<---JSVGCanvasSample.java---------------------------------->
import java.awt.*;
import javax.swing.*;
import java.io.*;
import org.apache.batik.swing.JSVGCanvas;

//拡大縮小サンプル
public class JSVGCanvasSample extends JFrame {
public JSVGCanvasSample() {
super("JSVGCanvasSample");
getContentPane().setLayout(new BorderLayout());
}

public static void main(String[] args) {
JSVGCanvasSample frame = new JSVGCanvasSample();
JSVGCanvas svgCanvas = new JSVGCanvas();
File file = new File("SVGGeneratorSample.svg");

svgCanvas.setURI("file:" + file.getAbsolutePath());
Container pane = frame.getContentPane();
pane.add(svgCanvas);

JPanel panel = new JPanel(new GridLayout(1, 2));
ActionMap map = svgCanvas.getActionMap();
JButton zoomInButton = new JButton(
(Action)map.get(JSVGCanvas.ZOOM_IN_ACTION));
zoomInButton.setText("拡大");
panel.add(zoomInButton);
JButton zoomOutButton = new JButton(
(Action)map.get(JSVGCanvas.ZOOM_OUT_ACTION));
zoomOutButton.setText("縮小");
panel.add(zoomOutButton);
pane.add(panel, BorderLayout.SOUTH);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(400, 600);
frame.setVisible(true);
}
}
<---------------------------------------------------------->

SVGやBatikなんかの情報って少ないですよね・・・
技術書も洋書しかないし・・・
それでは
aa
ぬし
会議室デビュー日: 2004/01/08
投稿数: 299
投稿日時: 2004-04-14 20:36
引用:

SVGやBatikなんかの情報って少ないですよね・・・


そうですね。svgでしたら、w3cのとこ見た方が早いかもしれません。
ところでadobeではなくて、batikのデモだかサンプルにあるやつでは
見れますか?
http://xml.apache.org/batik/svgviewer.html

既読かもしれませんが、フォント関連でしたら次もありました。
http://xml.apache.org/batik/ttf2svg.html
あと、fopの日本語フォント使うときも
たしかなんらかの設定が必要だったと思います。
解決策が同じかもしれませんので、調べてみてはいかがでしょう?
会議室デビュー日: 2003/10/07
投稿数: 9
お住まい・勤務地: 神戸
投稿日時: 2004-04-15 15:48
Gです。
aaさんありがとうございます。
>そうですね。svgでしたら、w3cのとこ見た方が早いかもしれません。
>ところでadobeではなくて、batikのデモだかサンプルにあるやつでは
>見れますか?
とりあえずBatikのデモは見れます。しかし、デモの中に日本語はありませんでした。
他の2バイト文字列も英語以外は「□(四角形)」になってみれませんでした。


>あと、fopの日本語フォント使うときも
>たしかなんらかの設定が必要だったと思います。
>解決策が同じかもしれませんので、調べてみてはいかがでしょう?
FOPですね。
調べてみます。

>既読かもしれませんが、フォント関連でしたら次もありました。
>http://xml.apache.org/batik/ttf2svg.html
すいませんちゃんと見てませんでした。
午前中に何とか日本語Fontの表示方法がわかったので自己レスします。
Batikにはttf2SVGというのがあるので、そこからTTFファイル(True
Type Font File)を引数にエンコード専用のSVGを吐き出します。
こんな感じでです。(以下、例)
///////////////////////////////////////////////////////
java -jar batik-ttf2svg.jar C:\ttc\FONT02.TTF -l 0 -h 256 -id HGRGYFont02 -o FontSample.svg -testcard
///////////////////////////////////////////////////////
ちなみにTTFファイルのみです。TTCファイルはできませんでした。
しかし、「BREAKTTC」というツールを使ってTTCファイルをTTFファイルに変換可能です。

こうして吐き出した。FontSample.svgのパスを日本語が表示するSVGの以下
の[>]部分に追加
<---------------------------------------------------------------------->
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN' 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'>
<svg style="fill-opacity:1; 〜〜〜〜〜〜 height="700">

> <style type="text/css">
> <![CDATA[
> @font-face{font-family:'HGSeikaishotaiPRO';src:url(FontSample.svg)}
> ]]>
> </style>
<defs id="genericDefs" />
 <g>
> <g style="fill:blue; font-size:20; ※font-family:'HGSeikaishotaiPRO'; stroke:blue;">
 <g>

※font-familyも変更
<---------------------------------------------------------------------->
これでAdobeのプラグインも、Illustratorでも
「HG正楷書体」や「HGP行書体」を確認することができました。
ただ、これは全てのフォントに対してはできないです。(PostScript
フォントやCIDフォントはどうなるのだろうか?)
なんせTrueType専用ですから。他にPSフォントやOpenTypeフォントで
可能なのでしょうか?


[ メッセージ編集済み 編集者: G 編集日時 2004-04-15 15:51 ]

[ メッセージ編集済み 編集者: G 編集日時 2004-04-15 15:52 ]
1

スキルアップ/キャリアアップ(JOB@IT)