我通过实现Java Printable并将我的代码放入print方法打印到一些Epson收据打印机 . 要将文本绘制到打印机,我使用Graphics2D.drawString . 我还在打印机上绘制一个矩形,以查看在打印到其他打印机时如何与文本大小进行比较 . 打印到收据打印机时,纸张上的文本大约是打印到激光打印机或XPS刻录机虚拟打印的宽度的两倍 . 这是Java向Graphics2D对象绘制文本的方式的问题吗?我有最新版本的Java安装6更新20 .
任何想要研究的想法都会有所帮助 .
谢谢 .
这是我正在使用的代码 . 在这个例子中,当我将它发送到XPS编写器时,我看到矩形右边缘的字母'c',如果我将它打印到我的收据打印机,那么6就在rect的右边缘,你可以告诉文字它应该比它宽得多 . rect似乎是正确的大小 .
我已经尝试更改页面和边距大小,但似乎没有解决我的文本问题 . 我从Microsoft Word自动检测打印机的方式中获得了这些纸张尺寸和边距 . Word将文本正确打印到收据打印机 .
public static void main(String[] args) {
PageFormat format = new PageFormat();
Paper paper = new Paper();
double paperWidth = 3.25;
double paperHeight = 11.69;
double leftMargin = 0.19;
double rightMargin = 0.25;
double topMargin = 0;
double bottomMargin = 0.01;
paper.setSize(paperWidth * 72.0, paperHeight * 72.0);
paper.setImageableArea(leftMargin * 72.0, topMargin * 72.0,
(paperWidth - leftMargin - rightMargin) * 72.0,
(paperHeight - topMargin - bottomMargin) * 72.0);
format.setPaper(paper);
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(OrientationRequested.PORTRAIT);
PrinterJob printerJob = PrinterJob.getPrinterJob();
Printable printable = new ReceiptPrintTest();
format = printerJob.validatePage(format);
printerJob.setPrintable(printable, format);
try {
printerJob.print(aset);
}
catch (Exception e) {
e.printStackTrace();
}
}
public class ReceiptPrintTest implements Printable {
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) throws PrinterException {
if (pageIndex < 0 || pageIndex >= 1) {
return Printable.NO_SUCH_PAGE;
}
Graphics2D g2d = (Graphics2D) graphics;
g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY());
Font font = new Font("Arial",Font.PLAIN, 14);
g2d.setFont(font);
g2d.drawString("1234567890abcdefg", 50, 70);
g2d.drawRect(50, 0, 100, 50);
return Printable.PAGE_EXISTS;
}
1 回答
您是否尝试使用
setFont
设置字体?