Java中的Unicode Devnagari脚本的打印问题
我正在使用梵文脚本的印度语国家语言创建Java应用程序。
我需要使用Java Printing API以印地文语言打印一些文本。 但是,我面临一些问题,无法弄清楚什么是错的!
这里有一些截图可以说明问题。
当我在Java应用程序(使用Mangal字体)中向用户显示文本预览时:
但是当我使用Java打印支持(使用Mangal字体)打印时: 这就是问题。 注意一些变音符号(matras)向右移动!
但是,MS Word似乎使用相同的Mangal字体正确地打印它:
当我在Java应用程序中使用Arial Unicode字体时,它也可以正常工作:
这就是为什么,我不得不使用Arial Unicode字体! 但是,与Mangal Font的200KB大小相比,它的大小是22MB。 这使得我的构建(jar)非常大。 应用这个大的尺寸,不能用于生产。
我甚至不知道从哪里开始知道这个问题的原因。 打印Devnagari Unicode文本时发生变化的变音符号问题
更新:这是代码:
(确保两个字体文件都在类路径中!两种字体都可以在名为“Arial Unicode MS Regular”和“Mangal”的Windows上使用。)
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.FontFormatException;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.IOException;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class DevnagariTest {
private static Font createFont(String url) throws FontFormatException, IOException {
return Font.createFont(
Font.TRUETYPE_FONT,
DevnagariTest.class.getClassLoader().getResourceAsStream(url))
.deriveFont(30f);
}
private static JLabel getLabel(String text, Font font) {
JLabel label = new JLabel(text);
label.setFont(font);
return label;
}
public static void main(String[] args) throws FontFormatException, IOException {
Font mangal = createFont("mangal.ttf");
Font arial = createFont("ARIALUNI.TTF");
JFrame frame = new JFrame();
final Box box = Box.createVerticalBox();
box.add(getLabel("गणेश वार्ड रमेश सुरेश पप्पू पृथ्वी", mangal));
box.add(getLabel("गणेश वार्ड रमेश सुरेश पप्पू पृथ्वी", arial));
JButton print = new JButton("Print");
print.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
PrinterJob job = PrinterJob.getPrinterJob();
job.setPrintable(new Printable() {
@Override
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
throws PrinterException {
if (pageIndex > 0) {
return NO_SUCH_PAGE;
}
Graphics2D g2 = (Graphics2D) graphics;
g2.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
box.printAll(g2);
g2.dispose();
return PAGE_EXISTS;
}
});
try {
job.print();
} catch (PrinterException ex) {
ex.printStackTrace();
}
}
});
frame.add(box, BorderLayout.CENTER);
frame.add(print, BorderLayout.SOUTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
链接地址: http://www.djcxy.com/p/88677.html
上一篇: Printing Issue for Unicode Devnagari Script in Java
下一篇: Unable to show Hindi(Unicode) characters in BIRT generated PDF