Bom dia amigos, aqui na empresa meus aplicativos atualmente em VB6, utilizam dois tipos de impressão :
Laser/Jato (via crystal report) e Matricial(via LPT1)
Estou migrando para JAVA e gostaria de saber se algum de voces conhecem links,artigos,livros que tratam sobre este assunto pois utilizo muito isso aqui e não posso abrir mão desses dois tipos de impressão aqui.
Vc pode usar o JasperRepost… já para matricial, nunca precisei fazer e não sei se há suporte… bem, deve existir, em Java existe um monstrinho pra tudo!
Mas aqui mandamos correspondência para Muita Gente e sempre estou imprimindo Etiquetas em impressora Matricial (algo em torno de 5.000 etiquetas/mês) e preciso muito de impressão direto na LPT1.
[quote=vimieiro]Bom dia amigos, aqui na empresa meus aplicativos atualmente em VB6, utilizam dois tipos de impressão :
Laser/Jato (via crystal report) e Matricial(via LPT1)
Estou migrando para JAVA e gostaria de saber se algum de voces conhecem links,artigos,livros que tratam sobre este assunto pois utilizo muito isso aqui e não posso abrir mão desses dois tipos de impressão aqui.
Um forte abraço
Vimieiro
[/quote]
Olha uma classezinha prontinha q manda direto pra impressora matricial…
Da uma estudada a adequa a suas necessidades!!
public class PrintComm {
public static void sendTextToPrinter(String printerName, String jobName, String aText, String beginCommand, String endCommand) throws PrintException, InterruptedException {
//Attribute Set storage
PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
//We're looking for Text-capable printers
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
//Return list of printers capable of printing Text
PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
//Get the default printer
PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
//Display the print dialog with default printer selected
pras.add(new JobName(jobName, null));
pras.add(MediaTray.MAIN);
PrintService service = null;
if(printerName != null) {
// Seleciona o serviço cujo nome foi passado pelo parametro printerName
for(int i=0; i < printService.length; i++) {
if(printService[i].getName().equalsIgnoreCase(printerName)) {
service = printService[i];
break;
}
}
} else {
// Se o nome da impressora não foi passado então abre a janela para o usuario escolher
service = ServiceUI.printDialog(null, 50, 50, printService, defaultService, flavor, pras);
}
//If user selected "OK"...
if (service != null) {
//Create a print job
DocPrintJob job = service.createPrintJob();
Doc doc;
//Create storage for attributes
DocAttributeSet das = new HashDocAttributeSet();
//Create the print document from PDF file with default attributes
doc = new SimpleDoc( newByteArrayInputStream(beginCommand+aText+endCommand), flavor, das);
//Try some times...
boolean ok = false;
int trials = 0;
while (!ok && trials < 10) {
//Print the job
try {
job.print(doc, pras);
ok = true;
} catch (PrintException ex) {
ex.printStackTrace();
}
//Wait a few seconds for job to spool
Thread.sleep(2000);
trials++;
}
}
}
private static ByteArrayInputStream newByteArrayInputStream(String aText) {
ByteArrayInputStream retorno = new ByteArrayInputStream(aText.getBytes());
return retorno;
}
private static InputStream newInputStream(String aText) {
InputStream retorno =new ByteArrayInputStream(aText.getBytes());
return retorno;
}
}
Oi, estou com algumas duvidas em relaçao a esse codigo do andre2k2…
eu testei na minha HP DeskJet 695C e funciono mais ou menos, não pegou acentos, a impressora deu umas travadas e tive q clica no botao de puxa o papel pra ela começa imprimi… o motivo desses problemas é se o código serve apenas para impressora matricial?
gostaria de saber tambem a finalidade do campo jobName que não consegui entender… (sou novo em java)
Felipe, o jobName é o nome que ira identificar a impressão… quando você abre aquela janelinha que tem a fila de impressao (No windows abre clicando no icone da impressora que aparece na tray). Um exemplo: quando você manda o Word imprimir ele cria um Job com o nome ‘Documento do Word’, isso identifica que aquela impressão na fila é do Word. É só mesmo para aparecer na janelinha bonitinho, bem formatado, se nao me engano voce pode até passar nulo pro parametro.
Quanto a seu problema com a impressora DeskJet não posso te ajudar muito. Quando estava desenvolvendo a impressão do sistema que utiliza essa classe q eu te enviei, precisei estudar alguns parametros que você passa junto da String que deseja imprimir. Por exemplo: se voce que imprimir na matricial “Olá Mundo!” para formatação passavasse alguns caracteres especiais com parametros por exemplo o tamanho da fonte… ficaria assim “F14Olá mundo!”. Como fiz a impressão apenas para matriciais Epson ficou muito facil, estudei a especificação da Epson e formatei perfeitamente. Sugiro a você procurar por essas especificações da HP, especificamente do modelo de impressora onde voce deseja usar o sistema.
Por outro lado, essa classe não é muito util para impressoras jato de tinta ou laser, pois suporte a esse tipo de impressora em java é riquíssimo. Se for usar apenas impressoras assim procure mais um pouco a respeito de impressão em java.
Bom dia andre2k2,
Estou desenvolvendo uma forma de gerar etiquetas aqui na empresa porém será impresso em uma impressora matricial e estou com o problema citado nesse tópico, analisei a classe que vou postou, porém gostaria de saber como ela irá funcionar! Poderia me ajudar?