Neste exemplo, imprimimos um arquivo PDF direto do sistema. Para isso, basta informar uma parte ou todo o nome da impressora e indicar a localização do arquivo. Minha impressora é a printer001 e o meu arquivo como podem ver é o c:/teste.pdf. Deixem seus comentários.
package printpdf;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
public class PrintPDFFactory {
private static PrintService impressora;
public void printPDF(File f){
try{
DocFlavor dflavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
PrintService[] impressoras = PrintServiceLookup.lookupPrintServices(dflavor, null);
for(PrintService ps : impressoras){
System.out.println("Impressora Encontrada: "+ps.getName());
if(ps.getName().contains("printer001")){
System.out.println("Impressora Selecionada: "+ps.getName());
impressora = ps;
break;
}
}
DocPrintJob dpj = impressora.createPrintJob();
FileInputStream fis = new FileInputStream(f);
byte[] buffer = new byte[fis.available()];
int buff = 0;
while((buff = fis.available()) != 0){
fis.read(buffer, 0, buff);
}
System.out.println(new String(buffer));
InputStream stream = new ByteArrayInputStream(buffer);
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
Doc doc = new SimpleDoc(stream, flavor, null);
dpj.print(doc, null);
}catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
PrintPDFFactory pdffactory = new PrintPDFFactory();
pdffactory.printPDF(new File("c:/teste.pdf"));
}
}
package printpdf;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;
public class PrintPDFFactory {
private static PrintService impressora;
public void printPDF(File f){
try{
DocFlavor dflavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
PrintService[] impressoras = PrintServiceLookup.lookupPrintServices(dflavor, null);
for(PrintService ps : impressoras){
System.out.println("Impressora Encontrada: "+ps.getName());
if(ps.getName().contains("printer001")){
System.out.println("Impressora Selecionada: "+ps.getName());
impressora = ps;
break;
}
}
DocPrintJob dpj = impressora.createPrintJob();
FileInputStream fis = new FileInputStream(f);
byte[] buffer = new byte[fis.available()];
int buff = 0;
while((buff = fis.available()) != 0){
fis.read(buffer, 0, buff);
}
System.out.println(new String(buffer));
InputStream stream = new ByteArrayInputStream(buffer);
DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
Doc doc = new SimpleDoc(stream, flavor, null);
dpj.print(doc, null);
}catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
PrintPDFFactory pdffactory = new PrintPDFFactory();
pdffactory.printPDF(new File("c:/teste.pdf"));
}
}
11 comentários:
OI, Testei este codigo mas a impressao sai criptografada.
Valeu, Douglas! Seu código funcionou perfeitamente, obrigado.
Não consegui fazer funcionar, o documento vai para a impressora e gera um erro, não imprime de jeito nenhum. O que pode ser? O erro não é informado
TA MOH BAO ESSE NEGOCIO AI
Cara, comigo deu um NullPointerException na linha 50, onde eu passo como parâmetro do método printPDF o caminho do arquivo.
Este método exige um parâmetro do tipo File, eu tentei mudar para String e passar uma String com o caminho, mas não deu certo tb.
Pode me ajudar?
Parabens pela iniciativa. Só um detalhe para quem nao conseguiu imprimir: A impressora tem que reconhecer a PDF nativamente. Por isso que alguns estão obtendo resultados inesperados na impressão.
Verifiquem se a sua impressora tem a capacidade de reconhecer o PDF nativamente.
Estou com problema para imprimir, o arquivo vai para a fila de impressão e tranca a impressora, não imprime, tenho que cancelar a impressão, alguém teve o mesmo problema?
Obrigado
Dougas, saiba que até hoje seu post esta ajudando alguém, parabéns minha joia...
Valeu, salvou meu dia..
Olá Douglas muito bom o seu código parabéns pela iniciativa.
Queria te perguntar se desejo imprimir todos os PDF´s de uma pasta que eu configurei no meu projeto, eu precisaria fazer a localização da impressora apenas uma vez como poderia modificar a classe para este fim.
Como seria para verificar se uma impressora reconhece um PDF Nativamente? estou com o mesmo problema do Adriano ou seja o arquivo vai para a fila de impressão e tranca a impressora, não imprime, tenho que cancelar a impressão alguém teria uma dica?
Postar um comentário