如何像古吉拉特语一样在 java 中打印印度地方语言?
How to print indian regional language in java like gujarati?
我尝试在打印机上打印古吉拉特语,但它在页面上显示方框,如下所示。
我也在 netbeas 的控制台上打印,但结果仍然相同。
我也曾尝试使用以下代码 Java UTF-8 编码和解码,但没有得到预期的输出。
String s = "શ્રેષ્ઠ અહેવાલ એન્જિન ઉપલબ્ધ એફ";
byte arr[] = s.getBytes("UTF8");
System.out.println(new String(arr, "UTF-8"));
输出:
我使用了以下代码进行打印:
class print{
public static void main(Strng args[]){
try{
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setPrintable(new BillPrintable(), BillPrintable.getPageFormat(pj));
pj.print();
catch(Exception e){}
}
class BillPrintable implements Printable {
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
throws PrinterException {
int result = NO_SUCH_PAGE;
if (pageIndex == 0) {
Graphics2D g2d = (Graphics2D) graphics;
g2d.drawString("શ્રેષ્ઠ અહેવાલ એન્જિન ઉપલબ્ધ એફ", 0, 20);
result = PAGE_EXISTS;
}
return result;
}
public static PageFormat getPageFormat(PrinterJob pj) {
PageFormat pf = pj.defaultPage();
Paper paper = pf.getPaper();
double middleHeight = 10.0;
double headerHeight = 1.0;
double footerHeight = 1.0;
double width = convert_CM_To_PPI(8); //printer know only point per inch.default value is 72ppi
double height = convert_CM_To_PPI(headerHeight + middleHeight + footerHeight);
paper.setSize(width, height);
paper.setImageableArea(
0,
0,
width,
height - convert_CM_To_PPI(1)
); //define boarder size after that print area width is about 180 points
pf.setOrientation(PageFormat.PORTRAIT); //select orientation portrait or landscape but for this time portrait
pf.setPaper(paper);
return pf;
}
protected static double convert_CM_To_PPI(double cm) {
return toPPI(cm * 0.393600787);
}
}
}
所以请帮助我解决这个问题并提前致谢。
适合我。
输出:
$ java Foo
શ્રેષ્ઠ અહેવાલ એન્જિન ઉપલબ્ધ એફ
代码:
class Foo {
public static void main(String... args) {
System.out.println("શ્રેષ્ઠ અહેવાલ એન્જિન ઉપલબ્ધ એફ");
}
}
我的 HP LaserJet 打印机在纸上获得了相同的输出。
这只是一个终端或打印机理解字符集(可能是 UTF-8)和包含您需要的字符的字体的问题。程序不是问题。
在我的例子中,我连接到 Raspberry Pi 运行 Raspbian。我的终端模拟器理解 UTF-8。我不知道我用的是什么字体。
URL fontUrl = new File("....").toURI().toURL();
Font font = Font.createFont(Font.TRUETYPE_FONT, fontUrl.openStream());
font = font.deriveFont(Font.PLAIN, 11);
使用上面的代码我已经解决了问题,感谢@joni 在关于字体的评论中的提示。
问题是关于字体我已经下载了区域语言字体 .ttf 文件并在使用上述代码的项目中使用它。
我尝试在打印机上打印古吉拉特语,但它在页面上显示方框,如下所示。
我也在 netbeas 的控制台上打印,但结果仍然相同。 我也曾尝试使用以下代码 Java UTF-8 编码和解码,但没有得到预期的输出。
String s = "શ્રેષ્ઠ અહેવાલ એન્જિન ઉપલબ્ધ એફ";
byte arr[] = s.getBytes("UTF8");
System.out.println(new String(arr, "UTF-8"));
输出:
我使用了以下代码进行打印:
class print{
public static void main(Strng args[]){
try{
PrinterJob pj = PrinterJob.getPrinterJob();
pj.setPrintable(new BillPrintable(), BillPrintable.getPageFormat(pj));
pj.print();
catch(Exception e){}
}
class BillPrintable implements Printable {
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex)
throws PrinterException {
int result = NO_SUCH_PAGE;
if (pageIndex == 0) {
Graphics2D g2d = (Graphics2D) graphics;
g2d.drawString("શ્રેષ્ઠ અહેવાલ એન્જિન ઉપલબ્ધ એફ", 0, 20);
result = PAGE_EXISTS;
}
return result;
}
public static PageFormat getPageFormat(PrinterJob pj) {
PageFormat pf = pj.defaultPage();
Paper paper = pf.getPaper();
double middleHeight = 10.0;
double headerHeight = 1.0;
double footerHeight = 1.0;
double width = convert_CM_To_PPI(8); //printer know only point per inch.default value is 72ppi
double height = convert_CM_To_PPI(headerHeight + middleHeight + footerHeight);
paper.setSize(width, height);
paper.setImageableArea(
0,
0,
width,
height - convert_CM_To_PPI(1)
); //define boarder size after that print area width is about 180 points
pf.setOrientation(PageFormat.PORTRAIT); //select orientation portrait or landscape but for this time portrait
pf.setPaper(paper);
return pf;
}
protected static double convert_CM_To_PPI(double cm) {
return toPPI(cm * 0.393600787);
}
}
}
所以请帮助我解决这个问题并提前致谢。
适合我。
输出:
$ java Foo
શ્રેષ્ઠ અહેવાલ એન્જિન ઉપલબ્ધ એફ
代码:
class Foo {
public static void main(String... args) {
System.out.println("શ્રેષ્ઠ અહેવાલ એન્જિન ઉપલબ્ધ એફ");
}
}
我的 HP LaserJet 打印机在纸上获得了相同的输出。
这只是一个终端或打印机理解字符集(可能是 UTF-8)和包含您需要的字符的字体的问题。程序不是问题。
在我的例子中,我连接到 Raspberry Pi 运行 Raspbian。我的终端模拟器理解 UTF-8。我不知道我用的是什么字体。
URL fontUrl = new File("....").toURI().toURL();
Font font = Font.createFont(Font.TRUETYPE_FONT, fontUrl.openStream());
font = font.deriveFont(Font.PLAIN, 11);
使用上面的代码我已经解决了问题,感谢@joni 在关于字体的评论中的提示。
问题是关于字体我已经下载了区域语言字体 .ttf 文件并在使用上述代码的项目中使用它。