Исправлено растяжение текста при печати на чековый принтер с Java - PullRequest
3 голосов
/ 01 июня 2010

Я печатаю на некоторых чековых принтерах Epson, внедряя Java Printable и помещая свой код в метод печати. Для рисования текста на принтере я использую Graphics2D.drawString. Я также рисую прямоугольник для принтера, чтобы увидеть, как его сравнивать с размером текста при печати на других принтерах. При печати на чековом принтере текст на бумаге примерно вдвое превышает ширину печати на лазерном принтере или виртуальном принтере XPS Writer. Это проблема с тем, как Java рисует текст в объекте Graphics2D? У меня установлена ​​новейшая версия Java из 6 обновлений 20.

Любые идеи о том, на что стоит обратить внимание, были бы полезны.

Спасибо.

Вот код, который я использую. В этом примере я вижу букву «с» на правом краю прямоугольника при отправке его на устройство записи XPS, и если я печатаю его на своем чековом принтере, 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;
    }

1 Ответ

1 голос
/ 01 июня 2010

Вы пытались установить шрифт, используя setFont?

...