2013-01-16 3 views
4

자바에서 프린터를 사용할 수있게되었지만 해결해야 할 마지막 문제가 하나 있습니다. 인쇄 할 때 글꼴의 너비가 오히려 늘어나고 선명하고 선명하지 않아야합니다. 나는 기지개를 제거하려면 어떻게Java Printing Font Stretch

FontMetrics metrics = graphics.getFontMetrics(font); 
    int lineHeight = metrics.getHeight(); 

    arrangePage(graphics, pageFormat, lineHeight); 

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

    Graphics2D g = (Graphics2D) graphics; 

    g.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); 
    g.setFont(font); 

    int y = 0; 
    int begin = 0; 

    if (page == 0){ 
     begin = 0; 
    }else begin = pageBreaks[page-1]; 

    int end = 0; 

    if (page == pageBreaks.length){ 
     end = lines.length; 
    }else end = pageBreaks[page]; 

    for (int line = begin; line < end; line++){ 
     y += lineHeight; 
     g.drawString(lines[line], 0, y); 
    } 

    string = deepCopy; 

    return PAGE_EXISTS; 

: 여기

내 코드 종이에 나의 실제 도면이다? 이것은이 자습서를 기반으로합니다 : http://docs.oracle.com/javase/tutorial/2d/printing/set.html

모든 조언이나 도움을 주시면 대단히 감사하겠습니다.

답변

2

기본 DPI는 보통 72 DPI입니다 (필자는 생각합니다). 인쇄 된 종이에는 매우 끔찍합니다. 더 나은 DPI를 가진 프린터를 찾으려면 인쇄 API를 프롬프트해야합니다.

기본적으로 인쇄 서비스 API를 사용해야합니다. 당신은 도움의 Working with Print Services and Attributes 찾을 수 있습니다

시도 뭔가 같은 ...

public class PrintTest01 { 

    public static void main(String[] args) { 

    PrinterResolution pr = new PrinterResolution(300, 300, PrinterResolution.DPI); 

    PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
    aset.add(MediaSizeName.ISO_A4); 
    aset.add(pr); 
    aset.add(OrientationRequested.PORTRAIT); 

    PrinterJob pj = PrinterJob.getPrinterJob(); 
    pj.setPrintable(new Page()); 
    try { 
     pj.print(aset); 
    } catch (PrinterException ex) { 
     ex.printStackTrace(); 
    } 

    } 

    public static class Page implements Printable { 

    @Override 
    public int print(Graphics g, PageFormat pageFormat, int pageIndex) throws PrinterException { 
     if (pageIndex > 0) { 
     return NO_SUCH_PAGE; 
     } 

     Graphics2D g2d = (Graphics2D) g; 
     g2d.translate(pageFormat.getImageableX(), pageFormat.getImageableY()); 

     g.setFont(new Font("Arial", Font.PLAIN, 128)); 
     FontMetrics fm = g.getFontMetrics(); 
     int x = (int)(pageFormat.getWidth() - fm.stringWidth("A"))/2; 
     int y = (int)((pageFormat.getHeight() - fm.getHeight())/2) + fm.getAscent(); 

     g2d.drawString("A", x, y); 

     return PAGE_EXISTS; 
    } 
    } 
} 

은 ...

나는 당신을 경고해야

이는 것을 찾을 수있는 첫 번째 인쇄로 인쇄 할 것입니다 PrintRequestAttributeSet을 충족합니다. 인쇄 대화 상자에 추가 작업을 추가하여 추가 작업을 수행 할 수도 있지만 복잡하지 않은 또 다른 수준입니다.

+0

웹 사이트 나 출처로 나를 안내하여 인쇄 대화 상자로 확인하는 방법을 배울 수 있습니까? 도움 주셔서 감사합니다 어느 쪽이든 :) – Brayden

+0

게시물의 끝에 링크가 그가 인쇄 대화 상자에 대한 항목을 가지고 – MadProgrammer

+0

감사합니다! 나는 그것을 간과했다, 미안하다! – Brayden

0

위 작업을 완료했습니다! 그것으로 인쇄 대화 상자를 열려면이 사용

PrinterJob job = PrinterJob.getPrinterJob(); 
    TextDocumentPrinter document = new TextDocumentPrinter(); 

    PrinterResolution pr = new PrinterResolution(300, 300, PrinterResolution.DPI); 

    PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
    aset.add(MediaSizeName.ISO_A4); 
    aset.add(pr); 
    aset.add(OrientationRequested.PORTRAIT); 

    job.setPrintable(document); 

    boolean doPrint = false; 

    if (showDialog){ 
     doPrint = job.printDialog(aset); 
    }else doPrint = true; 

    if (doPrint){ 
     try{ 
      job.print(); 
     }catch(PrinterException e){ 
      e.printStackTrace(); 
     } 
    } 

ASET 변수가 새 기본 값을 모두 포함하고 printDialog로 연결하여, 사람들은 다음 PrintJob에 입력 결과적으로 종이에 표시된다 ! 대화 상자에서도 변경할 수 있습니다.