我正在使用java awt PrinterJob顯示打印對話框並提交要打印的作業。我想在提交作業之前閱讀用戶從對話框中選擇的屬性,但是我看到'屬性'是一個受保護的變量,因此不確定如何訪問它。我需要對正在提交的打印作業進行一些分析。有沒有解決方法?正在檢索PrinterJob屬性
回答
代替方法PrinterJob.printDialog()
您應該使用方法PrinterJob.printDialog(PrintRequestAttributeSet)
。 在提供的PrintRequestAttributeSet
中,您將收到用戶在打印對話框中選擇的所有屬性。
從這個PrintRequestAttributeSet
你就可以
- 通過調用其
toArray()
方法得到的所有屬性 - 或使用
get(Class<?>)
方法
(使用來自包實現PrintRequestAttribute
類得到各個屬性javax.print.attribute.standard
作爲鍵)
然後,您可以通過刪除或添加屬性來更改PrintRequestAttributeSet
。
最後,您通過調用print()
方法提交PrinterJob
。
實施例:
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
非常感謝,工作。我看到「打印對話框」上的「屬性」按鈕被禁用。有關如何啓用它的任何想法? – curie
可能是因爲沒有什麼可打印的。你叫'job.setPrintable(...)'?請參閱[基本打印程序](https://docs.oracle.com/javase/tutorial/2d/printing/printable.html)。 –
對我來說(使用我的打印機,在Windows上)打印對話框中的屬性按鈕已啓用並且正常工作。可能是您的打印機不支持任何屬性。 –
- 1. 正在檢索href屬性
- 2. 檢索屬性
- 3. 檢索屬性值
- 4. 檢索href屬性
- 5. VBScript Active Directory檢索屬性/屬性
- 6. 檢索模型屬性
- 7. 檢索文件屬性
- 8. 檢索模型屬性值
- 9. 從檢索屬性節點
- 10. 檢索祖先屬性
- 11. 如何檢索@IndexedEmbedded屬性?
- 12. 檢索的getJSON屬性值
- 13. 從屬性檢索邊距
- 14. Freemarker布爾屬性檢索
- 15. Python/BeautifulSoup:檢索'href'屬性
- 16. 如何檢索LoaderException屬性?
- 17. DelegatingFilterProxy檢索屬性值
- 18. 檢索Java註釋屬性
- 19. 檢索屬性和Java中
- 20. IOS從ABPerson檢索屬性
- 21. 查看/檢索屬性
- 22. 檢索struct的[StructLayout]屬性
- 23. 如何檢索employeeid屬性
- 24. 檢索繼承屬性
- 25. 檢索Azure表的屬性
- 26. 從XML屬性檢索值
- 27. XPATH檢索屬性列表
- 28. 按名稱檢索屬性
- 29. NODE-RED檢索XML屬性
- 30. 檢索屬性的問題
這是我使用的代碼。 PrinterJob job = PrinterJob.getPrinterJob(); boolean ok = job.printDialog;從打印對話框中選擇作業屬性後,我想閱讀並分析屬性。 – curie