TextLayout クラスを使用して印刷しようとしています。いくつかの数学記号を印刷すると、奇妙な動作が発生します。
下の画像は、文字列「First + 2」と「First \u222A 2」を PDF ファイルに出力した結果を示しています。'union' 記号 (\u222A) が印刷されると、記号に続く文字が記号の前の文字を上書きするように見えます。
\u222A を含まない文字列と \u222A を含む別の文字列を出力するテスト コードを次に示します。
public class PrintTest {
public static void main(String[] args) {
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setPrintable(new Printable() {
public int print(Graphics g, PageFormat pf, int pageIndex) {
if (pageIndex != 0) return NO_SUCH_PAGE;
Graphics2D g2 = (Graphics2D) g;
Font font = new Font("SansSerif", Font.PLAIN, 10);
// Draw string with + char
TextLayout layout = new TextLayout("First + 2", font, g2
.getFontRenderContext());
layout.draw(g2, 40, 80);
// Draw string with union character
layout = new TextLayout("First \u222A 2", font, g2
.getFontRenderContext());
layout.draw(g2, 40, 100);
return PAGE_EXISTS;
}
});
if (pj.printDialog()) {
try {
pj.print();
} catch (PrinterException e) {
System.out.println(e.getMessage());
}
}
}
}
私は Windows 7 & 8 で Java 1.7.0_17 を実行しており、PDF への印刷を含むいくつかのプリンターでこれをテストしました。すべてのテストで同じ問題が示されます。「ユニオン」、「交差点」、および「除外」シンボルを使用しても同じ結果が得られます。
私は本当にここで立ち往生しています。どんな助けでも大歓迎です。
更新: 論理フォントを使用すると問題が発生するようです。インストールされているすべての論理フォント (「Dialog」、「DialogInput」、「Monospaced」、「SansSerif」、および「Serif」) でテストしたところ、同じ問題が発生しました。これらの記号 (「Lucida Sans」および「Arial Unicode MS」) をサポートする物理フォントでテストしたところ、目的の出力が得られました。
私は論理フォントの使用に縛られていないので、これで差し迫った問題は解決します。