2015-04-08 3 views
2

Я хочу печатать напрямую с помощью линейного принтера, то есть матричного принтера, используя его функции возврата каретки вкладки шрифта и строки из моей программы JAVA. Я в основном знаю, как печатать из JAVA. Моя проблема заключается в том, что при печати JAVA мы сначала генерируем графическое изображение страницы для печати, а затем отправляем ее на печатаемый принтер. Но я не задаю свой вопрос по этим вопросам. Я хочу, чтобы прямо отправить текст в виде потока символов на принтер с помощью соответствующих команд для принтера для возврата каретки, фида линии, вкладок и шрифта принтера так же, как в старые времена, когда графические принтеры, такие как лазер или струйный принтер принтер не использовался.Как печатать с использованием линейного принтера dirictly из java с использованием шрифтов принтера?

Буду очень признателен, если кто-то может направить меня на эти вопросы. Заранее спасибо.

Дополнительная информация

Некоторые из комментариев предполагают простой метод печати из JTextComponent. Здесь нам не нужно выполнять задачу создания графической печати, которая автоматически обрабатывается JTextComponent, но мой вопрос заключается в том, как печатать без создания графической печати. Это означает, что сначала я выбираю шрифт для использования с доступными шрифтами в моем принтере, скажем, «курьер», а затем я отправил «A» на принтер, а принтер печатает «A» в «курьере», а затем, когда я отправил «B», на принтер принтер печатает «B» в «курьере» и так далее, пока я не изменю выбранный шрифт на моем принтере. Теперь в конце строки я отправил \ n для перевода строки, которая будет продвигать роликовый барабан моего принтера на одну строку, а \ r - на возврат каретки, что приведет к тому, что печатающая головка моего принтера вернется к началу строки.

Для пояснения Я не хочу использовать интерфейс для печати, так как метод печати этого интерфейса в основном используется для создания графического изображения с использованием графического объекта, который передается как параметр методу печати. После этого JVM отправляет этот графический объект на принтер, который будет напечатан как изображение. Это не то, что я хочу. Я хочу использовать функции линейного принтера для шрифтов и других команд.

+0

Я не могу понять процесс, с помощью которого я мог бы это сделать. Я попытался разобраться с моей проблемой, но все ответы приводят к графической печати с использованием java, которая не решает мою проблему. – Blip

+0

[Возможно, это поможет вам] (https://docs.oracle.com/javase/tutorial/uiswing/misc/printtext.html) –

+0

Вы пробовали метод класса 'JTextPane'' setText («hello») 'и отправляли его на принтер с помощью' print() '? –

ответ

1

Этот код не требует какого-либо Swing, связанного компонента, но все-таки нуждается в Graphics классе awt, но вы можете напечатать текст с консоли не существует ни один из компонентов пользовательского интерфейса отображается, просто тестировал:

import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.print.PageFormat; 
import java.awt.print.Printable; 
import java.awt.print.PrinterException; 
import java.awt.print.PrinterJob; 
import javax.print.PrintService; 
import javax.print.attribute.HashPrintRequestAttributeSet; 
import javax.print.attribute.PrintRequestAttributeSet; 
import javax.print.attribute.standard.Copies; 
import javax.print.attribute.standard.PageRanges; 


public class DirectPrint implements Printable { 

private PrintService[] printService; 
private String text; 

public DirectPrint() { 
    this.printService = PrinterJob.lookupPrintServices(); 
} 

public static void main(String[] args) { 
    DirectPrint lt = new DirectPrint(); 
    lt.printString("If this text gets printed, it will have worked! ;D"); 
} 

public void printString(String input) { 

    this.text = input; 

    PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet(); 
    aset.add(new PageRanges(1, 1)); 
    aset.add(new Copies(1)); 

    PrinterJob printJob = PrinterJob.getPrinterJob(); 
    printJob.setPrintable(this); 

    try { 
     printJob.setPrintService(getDefaultPrintService()); 
     //index of installed printers on you system 
     //not sure if default-printer is always '0' 
     printJob.print(aset); 
    } catch (PrinterException err) { 
     System.err.println(err); 
    } 
} 

public int print(Graphics g, PageFormat pf, int pageIndex) throws PrinterException { 
    Graphics2D g2 = (Graphics2D) g; 
    g2.translate(pf.getImageableX(), pf.getImageableY()); 
    g.drawString(String.valueOf(this.text), 14, 14); 
    return PAGE_EXISTS; 
    } 
} 

Метод getDefaultPrintService() может возвращать значение null, в зависимости от вашей системы.

Источник: CodeRanch

** EDIT **

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

InputStream in = null; 
try { 
log.debug("preparing input stream"); 
in = getFileTobePrinted(); 
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE; 

// find the printing service 
log.debug("fetching print service"); 
AttributeSet attributeSet = new HashAttributeSet(); 
attributeSet.add(new PrinterName("lq2170", null)); 
PrintService[] services = PrintServiceLookup.lookupPrintServices(null, attributeSet); 

// create the print job 
log.debug("creating print job"); 
DocPrintJob job = services[0].createPrintJob(); 
Doc doc = new SimpleDoc(in, flavor, null); 

// monitor print job events 
log.debug("preparing print job monitor"); 
PrintJobWatcher watcher = new PrintJobWatcher(job); 

// print it 
log.debug("start printing"); 
job.print(doc, null); 

// wait for the print job is done 
log.debug("waiting for the printing to finish"); 
watcher.waitForDone(); 

log.debug("done !"); 
    } finally { 
if (in != null) try { in.close(); } catch(Exception e) {} 
} 

Найдено Here

+0

Когда я использую g.drawString, я в основном генерирую графику текста в ** graphics ** объект, предоставляемый программой при вызове метода печати. Затем JVM переходит на печать графического объекта с помощью принтера. Но этого я не хочу. См. Дополнительную информацию выше. – Blip

+0

Я думал, что вы хотите * Отсутствует графический компонент UI, отображаемый на экране *? извините, тогда я тоже искал поиск, но не повезло. –

+0

@Blip проверить мой обновленный ответ ... У меня все еще есть ощущение, что это не то, что вы хотите, но я уверен, что он близок. –

1

Вы пробовали использовать This? но rtextpr jar является демо-версией, а позже вам нужно заплатить за лицензионную версию.

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