2016-05-20 1 views
0

Я хочу напечатать файл. Я написал этот код для этого. Но он не печатает мой файл. для выбора услуги:Файл не был напечатан Через устройство принтера в java

 String printerName = "Canon MF4320-4350".toLowerCase(); 
    PrintService service = null; 

    PrintService[] services = PrinterJob.lookupPrintServices(); 

    // Retrieve a print service from the array 
    for (int index = 0; service == null && index < services.length; index++) { 

     if (services[index].getName().toLowerCase().indexOf(printerName) >= 0) { 
      service = services[index]; 
     } 
    } 

для печати:

byte[] bytes = null; 
    Path path = FileSystems.getDefault().getPath("D:\\Test.docx"); 
    bytes = Files.readAllBytes(path); 
    DocFlavor docFlavor = DocFlavor.BYTE_ARRAY.AUTOSENSE; 
    PrintRequestAttributeSet faset = new HashPrintRequestAttributeSet(); 
    faset.add(new Copies(5)); 
    faset.add(Sides.ONE_SIDED); 
    DocAttributeSet daset = new HashDocAttributeSet(); 
    daset.add(OrientationRequested.LANDSCAPE); 
    daset.add(Sides.ONE_SIDED); 
    Doc myDoc = new SimpleDoc(bytes, docFlavor, daset); 
    //create the DocPrintJob 
    DocPrintJob job = service.createPrintJob(); 
    job.print(myDoc, faset); 

ответ

1

Это не то, как работает печать - когда слово печатает docx файла, он не посылает необработанные байты файла на принтер , Вместо этого он переводит файл в низкоуровневые команды печати, которые он отправляет драйверу печати.

API печати Java может обрабатывать 2d rendering via drawing commands, или он позволяет отправлять необработанный поток байтов на принтер, но тогда вы несете ответственность за создание байтов, которые понимает принтер.

См. Также this question, а также посмотреть на docx4j.

+0

Спасибо, Адриан, но если я, но .txt файл здесь, он тоже не работает. – John

+1

Если вы планируете печатать, отправив поток потока на принтер, наилучшей ссылкой являются фильтры, используемые печатью Linux для вашего принтера (https://wiki.debian.org/PrinterDriver/Canon/UFR-II). Я не думаю, что струйные принтеры Canon печатают обычный текст без перевода в UFR. –

+0

Чем вы :), Есть ли другой способ, кроме отправки потока байтов на принтер? – John

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