java - 使用 Java 打印到收据打印机时修复文本拉伸(stretch)

标签 java printing drawstring

我正在通过实现 Java Printable 并将我的代码放入打印方法来打印到一些 Epson 收据打印机。要将文本绘制到打印机,我使用 Graphics2D.drawString。我也在向打印机绘制一个矩形,以查看在打印到其他打印机时如何与文本大小进行比较。当打印到收据打印机时,纸张上的文本大约是打印到激光打印机或 XPS 写入器虚拟打印宽度的两倍。这是 Java 将文本绘制到 Graphics2D 对象的方式的问题吗?我安装了最新版本的 Java 6 update 20。

任何关于调查内容的想法都会有所帮助。

谢谢。

这是我使用的代码。在这个例子中,当我将它发送到 XPS 编写器时,我在矩形的右边缘看到字母“c”,如果我将它打印到我的收据打印机,则 6 位于矩形的右边缘,你可以告诉文本比它应该的要宽得多。矩形似乎是正确的大小。

我已经尝试更改页面和页边距大小,但似乎无法解决我的文本问题。我从 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;
    }

最佳答案

您是否尝试过使用 setFont 设置字体?

关于java - 使用 Java 打印到收据打印机时修复文本拉伸(stretch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2950014/

相关文章:

html - CSS 打印 - 默认页面方向

sorting - 如何按顺序打印LUA表?

java - 在缩放的 Graphics2d 中使用拉绳会产生各种间距和字形

java - 使用drawString在框架上显示字符串?

java - 使用空对象访问静态方法

java - Hazelcast:如何刷新 Hazelcast 实例?

java - 通过服务管理与 mysql 的连接

printing - CUPS:如何修复点阵打印机的右边距

java - 如何在Java中使用drawString()绘制任何文本

Java 正则表达式字符串解析,试图找出一种模式