2010-06-01 3 views
1

J'imprime sur certaines imprimantes de reçus Epson en implémentant Java Printable et en plaçant mon code dans la méthode d'impression. Pour dessiner le texte sur l'imprimante, j'utilise Graphics2D.drawString. Je dessine également un rect à l'imprimante pour voir comment comparer à la taille du texte lors de l'impression à d'autres imprimantes. Lors de l'impression sur l'imprimante de reçus, le texte sur le papier est environ le double de la largeur d'impression sur une imprimante laser ou sur l'impression virtuelle de l'éditeur XPS. Est-ce un problème avec la façon dont Java dessine du texte sur l'objet Graphics2D? J'ai la version la plus récente de Java installée de 6 mise à jour 20.Correction de l'étirement du texte lors de l'impression sur une imprimante ticket avec Java

Toutes les idées de ce qu'il faudrait regarder seraient utiles.

Merci.

Voici le code que j'utilise. Avec cet exemple, je vois la lettre «c» sur le bord droit du rect lors de l'envoi à un écrivain XPS et si je l'imprime sur mon imprimante de reçus, le 6 est sur le bord droit du rect et vous pouvez dire le texte est beaucoup plus large alors il devrait être. Le rect semble être la bonne taille.

J'ai essayé de changer la taille de la page et de la marge, mais cela ne semble pas résoudre mon problème de texte. J'ai obtenu ces tailles et marges de papier de la façon dont Microsoft Word détecte automatiquement l'imprimante. Word imprime correctement le texte sur l'imprimante de reçus.

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; 
    } 

Répondre

0

Avez-vous essayé de définir la police en utilisant setFont?

+0

Oui, j'ai ajouté quelques informations supplémentaires sur mon problème et le code que j'utilise. – user469650

Questions connexes