Impressão Direta na Impressora

7 respostas
P

Olá, existe alguma maneira de jogar um conteudo qualquer direto para impressora?, atualmente tenho um arquivo PDF, ao invês de criar esse arquivo preciso imprimir diretamente, impedindo que o usuário salve esse arquivo.

7 Respostas

P

Encontrei algo, mas preciso fazer uma formatação aceitável, o problema que era um documento pdf dividido em tabelas e colunas, existe algum componente ou alguma forma que jogue um determinado conteudo para uma impressora e possibilite uma formatação?

import java.io.ByteArrayInputStream;
import java.io.InputStream;

import javax.print.Doc;
import javax.print.DocFlavor;
import javax.print.DocPrintJob;
import javax.print.PrintException;
import javax.print.PrintService;
import javax.print.PrintServiceLookup;
import javax.print.SimpleDoc;

// Essa classe é a responsavel pela impressao. Ela detecta a impressora  
// instalada, recebe o texto e o imprime.  
public class Impressao {

	// variavel estatica porque será utilizada por inumeras threads
	private static PrintService impressora;

	public Impressao() {
		detectaImpressoras();
	}

	// O metodo verifica se existe impressora conectada e a
	// define como padrao.
	public void detectaImpressoras() {
		try {
			DocFlavor df = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
			PrintService[] ps = PrintServiceLookup.lookupPrintServices(df, null);
			for (PrintService p : ps) {
				if(p.getName()!=null && p.getName().contains("hp")){
					System.out.println("Impressora Selecionada: " + p.getName());
					System.out.println("Impressora encontrada: " + p.getName());
					impressora = p;
				}	
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public synchronized boolean imprime(String texto) {

		// se nao existir impressora, entao avisa usuario
		// senao imprime texto
		if (impressora == null) {
			String msg = "Nennhuma impressora foi encontrada. Instale uma impressora padrão \r\n(Generic Text Only) e reinicie o programa.";
			System.out.println(msg);
		} else {
			try {
				DocPrintJob dpj = impressora.createPrintJob();
				InputStream stream = new ByteArrayInputStream(texto.getBytes());
				DocFlavor flavor = DocFlavor.INPUT_STREAM.AUTOSENSE;
				Doc doc = new SimpleDoc(stream, flavor, null);
				dpj.print(doc, null);
				return true;
			} catch (PrintException e) {
				e.printStackTrace();
			}
		}
		return false;
	}
	public static void main(String[] args) {
		new Impressao().imprime("teste pedrosa dfsdfsdfsdffsdfsfdffsf" + System.getProperty("line.separator") + "asdad");
	}
}
Z

Um tempo atras estava precisando justamente disso, mas para web (JavaEE)

Consegui implementar mas so funciona pelo browser

P

Cara é para um sistema desktop, o pior problema é a formatação.

L

Olá

Deve haver meios porque volta e meia abro PDFs protegidos que não permitem salvar. O que o google, o site da Adobe ou o iText (ou similar) dizem sobre isto?

[]s
Luca

P

Realmente como já esta desenvolvido com o iText deve existir algum método que torne o arquivo seguro, alguém já implementou algo assim com o iText?

Na documentação tem a classe PdfEncryptor.

P

Achei um exemplo que coloca senha e habilita a impressão:

public static void main(String[] args) {
		System.out.println("Encryptor example");
		try {
			PdfReader reader = new PdfReader("/arquivo.pdf");
			PdfEncryptor.encrypt(reader,
					new FileOutputStream("/arquivoencrypted.pdf"),
					"us",
					"pwd"l,
					PdfWriter.AllowPrinting,
					false);
		}
		catch(Exception e) {
			e.printStackTrace();
		}
}

Eu preciso que desabilite o botão de Salvar, esse cara le o arquivo original e joga senha, também achei o jeito de jogar senha na hora da criação do arquivo.

writer.setEncryption(false, "user", "password", 0);

Mas está deprecated e também não desabilita o botão salvar.

P

Alguma luz?

Criado 10 de abril de 2008
Ultima resposta 30 de abr. de 2008
Respostas 7
Participantes 3