-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathimpressao.java
More file actions
118 lines (100 loc) · 3.58 KB
/
impressao.java
File metadata and controls
118 lines (100 loc) · 3.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.List;
import javax.print.PrintService;
import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage;
import com.sun.pdfview.PDFRenderer;
/**
* @author Giulliano Morroni
* @since 04/08/2011
*/
public class ImpressoraDemo {
final static String nomeImpressora = "\\\\servidor\\hp_laserjet_4";
final static Integer quantidadeDeVias = 1;
/**
* Cria filas de impressão para arquivos do tipo PDF.
*
* @param arquivos
* @throws IOException
* @throws PrinterException
* @since 19/08/2011
*/
public static void criarFilaImpressao(List arquivos) throws IOException, PrinterException {
System.out.println("Iniciando impressão fisica");
PrintService impressora = null;
PrintService[] impressoras = PrinterJob.lookupPrintServices(); //Lista de todas impressoras instaladas no seu PC.
for (PrintService ps : impressoras) {
if (ps.getName().contains(nomeImpressora)) {
impressora = ps; //A impressora desejada.
break;
}
}
/*
* Abaixo é criado um "job" de impressão, e definido a impressora e a quantidade de vias.
*/
PrinterJob jobDeImpressao = PrinterJob.getPrinterJob();
jobDeImpressao.setPrintService(impressora);
jobDeImpressao.setCopies(quantidadeDeVias);
for (File arquivo : arquivos) {
FileInputStream fis = new FileInputStream(arquivo);
FileChannel fc = fis.getChannel();
ByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
PDFFile pdfGerado = new PDFFile(bb);
ArquivoImpressao arquivoParaImpressao = new ArquivoImpressao(pdfGerado);
PageFormat defaultPage = jobDeImpressao.defaultPage();
PageFormat formatoDaPagina = defaultPage;
jobDeImpressao.setJobName(arquivo.getName());
Book documento = new Book();
documento.append(arquivoParaImpressao, formatoDaPagina, pdfGerado.getNumPages());
jobDeImpressao.setPageable(documento);
jobDeImpressao.print();
}
System.out.println("Impressão finalizada");
}
}
/**
* Esta classe monta o arquivo PDF num formato específicio do framework
* PDF-Rendererer {@link PDFRendererer <a href="http://java.net/projects/pdf-renderer" target="_blank">http://java.net/projects/pdf-renderer</a>}. Este framework
* foi desenvolvido pela equipe Sun para suprir a falta de blibliotecas disponíveis
* para integração do Java com arquivos PDF.
*
* @author Giulliano Morroni
* @since 23/08/2011
*/
class ArquivoImpressao implements Printable {
private PDFFile arquivoPDF;
ArquivoImpressao(PDFFile arquivo) {
this.arquivoPDF = arquivo;
}
public int print(Graphics grafico, PageFormat formato, int indice) throws PrinterException {
int numeroDePaginas = indice + 1;
if ((numeroDePaginas >= 1) && (numeroDePaginas <= arquivoPDF.getNumPages())) {
Graphics2D grafico2D = (Graphics2D) grafico;
PDFPage pagina = arquivoPDF.getPage(numeroDePaginas);
/* Define o tamanho da página e da área de impressão. */
Rectangle imgbounds = new Rectangle(10,30,580,800);
PDFRenderer renderizador = new PDFRenderer(pagina, grafico2D, imgbounds, null, null);
try {
pagina.waitForFinish();
renderizador.run();
} catch (InterruptedException e) {
e.printStackTrace();
}
return PAGE_EXISTS;
} else {
return NO_SUCH_PAGE;
}
}
}