检索PrinterJob属性

时间:2017-09-17 12:02:34

标签: java swing printing awt

我正在使用java awt PrinterJob来显示打印对话框并提交要打印的作业。我想在提交作业之前阅读用户从对话框中选择的属性,但我发现“属性”是受保护的变量,因此不确定如何访问它。我需要对正在提交的打印作业进行一些分析。这里有解决方法吗?

1 个答案:

答案 0 :(得分:0)

而不是方法PrinterJob.printDialog() 你应该使用方法PrinterJob.printDialog(PrintRequestAttributeSet)。 在提供的PrintRequestAttributeSet中 您将收到用户在打印对话框中选择的所有属性。

PrintRequestAttributeSet开始,您可以

  • 通过调用toArray()方法
  • 获取所有属性
  • 或使用get(Class<?>)方法获取单个属性 (使用包中实现PrintRequestAttribute的类 javax.print.attribute.standard 作为键。)

然后,您可以通过删除或添加属性来更改PrintRequestAttributeSet

最后,您通过调用PrinterJob方法提交print()

示例:

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();
}

通过上面的例子,我得到了这个输出:

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