2015-04-30 5 views
0

Я просмотрел несколько сообщений и составил код для печати PDF-файла. Однако что-то не так. Программа завершается без ошибок, но не печатает ничего:Печать PDF из java

public static void print(String file) { 
    FileInputStream psStream = null; 
    try { 
     psStream = new FileInputStream(file); 
    } catch (FileNotFoundException ffne) { 
     ffne.printStackTrace(); 
    } 
    if (psStream == null) { 
     return; 
    } 
    DocFlavor psInFormat = DocFlavor.INPUT_STREAM.AUTOSENSE; 
    Doc myDoc = new SimpleDoc(psStream, psInFormat, null); 
    PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
    PrintService[] services = PrintServiceLookup.lookupPrintServices(psInFormat, aset); 

    // this step is necessary because I have several printers configured 
    PrintService myPrinter = null; 
    for (int i = 0; i < services.length; i++){ 
     String svcName = services[i].toString(); 
     System.out.println("service found: "+svcName); 

     if (svcName.equals("Win32 Printer : Microsoft XPS Document Writer")){ 
      myPrinter = services[i]; 
      System.out.println("Destination printer found: "+svcName); 
      break; 
     } 
    } 

    if (myPrinter != null) {    
     DocPrintJob job = myPrinter.createPrintJob(); 
     try { 
      job.print(myDoc, aset); 

     } catch (Exception pe) {pe.printStackTrace();} 
    } else { 
     System.out.println("no printer services found"); 
    } 
} 

Я пытаюсь отправить документ Microsoft XPS-документов для целей тестирования, но я не вижу, как это может привести к поломке при печати файла.

+0

Если у вас есть знакомство с Python, вы должны проверить PyLatex (https://github.com/JelteF/PyLaTeX). Это довольно легко, и вы можете следовать из примера в документах – NumenorForLife

ответ

0

Я был бы шокирован, если бы это сработало. Реализация драйвера печати Java обычно просто передает документ на принтер. Если у принтера есть собственные возможности обработки PDF-документов, тогда он распечатает PDF-файл, но это довольно ограниченное подмножество всех принтеров (и я не могу себе представить, что драйвер печати XPS Document Writer имеет возможность - но кто знает, возможно, я ошибаюсь в этом).

FWIW, один из наших продуктов - это большая система управления печатными изданиями, и нам пришлось отказаться от собственного кода, чтобы надежно печатать PDF-файлы.

+0

Хорошо, спасибо, что указали это. В любом случае, я бы использовал физический принтер. вы можете предложить надежный способ печати файлов pdf/rtf в целом из java? – amin365

+0

Как я уже сказал, единственным способом, который мы нашли, чтобы сделать это надежно (т. Е. Поддерживать любое оборудование принтера), было использование собственного кода. Если у вас есть контроль над оборудованием, то я полагаю, вы могли бы выбрать принтер, который поддерживает формат PDF, а затем просто портировать PDF на принтер, но это не тот маршрут, который мы использовали b/c, мы должны были поддерживать все оборудование. –

Смежные вопросы