2010-06-01 2 views
1

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

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

Спасибо.

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

ответ

0

Вы пробовали установить шрифт с помощью setFont?

+0

Да, я добавил дополнительную информацию о своей проблеме и коде, который я использую. – user469650