【问题标题】:How to print indian regional language in java like gujarati?如何像古吉拉特语一样用Java打印印度地区语言?
【发布时间】:2020-10-25 17:34:16
【问题描述】:

我试图在打印机上打印古吉拉特语,但它在页面上向我显示如下所示的方形框。

我也曾在 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);
}
}
}

所以请帮我解决这个问题并提前感谢。

【问题讨论】:

  • 方框通常表示您使用的字体不支持您使用的字符。尝试更改字体。
  • 这是什么打印机?您可能需要将文本转换为图像并打印图像。
  • 您的示例代码将字符串(由 UTF-16 字符组成)转换为 UTF-8 字节序列,然后再次转换回字符串,因此与仅打印字符串,除了更晦涩。正如其他人所说,这是字体问题,而不是编程问题。
  • 代码对我有用。我得到શ્રેષ્ઠ અહેવાલ એન્જિન ઉપલબ્ધ એફ 作为输出。

标签: java javafx-2


【解决方案1】:

为我工作。

输出:

$ java Foo
શ્રેષ્ઠ અહેવાલ એન્જિન ઉપલબ્ધ એફ

代码:

class Foo {
    public static void main(String... args) {
        System.out.println("શ્રેષ્ઠ અહેવાલ એન્જિન ઉપલબ્ધ એફ");
    }
}
    

我的 HP LaserJet 打印机在纸张上获得了相同的输出。

这只是拥有一个可以理解字符集(可能是 UTF-8)的终端或打印机以及包含您需要的字符的字体的问题。程序不是问题。

在我的例子中,我连接到运行 Raspbian 的 Raspberry Pi。我的终端模拟器理解 UTF-8。我不知道我用的是什么字体。

【讨论】:

    【解决方案2】:
     URL fontUrl = new File("....").toURI().toURL();
                Font font = Font.createFont(Font.TRUETYPE_FONT, fontUrl.openStream());
                font = font.deriveFont(Font.PLAIN, 11);
    

    使用上面的代码我已经解决了问题,并感谢@joni 对字体的评论提示。

    问题是关于字体我已经下载了区域语言字体 .ttf 文件并使用上面的代码在项目中使用它。

    【讨论】:

      猜你喜欢
      • 2012-12-12
      • 2012-01-28
      • 2019-05-06
      • 1970-01-01
      • 1970-01-01
      • 2017-02-16
      • 2012-09-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多