2017-09-17 1 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の場合はプリンタで)、[印刷]ダイアログの[プロパティ]ボタンが有効になり、正常に動作します。プリンタがプロパティをサポートしていない可能性があります。 –

関連する問題