Службы принтера не найдены?

#java #printing

#java #печать

Вопрос:

Когда я отлаживаю эту программу, массив служб пуст??

  import java.io.FileInputStream;
    import java.io.FileNotFoundException;

    import javax.print.Doc;
    import javax.print.DocFlavor;
    import javax.print.DocPrintJob;
    import javax.print.PrintException;
    import javax.print.PrintService;
    import javax.print.PrintServiceLookup;
    import javax.print.SimpleDoc;
    import javax.print.attribute.HashPrintRequestAttributeSet;
    import javax.print.attribute.PrintRequestAttributeSet;
    import javax.print.attribute.standard.Copies;
    import javax.print.attribute.standard.MediaSize;

    import javax.print.attribute.standard.Sides;


    public class PrintFileWithSpec {


        public static void printFile(String filename){

        FileInputStream psStream=null;
        try {
           psStream = new FileInputStream(filename);
        } catch (FileNotFoundException ffne) {
        }
        if (psStream == null) {
            return;
        }

        DocFlavor psInFormat = DocFlavor.INPUT_STREAM.POSTSCRIPT;
        Doc myDoc = new SimpleDoc(psStream, psInFormat, null);  
        PrintRequestAttributeSet aset = 
            new HashPrintRequestAttributeSet();
        aset.add(new Copies(5));
        //aset.add(MediaSize.ISO_A4); 
        aset.add(Sides.DUPLEX);
        PrintService[] services = 
          PrintServiceLookup.lookupPrintServices(psInFormat, aset);
        if (services.length > 0) {
           DocPrintJob job = services[0].createPrintJob();
           try 
           {
               job.print(myDoc, aset);
           } catch (PrintException pe) {}
        }
        }

        public static void main(String [] args){

            printFile("D:/Resume.doc");
        }
    }
  

Комментарии:

1. Похоже, что атрибуты, указанные в aset , немного слишком ограничительны — это работает для меня, когда я передаю null вместо этого.

2. я передал null вместо aset все та же проблема

3. Что произойдет, если вы передадите оба аргумента как null ?

4. @hippo передав оба значения null, я получил список принтеров в массиве служб, но он не печатает мой документ.

Ответ №1:

Это потому, что не был найден PrintService, соответствующий указанному DocFlavor и набору атрибутов. Может быть сложно найти принтер, поддерживающий PostScript, если оборудование вашего принтера не является достаточно современным. Вы можете проверить, какие документы поддерживаются следующим образом:

 DocFlavor[] docFalvor = prnSvc.getSupportedDocFlavors();
        for (int i = 0; i < docFalvor.length; i  ) {
            System.out.println(docFalvor[i].getMimeType());
        }
  

Для определения местоположения конкретной службы печати вы можете сделать что-то вроде этого:

 PrintService prnSvc = null;

    /* locate a print service that can handle it */
    PrintService[] pservices =
            PrintServiceLookup.lookupPrintServices(null, null);
    if (pservices.length > 0) {
        int ii=0;
        while(ii < pservices.length)
        {
            System.out.println("Named Printer found: " pservices[ii].getName());
            if (pservices[ii].getName().endsWith("YourPrinterName")) {
                prnSvc = pservices[ii];
                System.out.println("Named Printer selected: "   pservices[ii].getName()   "*");
                break;
            }
          ii  ;
        }
  

Комментарии:

1. Я получил следующий вывод DocFlavor, так будет ли моя печать печатать .txt,.pdf, doc и т.д.?? изображение / gif-изображение /gif-изображение / gif-изображение / jpeg-изображение / jpeg-изображение / png-изображение /png-изображение / png-приложение / x-java-jvm-приложение local-objectref /x-java-jvm-приложение local-objectref / приложение octet-stream / приложение octet-stream