打印出現截斷?
對於自定義紙張打印, 一定要先在打印機配置那邊添加, 不然會出現截斷.
例如打印1000*500, 出來是正常的, 打印216*139, 出現了截斷.
因為java默認的打印, 會從打印機紙張里尋找相近的紙張進行匹配,
如果沒有添加自定義紙張, 可能找出來的是別的紙張.

添加自定義紙張
分為兩種
打印機支持直接自定義紙張設置
打開控制面板, 選擇查看設備和打印機, 選中指定打印機, 右鍵打印機首選項.
在紙張規格后面可以直接添加自定義紙張.

打印機不支持直接設置
例如Windows自帶的Microsoft XPS Document Writer, 右鍵打印機首選項里是沒有自定義紙張的.
這時可以通過選中打印機, 點擊菜單欄上方的打印機服務器屬性, 勾選 創建新紙張規格. 最后記得要點 保存規格.

Java讀取自定義紙張
通過java直接調用打印機, 彈出來打印機設置窗口, 里面有個選擇打印機以及紙張的界面.

既然java自帶的對話框里可以讀到, 我們可以到他的源碼里直接摘抄一下.
源碼位於sun.print.ServiceDialog.
1 PrintService printer = PrintServiceLookup.lookupDefaultPrintService(); 2 Media[] objs = (Media[]) printer.getSupportedAttributeValues(Media.class, null, null); 3 for (Media obj : objs) { 4 if (obj instanceof MediaSizeName) { 5 System.out.println("紙張型號:" + obj); 6 } else if (obj instanceof MediaTray) { 7 System.out.println("紙張來源:" + obj); 8 } 9 }
log結果如下

注意: java讀取紙張有個限制, 那就是默認紙張 高度 >= 寬度.
如果設置了100*50的紙張, 是讀不到的, 因為他默認這個是50*100的橫向展示.
若需要打印自定義紙張, 參加另外一篇博客 使用PDFBox打印自定義紙張的PDF
