如何像古吉拉特语一样在 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 文件并在使用上述代码的项目中使用它。