принтеры itext и dotmatrix - PullRequest
       34

принтеры itext и dotmatrix

2 голосов
/ 28 ноября 2011

У меня есть страница JSP, которая просто получает параметры, запрашивает базу данных, генерирует PDF-файл счета-фактуры и отправляет молча на принтер по умолчанию. Я использую библиотеку itext.

Счет должен быть напечатан на матричном принтере с непрерывной бумагой.

Размер страницы каждой накладной имеет размер a5.

Если я выберу размер страницы как a5, код создаст PDF, как показано здесь

a5 портрет

при печати печатает одну страницу и оставляет другую страницу пустой. Пользователь должен прокрутить бумагу назад вручную.

Если я выберу размер страницы как ландшафт a5 (a5.rotate ()), код создаст PDF, как показано здесь, что лучше.

a5 пейзаж

, но когда он печатается на бумаге, он начинает печатать страницу вертикально, обрабатывая принтер с лотком для бумаги формата a4.

Мне кажется, мне нужно определить мой принтер как матричный принтер с непрерывной бумагой.

Код, который я использую:

    Document document = new Document(PageSize.A5,0,0,0,0);
try {   
 PdfWriter writer = PdfWriter.getInstance(document, response.getOutputStream());
 writer.addViewerPreference(PdfName.PRINTSCALING, PdfName.NONE);
document.open();


StringBuffer javascript = new StringBuffer();
 javascript.append("this.print({bUI: false, bSilent: true, bShrinkToFit: true});");
 PdfAction pdfAction= PdfAction.javaScript(javascript.toString(), writer);
 writer.addJavaScript(pdfAction);
 writer.addViewerPreference(PdfName.PRINTSCALING, PdfName.NONE);
 PdfPTable table = new PdfPTable(3); // 3 columns.
 table.setWidthPercentage(100);

 PdfPCell cell1 = new PdfPCell(new Paragraph(""));
 PdfPCell cell2 = new PdfPCell(new Paragraph(""));
 PdfPCell cell3 = new PdfPCell(new Paragraph(MakbuzNo,FontFactory.getFont(FontFactory.COURIER,9)));
 cell3.setLeading(16f, 0f);
 cell1.setBorder(Rectangle.NO_BORDER);
 cell2.setBorder(Rectangle.NO_BORDER);
 cell3.setBorder(Rectangle.NO_BORDER);

cell3.setHorizontalAlignment(Element.ALIGN_RIGHT);
table.addCell(cell1);
table.addCell(cell2);    
table.addCell(cell3);    

cell1 = new PdfPCell(new Paragraph(""));
cell2 = new PdfPCell(new Paragraph(""));
cell3 = new PdfPCell(new Paragraph(Duzenleyen,FontFactory.getFont(FontFactory.COURIER,9)));
cell3.setLeading(16f, 0f);
cell3.setHorizontalAlignment(Element.ALIGN_RIGHT);

cell1.setBorder(Rectangle.NO_BORDER);
cell2.setBorder(Rectangle.NO_BORDER);
cell3.setBorder(Rectangle.NO_BORDER);
table.addCell(cell1);
table.addCell(cell2);    
table.addCell(cell3);    


cell1 = new PdfPCell(new Paragraph(MSISDN,FontFactory.getFont(FontFactory.COURIER,9)));
cell2 = new PdfPCell(new Paragraph(""));
cell3 = new PdfPCell(new Paragraph(DuzenlemeSaati,FontFactory.getFont(FontFactory.COURIER,9)));
cell1.setLeading(16f, 0f);
cell3.setLeading(16f, 0f);
cell1.setHorizontalAlignment(Element.ALIGN_LEFT);
cell3.setHorizontalAlignment(Element.ALIGN_RIGHT);

cell1.setBorder(Rectangle.NO_BORDER);
cell2.setBorder(Rectangle.NO_BORDER);
cell3.setBorder(Rectangle.NO_BORDER);
table.addCell(cell1);
table.addCell(cell2);    
table.addCell(cell3);   

cell1 = new PdfPCell(new Paragraph(""));
cell2 = new PdfPCell(new Paragraph(""));
cell3 = new PdfPCell(new Paragraph(DuzenlemeTarihi,FontFactory.getFont(FontFactory.COURIER,9)));
cell3.setLeading(16f, 0f);
cell3.setHorizontalAlignment(Element.ALIGN_RIGHT);

cell1.setBorder(Rectangle.NO_BORDER);
cell2.setBorder(Rectangle.NO_BORDER);
cell3.setBorder(Rectangle.NO_BORDER);
table.addCell(cell1);
table.addCell(cell2);    
table.addCell(cell3);

cell1 = new PdfPCell(new Paragraph(" "));
cell2 = new PdfPCell(new Paragraph(" "));
cell3 = new PdfPCell(new Paragraph(" "));
cell1.setLeading(45f, 0f);
cell1.setBorder(Rectangle.NO_BORDER);
cell2.setBorder(Rectangle.NO_BORDER);
cell3.setBorder(Rectangle.NO_BORDER);

table.addCell(cell1);
table.addCell(cell2);    
table.addCell(cell3);

cell1 = new PdfPCell(new Paragraph(izahat,FontFactory.getFont(FontFactory.COURIER,9)));
cell1.setHorizontalAlignment(Element.ALIGN_LEFT);
cell1.setColspan(3);
cell1.setBorder(Rectangle.NO_BORDER);  
table.addCell(cell1);

cell1 = new PdfPCell(new Paragraph(" "));
cell2 = new PdfPCell(new Paragraph(" "));
cell3 = new PdfPCell(new Paragraph(" "));
cell1.setLeading(75f, 0f);
cell1.setBorder(Rectangle.NO_BORDER);
cell2.setBorder(Rectangle.NO_BORDER);
cell3.setBorder(Rectangle.NO_BORDER);

table.addCell(cell1);
table.addCell(cell2);    
table.addCell(cell3);

cell1 = new PdfPCell(new Paragraph(kopyayazi,FontFactory.getFont(FontFactory.COURIER,9)));
cell1.setHorizontalAlignment(Element.ALIGN_CENTER);
cell1.setColspan(3);
cell1.setBorder(Rectangle.NO_BORDER);  
table.addCell(cell1);

cell1 = new PdfPCell(new Paragraph(TutarYazi,FontFactory.getFont(FontFactory.COURIER,9)));
cell1.setHorizontalAlignment(Element.ALIGN_LEFT);
cell1.setColspan(2);
cell3 = new PdfPCell(new Paragraph(ToplamTutar,FontFactory.getFont(FontFactory.COURIER,9)));
cell3.setHorizontalAlignment(Element.ALIGN_RIGHT);
cell1.setLeading(16f, 0f);
cell3.setLeading(16f, 0f);
cell1.setBorder(Rectangle.NO_BORDER);
cell3.setBorder(Rectangle.NO_BORDER);

table.addCell(cell1);
table.addCell(cell3);
document.add(table);
document.newPage();
    } catch (DocumentException de) {
        de.printStackTrace();
        System.err.println("document: " + de.getMessage());
    }

    document.close();

