Bom dia.
Eu estava procurando como imprimir uma JTextArea em uma impressora. E fui estuda sobre o [ javax.print ] , pesquisando bastante montei o código abaixo.
O problema é que parece estar tudo correto, não ocorre nenhum erro de Exception e a String da JTextArea não é imprimida.
Segue abaixo o código pra voces darem uma olhada. Gostaria da ajuda de voces para para encontrar o problema.
public class Imprimir extends javax.swing.JFrame {
private static PrintService impressora;
private String conteudo;
public Imprimir() {
initComponents();
}
private void initComponents() {
// codigo omitido // * Mto Grande
);
}
private void imprimirActionPerformed(java.awt.event.ActionEvent evt) { // metodo do botao IMPRIMIR
// TODO add your handling code here:
this.imprime(conteudo);
}
public void ProcuraImpressoras(String texto) {
DefaultTableModel modtable = (DefaultTableModel) tabela.getModel();
conteudo = texto;
try {
DocFlavor df = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
PrintService[] ps = PrintServiceLookup.lookupPrintServices(df, null);
for (PrintService p : ps) {
modtable.addRow(new Object[] { ( p.getName()) } );
impressora = p ;
p.createPrintJob () ;
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null,"Erro a detectar impressora! " + e, " Erro!",JOptionPane.ERROR_MESSAGE);
}
}
public void imprime(String texto) {
if (impressora == null)
{
JOptionPane.showMessageDialog(null,"Nenhuma impressora foi encontrada.", " Erro!",JOptionPane.ERROR_MESSAGE);
}
else
{
try
{
DocPrintJob saida = impressora.createPrintJob(); // Gera saída para a impressora e salva na variavel
InputStream texto_convertido = new ByteArrayInputStream(texto.getBytes()); // Converte o texto para bytes e salva na variavel
DocFlavor tipo = DocFlavor.INPUT_STREAM.AUTOSENSE; // Define o tipo do documento EX: PDF, TXT
Doc doc = new SimpleDoc(texto_convertido, tipo, null); // Converte e Carrega o documento ( documento em bytes , tipo do documento )
saida.print(doc, null); // Envia o documento para impressao na saida da impressora criada
JOptionPane.showMessageDialog(null,"Imprimindo...", " Ok!",JOptionPane.INFORMATION_MESSAGE); // avisa ao usuario que esta imprimindo
}
catch (PrintException e)
{
JOptionPane.showMessageDialog(null,"Erro ao imprimir! --> " + e, " Erro!",JOptionPane.ERROR_MESSAGE); // avis ao usuario se der erro na impressao
}
}
}
E na classe que chama esta esta assim.
Imprimir i = new Imprimir();
i.setVisible(true);
i.ProcuraImpressoras(texto.getText());