2016-04-24 9 views
0

私のJavaアプリケーションから領収書プリンタへ印刷しようとしています 領収書の幅は58mmです。余白が正しくなく、余白が1インチで印刷されているようですいずれかの側。この結果、3行の文字/数字が印刷され、フルラインは印刷されません。 私は手動でマージンを両面で1.97mmに調整しているので、メモ帳から正常に印刷できます。Java:印刷可能な幅を設定する(Pageformat)

私のコードは以下の通りです。

public int print(Graphics g, PageFormat pf, int pageIndex) 
     throws PrinterException { 

    Font font = new Font("MONOSPACED", Font.PLAIN, 10); 
    FontMetrics metrics = g.getFontMetrics(font); 
    int lineHeight = metrics.getHeight(); 
    if (pageBreaks == null) { 
     initTextLines(); 
     int linesPerPage = (int)(pf.getImageableHeight()/lineHeight); 
     int numBreaks = (textLines.length-1)/linesPerPage; 
     pageBreaks = new int[numBreaks]; 
     for (int b=0; b<numBreaks; b++) { 
      pageBreaks[b] = (b+1)*linesPerPage; 
     } 
    } 

    if (pageIndex > pageBreaks.length) { 
     return NO_SUCH_PAGE; 
    } 

    /* User (0,0) is typically outside the imageable area, so we must 
    * translate by the X and Y values in the PageFormat to avoid clipping 
    * Since we are drawing text we 
    */ 
    Graphics2D g2d = (Graphics2D)g; 
    g2d.setFont(new Font("MONOSPACED", Font.PLAIN, 10)); 
    g2d.translate(pf.getImageableX(), pf.getImageableY()); 

    /* Draw each line that is on this page. 
    * Increment 'y' position by lineHeight for each line. 
    */ 
    int y = 0; 
    int start = (pageIndex == 0) ? 0 : pageBreaks[pageIndex-1]; 
    int end = (pageIndex == pageBreaks.length) 
      ? textLines.length : pageBreaks[pageIndex]; 
    for (int line=start; line<end; line++) { 
     y += lineHeight; 
     g.drawString(textLines[line], 0, y); 
    } 

    /* tell the caller that this page is part of the printed document */ 
    return PAGE_EXISTS; 
} 

それは私がするソートされている場合、あなたはそれが出て他のシステムと均一に保つために、私は領収書の右側にテキストを揃える助けることができれば、私も感謝される、しかし、私の主な問題は余裕です月を超えてください:)

ありがとうございます!

p.s.私はJavaから印刷することに新しいし、苦労して、オンラインソースをコピーすることから重複したコードを持つ可能性があります。私はそれが小さく、それほど役に立たなかったようにフォントを調整しました。

答えて

0

私は希望の結果を得るための回避策を考え出しました。テキストがうまくいく前にスペースを追加するだけで、次のようにコードを調整しました。

public void print() throws PrintException, IOException { 
    String defaultPrinter = 
      PrintServiceLookup.lookupDefaultPrintService().getName(); 
    System.out.println("Default printer: " + defaultPrinter); 
    PrintService service = PrintServiceLookup.lookupDefaultPrintService(); 

    InputStream is = new ByteArrayInputStream(printableAmounts.getBytes("UTF8")); 

    PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); 
    pras.add(new Copies(1)); 

    DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; 
    Doc doc = new SimpleDoc(is, flavor, null); 
    DocPrintJob job = service.createPrintJob(); 

    PrintJobWatcher pjw = new PrintJobWatcher(job); 
    job.print(doc, pras); 
    pjw.waitForDone(); 
    is.close(); 
} 

一時的な解決策と思われますが、他に何も出てこない場合、永続的になります。