【发布时间】: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 字节序列,然后再次转换回字符串,因此与仅打印字符串,除了更晦涩。正如其他人所说,这是字体问题,而不是编程问题。
-
代码对我有用。我得到
શ્રેષ્ઠ અહેવાલ એન્જિન ઉપલબ્ધ એફ作为输出。