2009-05-21 2 views
1

공항을 통해 복잡한 스윙 애플리케이션 UI를 실제 프린터로 인쇄하고 있습니다. 나는 맥 컴퓨터 & 윈도우 머신 모두 같은 프린터로 인쇄하고있다. Mac에서 인쇄하는 것이 좋습니다. 창문을 통한 인쇄는 글꼴과 그래프 선을 포함하여 모두 픽셀 화되어 있습니다.Mac 및 Windows에서 스윙에서 인쇄 - 포스트 스크립트 지원은 어디에 있습니까?

주위를 파고 드는 것은 사용 가능한 PrintServices가 플랫폼에 따라 다르다는 것을 나타냅니다.

DocFlavor flavor = DocFlavor.INPUT_STREAM.POSTSCRIPT; 
PrintRequestAttributeSet attrs = new HashPrintRequestAttributeSet(); 
PrintServiceLookup.lookupPrintServices(flavor, attrs); 

위의 코드는 mac에서 실행하면 단일 요소 배열을 반환합니다. 창에서 빈 배열을 반환합니다. 이것은 필자가 윈도우가 포스트 스크립트 데이터 대신에 프린터에 72 DPI 이미지를 보내고 있다고 믿게한다.

이 차이점은 Mac & Windows JVM 구현의 차이점입니까? Windows에서 인쇄 할 수있는 해결 방법이 있습니까? 나는 내 자신의 350dpi 래스터 화 된 이미지를 생성하여 프린터로 전송할 수 있다는 것을 알았지 만 이러한 것들은 수백 페이지에 달하며 가능하다면 그 경로를 피하고 싶습니다.

+0

과 내가 고대하고 아마 당신이 알고 있습니다,하지만 코드의 두 번째 라인은 불필요 알고, 'lookupPrintServices'는 속성을 설정할 필요가없는 경우 두 번째 인자가 null 인 것을 허용합니다. –

답변

1

대답이 있다고 생각하십시오. java.awt.printerjob 시스템 속성이 sun.awt.windows.WPrinterJob으로 설정되었습니다. 분명히 프린터의 픽셀 화 된 출력이 맘에 든다면 이것은 PrinterJob의 편리한 서브 클래스입니다. 대신에, 가능한 경우 내가 지금처럼 sun.print.PSPrinterJob의 인스턴스를 얻을 : 나는이 질문에 우연히

PrinterJob printerJob = null; 
try { 
    if (System.getProperty("java.awt.printerjob").equals("sun.awt.windows.WPrinterJob")) { 
     // WPrinterJob sends crappy GIF images to the printer, and everything looks all blocky 
     // try to get an instance of a PSPrinterJob instead 
     printerJob = (PrinterJob) Class.forName("sun.print.PSPrinterJob").newInstance(); 
    } 
} catch (Throwable e1) { 
    log.log(Level.SEVERE, "Could not instaniate sun.print.PSPrinterJob", e1); 
} 
if (printerJob == null) { 
     printerJob = PrinterJob.getPrinterJob(); 
} 
+0

FYI, Mac의 Java 8은이 값을 'sun.lwawt.macosx.CPrinterJob'으로 설정하는 것으로 보입니다. – tresf

관련 문제