使用可能なプリンターのリストを取得する方法を知っています。ユーザーがリストから選択して、セッションのデフォルトに設定できるようにしたいと思います。
Windows7の使用
これは簡単に実行できることを知っています。単純なJavaプログラムを作成したいだけです。a:知識を増やすためにb:ここの教師は印刷プロパティで遊ぶことに非常に反対です。
よろしくお願いします
すべてのプリンタのリストを取得する方法を知っているので、デフォルトのプリンタを設定します。
PrinterJob pj = PrinterJob.getPrinterJob();
PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null, null);
System.out.println("Number of printers configured: " + printServices.length);
for (PrintService printer : printServices) {
System.out.println("Printer: " + printer.getName());
if (printer.getName().equals("***MYPRINTER***")) {
try {
pj.setPrintService(printer);
} catch (PrinterException ex) {
}
}
}
このプログラムはEclipseで動作します。
import java.awt.print.PageFormat;
import java.awt.print.PrinterJob;
public class PrinterSetup
{
public static void main(String[] args) throws Exception
{
PrinterJob pjob = PrinterJob.getPrinterJob();
PageFormat pf = pjob.defaultPage();
pjob.setPrintable(null, pf);
if (pjob.printDialog()) {
pjob.print();
}
}
}
OSのデフォルトプリンタを設定するための回避策を作成しました。これは、基本的に、印刷コードを実行する前にデフォルトのプリンターを設定するcmdコマンドを実行するWindowsで機能します。
Desktop desktop = null
if (Desktop.isDesktopSupported()) {
desktop = Desktop.getDesktop()
desktop.print(file)
}
これが私の関数です:
public static boolean setDefaultPrinter(String printerName) {
String defaultPrinterSetter = "wmic printer where name='"+ printerName +"' call setdefaultprinter";
try {
setDefaultPrinterProcess = Runtime.getRuntime().exec("cmd /c start cmd.exe /C " + defaultPrinterSetter);
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
この関数にプリンター名を渡すだけで、デフォルトのプリンターになります。
使用可能なすべてのプリンタサービスのリストを取得する関数は次のとおりです。
public static ArrayList<PrintService> availablePrinters() {
PrintService[] services = PrinterJob.lookupPrintServices();
ArrayList<PrintService> allServices = new ArrayList<>();
for (PrintService myService : services) {
allServices.add(myService);
}
return allServices;
}
そして、おそらくコンボボックスなどにリストを追加して、ユーザーが選択できるようにしたいと思います。このようなものになるはずです
ArrayList<PrintService> availableServices = availablePrinters();
System.out.println("All printers list:");
for (PrintService myService : availableServices) {
myCombo.getItems().add(myService.getName());
System.out.println(myService.getName());
}