2017-09-17 13 views
0

인쇄 대화 상자를 표시하고 인쇄 작업을 제출하려면 java awt PrinterJob을 사용하고 있습니다. 작업이 제출되기 전에 사용자가 선택한 속성을 대화 상자에서 읽으 려하지만 '속성'이 보호 된 변수라는 것을 알고 있으므로 어떻게 액세스 할 수 있는지 잘 모르겠습니다. 제출되는 인쇄 작업에 대한 분석을 실행해야합니다. 여기에 해결 방법이 있습니까?PrinterJob 속성 검색 중

+0

이 내가 사용하고있는 코드입니다 : I 위의 예와

import java.awt.print.PrinterJob; import javax.print.attribute.Attribute; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; import javax.print.attribute.standard.*; public static void main(String[] args) throws Exception { PrinterJob job = PrinterJob.getPrinterJob(); PrintRequestAttributeSet attributes = new HashPrintRequestAttributeSet(); boolean ok = job.printDialog(attributes); Attribute[] attributeArray = attributes.toArray(); for (Attribute a : attributeArray) { System.out.println(a.getName() + ": " + a); } System.out.println(); Attribute copies = attributes.get(Copies.class); Attribute media = attributes.get(Media.class); Attribute mediaPrintableArea = attributes.get(MediaPrintableArea.class); Attribute mediaTray = attributes.get(MediaTray.class); Attribute orientationRequested = attributes.get(OrientationRequested.class); Attribute sides = attributes.get(Sides.class); System.out.println("copies: " + copies); System.out.println("media: " + media); System.out.println("mediaPrintableArea: " + mediaPrintableArea); System.out.println("mediaTray: " + mediaTray); System.out.println("orientationRequested: " + orientationRequested); System.out.println("sides: " + sides); attributes.remove(Sides.class); attributes.add(Sides.DUPLEX); job.print(); } 

이 출력을 얻었다. PrinterJob job = PrinterJob.getPrinterJob(); 부울 ok = job.printDialog; 인쇄 대화 상자에서 작업 속성을 선택한 후에 속성을 읽고 분석하고 싶습니다. – curie

답변

0

PrinterJob.printDialog() 대신 PrinterJob.printDialog(PrintRequestAttributeSet) 메서드를 사용해야합니다. 제공된 PrintRequestAttributeSet 에서 사용자는 인쇄 대화 상자에서 사용자가 선택한 모든 속성을 받게됩니다. 이 PrintRequestAttributeSet에서

당신이 다음

  • toArray() 방법 호출하여 모든 속성을 얻을 수 있습니다
  • 또는 get(Class<?>) 방법
    (패키지 PrintRequestAttribute를 구현하는 클래스를 사용을 사용하여 개별 특성을 얻을 javax.print.attribute.standard 키로 사용).

그런 다음 속성을 제거하거나 추가하여 PrintRequestAttributeSet을 변경할 수 있습니다.

마지막으로 print() 메서드를 호출하여 PrinterJob을 제출하십시오.

예 :

media: iso-a4 
orientation-requested: portrait 
media-printable-area: (25.4,25.4)->(159.2,246.2)mm 
copies: 1 

copies: 1 
media: iso-a4 
mediaPrintableArea: (25.4,25.4)->(159.2,246.2)mm 
mediaTray: null 
orientationRequested: portrait 
sides: null 
+0

정말 고마워. 인쇄 대화 상자의 속성 단추가 비활성화 된 것을 볼 수 있습니다. 어떻게 활성화시킬 수 있습니까? – curie

+0

인쇄 할 것이 없기 때문일 수 있습니다. 'job.setPrintable (...)'을 호출 했습니까? [A 기본 인쇄 프로그램] (https://docs.oracle.com/javase/tutorial/2d/printing/printable.html)을 참조하십시오. –

+0

나를 위해 (내 프린터, Windows에서) 인쇄 대화 상자에서 속성 단추를 사용할 수 있으며 제대로 작동합니다. 프린터가 속성을 지원하지 않을 수 있습니다. –