Принтер не печатает нет java

PDF Java print: задание отправлено в очередь заданий принтера, но ничего не печатается

Я пытаюсь распечатать документ PDF.
Я вижу задание в очереди принтера, а затем вижу, что оно исчезает, как если бы принтер завершил свою работу.

Но проблема в том, что ничего не печатает. Я не могу понять, что не так в моем коде.

PrintService[] printServices = PrintServiceLookup.lookupPrintServices(null,null); PrintService service = null; for (String imprimante : listImprimantes) < for( PrintService printService : printServices ) < Attribute[] attrs = printService.getAttributes().toArray(); for (int j=0; j> > > > InputStream fi = new ByteArrayInputStream(baos.toByteArray()); DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; DocPrintJob printJob = service.createPrintJob(); Doc doc = new SimpleDoc(fi, flavor, null); try < if (doc != null) < printJob.print(doc, null); >> catch (PrintException e1)

Если кто-нибудь может помочь мне в этом.

1 ответ

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

Я сталкивался с этой проблемой в Windows (7), но не в Linux (Fedora), поэтому первым делом я проверил установку драйверов.

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

  1. Преобразуйте PDF в PS или что-то подобное перед отправкой на принтер.
  2. Используйте стороннюю библиотеку, например Apache PdfBox (текущая версия 2.0.2).

Я выбрал решение 2, и оно работает как шарм. Приятно то, что он также использует PrintService с атрибутами, так что вы можете работать со страницами, лотками принтера и множеством опций.

private boolean print(PrintService printService, InputStream inputStream, PrintRequestAttributeSet attributes) throws PrintException < try < PDDocument pdf = PDDocument.load(inputStream); PrinterJob job = PrinterJob.getPrinterJob(); job.setPrintService(printService); job.setPageable(new PDFPageable(pdf)); job.print(attributes); pdf.close(); >catch (PrinterException e) < logger.error("Error when printing PDF file using the printer <>", printService.getName(), e); throw new PrintException("Printer exception", e); > catch (IOException e) < logger.error("Error when loading PDF from input stream", e); throw new PrintException("Input exception", e); >return true; > 

Источник

Читайте также:  Learning to code with python

Java: печать вывода программы на физический принтер

Если бы я должен был догадаться, я бы подумал, что, возможно, я пишу вывод в файл так, что Принтер не будет, но не говорит мне. В любом случае, в этом коде есть совсем немного, что у меня нет четкого понимания, поэтому, пожалуйста, дайте мне знать, что вы можете найти.

private void printToPrinter() < File output = new File("PrintFile.txt"); output.setWritable(true); //Will become the user-selected printer. Object selection = null; try < BufferedWriter out = new BufferedWriter(new FileWriter(output)); out.write(calculationTextArea.getText() + "\n" + specificTextArea.getText()); out.close(); >catch (java.io.IOException e) < System.out.println("Unable to write Output to disk, error occured in saveToFile() Method."); >FileInputStream textStream = null; try < textStream = new FileInputStream("PrintFile.txt"); >catch (java.io.FileNotFoundException e) < System.out.println("Error trying to find the print file created in the printToPrinter() method"); >DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; Doc mydoc = new SimpleDoc(textStream, flavor, null); //Look up available printers. PrintService[] printers = PrintServiceLookup.lookupPrintServices(flavor, null); if (printers.length == 0) < // No printers found. Inform user. jOptionPane2.showMessageDialog(this, "No printers could be found on your system!", "Error!", JOptionPane.ERROR_MESSAGE); >else < selection = jOptionPane2.showInputDialog(this, "Please select the desired printer:", "Print", JOptionPane.INFORMATION_MESSAGE, null, printers, PrintServiceLookup.lookupDefaultPrintService()); if (selection instanceof PrintService) < PrintService chosenPrinter = (PrintService) selection; DocPrintJob printJob = chosenPrinter.createPrintJob(); try < printJob.print(mydoc, null); >catch (javax.print.PrintException e) < jOptionPane2.showMessageDialog(this, "Unknown error occured while attempting to print.", "Error!", JOptionPane.ERROR_MESSAGE); >> > > 

принтер что-нибудь распечатывает? Даже пустая страница? Можете ли вы распечатать на виртуальном принтере и захватить вывод? Такие как (Microsoft XPS Document Writer)

Принтер ничего не печатает, нет пустой страницы. Когда я проверил информацию о заданиях «печати java», которые он получал, он получил следующее сообщение о работе: «Этот документ не соответствует соглашениям о структурировании документов Adobe и может печататься неправильно!» В настоящее время я пытаюсь найти способ перехватить документ, прежде чем он отправится на принтер, чтобы дважды проверить его действительность.

3 ответа

Итак, я нашел способ, который отлично подходит для моей ситуации, и я подумал, что просто опубликую, что это было, если бы это было полезно кому угодно.

Основы решения заключаются в том, что у Java есть собственный полноценный (по крайней мере, по сравнению с моим) printDialog popUp, который имеет больше, чем мне нужно (редактирование макета страницы, предварительный просмотр и т.д.), и все, что вам нужно сделать, чтобы использовать его это объект, который реализует Printable, и именно в этом объекте вы создаете графику и рисуете свой документ.

Мне просто нужно было нарисовать выходную строку String, и это было легко сделано, я даже нашел StringReader, поэтому я могу остановить наивно Написание файла, чтобы получить свой вывод в BufferedReader.

Вот код. Есть две части: метод и класс, где я рисую изображение:

private void printToPrinter() < String printData = CalculationTextArea.getText() + "\n" + SpecificTextArea.getText(); PrinterJob job = PrinterJob.getPrinterJob(); job.setPrintable(new OutputPrinter(printData)); boolean doPrint = job.printDialog(); if (doPrint) < try < job.print(); >catch (PrinterException e) < // Print job did not complete. >> > 

И вот класс, в котором печатается документ:

public class OutputPrinter implements Printable < private String printData; public OutputPrinter(String printDataIn) < this.printData = printDataIn; >@Override public int print(Graphics g, PageFormat pf, int page) throws PrinterException < // Should only have one page, and page # is zero-based. if (page >0) < return NO_SUCH_PAGE; >// Adding the "Imageable" to the x and y puts the margins on the page. // To make it safe for printing. Graphics2D g2d = (Graphics2D)g; int x = (int) pf.getImageableX(); int y = (int) pf.getImageableY(); g2d.translate(x, y); // Calculate the line height Font font = new Font("Serif", Font.PLAIN, 10); FontMetrics metrics = g.getFontMetrics(font); int lineHeight = metrics.getHeight(); BufferedReader br = new BufferedReader(new StringReader(printData)); // Draw the page: try < String line; // Just a safety net in case no margin was added. x += 50; y += 50; while ((line = br.readLine()) != null) < y += lineHeight; g2d.drawString(line, x, y); >> catch (IOException e) < // >return PAGE_EXISTS; > > 

В любом случае я решил эту проблему! Надеюсь, это может быть полезно кому-то!

Возможно, в вашем коде есть изъян. В начале вы переводите начало системы координат в начало отображаемой области ( g2d.translate(x, y) ). После этого вы можете рисовать любые объекты с координатами, относящимися к этому источнику. Однако вы сохраняете координаты отображаемой области x / y, чтобы использовать ее позже (что бессмысленно, поскольку вы уже перевели начало координат в эти координаты)

Возможным решением может быть либо удаление вызова g2d.translate(x, y); или изменение x+=50; y+=50; x=50;y=50;

Создайте JTextComponent (я предлагаю JTextArea , чтобы вы могли использовать append() ), и добавьте то, что вам нужно в поле. Не отображать его на экране, это просто скрытое поле для печати. ​​

Все JTextComponent имеют метод print() . Просто позвоните hiddenTextArea.print() , а остальная часть будет обработана для вас.

 JTextArea hiddenTextArea = new JTextArea(); for (String s : dataToPrintCollection) < hiddenTextArea.append(s + "\n"); >try < hiddenTextArea.print(); >catch (PrinterException e) <> 

вместо создания Doc вы можете напрямую печатать свою графику JFrame/JPanel. Этот код должен работать:

PrinterJob pj = PrinterJob.getPrinterJob(); pj.setJobName("name"); PageFormat format = pj.getPageFormat(null); pj.setPrintable (new Printable() < @Override public int print(Graphics pg, PageFormat pf, int pageNum) throws PrinterException < if (pageNum >0) < return Printable.NO_SUCH_PAGE; >Graphics2D g2 = (Graphics2D) pg; this.paint(g2); return Printable.PAGE_EXISTS; > >, format); if (pj.printDialog() == false) return; pj.print(); > catch (PrinterException ex) < // handle exception >> 

Спасибо за ответ! Это может сработать, но я вытащил из двух отдельных JTextAreas на двух разных вкладках. Дело в том, что я знаю, что они всегда смогут поместиться на одной странице, поэтому я бы предпочел извлечь текст из них и распечатать на одной странице для простоты пользователя.

Источник

код печати Java не работает

Я использую приведенный ниже код java для печати текстового файла на USB-принтере HP DeskJet1000, подключенном к моему компьютеру. Всякий раз, когда я запускаю этот код, задание на печать отправляется, но принтер ничего не печатает. Состояние показывает, что принтер печатает, но он даже не забирает страницу. Пожалуйста помоги! Мой код:

package printing; import java.io.FileInputStream; import javax.print.*; import javax.print.attribute.HashPrintRequestAttributeSet; import javax.print.attribute.PrintRequestAttributeSet; /** @author Majid */ public class Printing < public static void main (String [] args) < // TODO code application logic here DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet (); /* locate a print service that can handle it */ PrintService [] pservices = PrintServiceLookup.lookupPrintServices (flavor, aset); /* create a print job for the chosen service */ int printnbr = 0; DocPrintJob pj = pservices [printnbr].createPrintJob (); try < FileInputStream fis = new FileInputStream ("e:/fypdatabase/test.txt"); Doc doc = new SimpleDoc (fis, flavor, null); //PrintJobWatcher pjDone = new PrintJobWatcher (pj); /* print the doc as specified */ pj.print (doc, aset); >catch (Exception ex) < ex.printStackTrace (); >> > 

Вы не проверяете, сколько сервисов печати было возвращено, вы просто указываете код 0? (Просто интересно, если у вас установлен какой-нибудь псевдопринтер, например)

@ Бендж, я проверил все, и, как я уже сказал, я вижу задание на печать в окне состояния, принтер просто не печатает задание.

Источник

Печать на «Bixolon Thermal Printer» с использованием JAVA, ошибка «Страницы не найдены!»

Я пытаюсь использовать термопринтер «Bixolon SRP-F310» и печатать некоторый текст с помощью JAVA PrintService. Принтер обнаружен, и при вызове функции печати нет исключения. Я вижу в веб-интерфейсе чашек, что вызывается событие печати. Однако принтер не печатает и появляется сообщение об ошибке «Нет страниц!» можно увидеть в веб-интерфейсе чашек. Любая помощь будет оценена. Я включил скриншот веб-интерфейса чашек и журналы ошибок.

import javax.print.*; import java.util.Arrays; import java.util.List; public class Printer < static Printer INSTANCE; public static void main(String[] args) < INSTANCE = new Printer(); Listservices = INSTANCE.getServicesByName("BIXOLON_SRP-F310"); if(services == null) < throw new RuntimeException("No printer services available"); >INSTANCE.printServices(services); try < INSTANCE.print(services.get(0), "Hello"); >catch (Exception e) < e.printStackTrace(); >> public List getServicesByName(String serviceName) < //Find printer service by name AttributeSet aset = new HashAttributeSet(); aset.add(new PrinterName(serviceName, null)); return Arrays.asList(PrintServiceLookup.lookupPrintServices(null, aset)); >public void print(PrintService service, String printData) throws Exception < if(service == null) < throw new Exception("Service is not valid"); >if(printData == null) < throw new Exception("Nothing to print"); >PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet(); pras.add(new Copies(1)); pras.add(new PrinterResolution(180,180,PrinterResolution.DPI)); DocPrintJob job = service.createPrintJob(); DocAttributeSet das = new HashDocAttributeSet(); das.add(new PrinterResolution(180,180,PrinterResolution.DPI)); byte[] desc = printData.getBytes(); Doc doc = new SimpleDoc(desc, DocFlavor.BYTE_ARRAY.AUTOSENSE, das); try < job.print(doc, pras); >catch (Exception e) < e.printStackTrace(); >> public void printServices(List services) < System.out.println("Printer Services found:"); for (PrintService service : services) < System.out.println("\t" + service); >> > 

Источник

Задание на печать отправлено на принтер, но ничего не напечатано. Джава

У меня проблема с сервисом печати Java. Мне нужно распечатать простой текстовый документ на моем принтере по умолчанию. Я использую HP Deskjet в качестве принтера на компьютере с Windows, все драйверы установлены. Это исходный код, который я использую:

import java.io.*; import javax.print.*; public class PrintTest < public static void main(String[] args) throws IOException < File file = new File("print.txt"); InputStream is = new BufferedInputStream(new FileInputStream(file)); //Discover the default print service. PrintService service = PrintServiceLookup.lookupDefaultPrintService(); //Doc flavor specifies the output format of the file. DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; // Create the print job DocPrintJob job = service.createPrintJob(); //Create the Doc Doc doc = new SimpleDoc(is, flavor, null); //Order to print try < job.print(doc, null); >catch (PrintException e) < e.printStackTrace(); >is.close(); System.out.println("Printing done. "); > > 

Я вижу задание на печать в очереди за несколько миллисекунд до того, как оно исчезнет. Но ничего не печатается. Я слышал, это потому что Java Print Service в JDK 1.6 все еще глючит. Но я не совсем уверен. Есть идеи почему?

1 ответ

Я знаю, что это очень поздний ответ, но у меня была такая же проблема в Windows с PDF-файлами (не с текстом). Кажется, что принтеры могут не справиться с собственными PDF-файлами, поэтому работа принимается, но ничего не происходит (без ошибок). Я решил эту проблему с помощью сторонней библиотеки Apache PdfBox, и это сработало как шарм.

Источник

Оцените статью