Так как использовать принтер dotmatrix с непрерывной бумагой и остановить прокрутку бумаги, когда символ на странице уже напечатан?

Ответы [ 3 ]

1 голос
/ 28 ноября 2011

Добро пожаловать в ад :-) Вот все демоны, у которых есть крошечные когти в вашем процессе:

  • Сам файл PDF имеет ориентацию
  • Просмотрщик PDF / принтер может попытаться повернуть страницы, чтобы они соответствовали странице
  • Драйвер принтера тоже может это сделать
  • Если бы у вас был лазерный принтер, это также могло бы повернуть страницу.

Самое «простое» решение - визуализировать PDF в BufferedImage, сохранить его в виде пиксельного изображения (скажем, PNG) и распечатать. Это позволит вам убедиться, что ориентация соответствует вашей.

Также проверьте настройки драйвера принтера: некоторые из них отправляют символ «Подача формы» после печати файла, который приводит к пустой странице, если вы заполните всю страницу a5.

0 голосов
/ 16 января 2012

После долгих исследований я не смог найти способа печати на матричном принтере клиентов без какой-либо дополнительной установки.

Самый эффективный способ - иметь подписанный апплет. Требуется установка Java на стороне клиента.

0 голосов
/ 28 ноября 2011

У меня возникла аналогичная проблема с печатью отчетов Jasper (с непрерывной бумагой). После нескольких дней работы с кодом я нашел решение, которое, я думаю, будет работать для вас.

Я думаю, вам нужно сгенерировать PDF-файл как вывод и просто получить AdobeReader exe для печати, вы можете использовать

AcroRd32.exe / N / T PdfFile PrinterName

параметров для достижения этой цели.

...