Bom dia, estou criando uma classe para imprimir arquivos direto em uma impressora só que tem algumas coisas que nao estao funcionando, por exemplo o tamanho da imagem e quantidade de copias.
/**
* @param caminhoArquivo
* @param nCopias
* @param retrato
* @return
*/
public void imprimir(String caminhoArquivo, int nCopias, boolean retrato, String impressora) {
FileInputStream psStream = null;
try {
File f = new File(caminhoArquivo);
psStream = new FileInputStream(f);
FileChannel fc = psStream.getChannel();
ByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());
PDFFile pdfFile = new PDFFile(bb);
PDFPrintPage pages = new PDFPrintPage(pdfFile);
/* Seta configuracoes */
PrintRequestAttributeSet aset = this.config(nCopias, retrato);
/* PrinterJob */
PrinterJob pj = PrinterJob.getPrinterJob();
/* Configura qual impressora sera usada */
PrintService[] ps = PrinterJob.lookupPrintServices();
for(int i=0; i<ps.length; i++){
if(ps[i].toString().equals(impressora)){
pj.setPrintService(ps[i]);
}
}
PageFormat pf = PrinterJob.getPrinterJob().getPageFormat(aset);
pj.setJobName(f.getName());
pj.setCopies(nCopias);
Book book = new Book();
book.append(pages, pf, pdfFile.getNumPages());
pj.setPageable(book);
pj.print();
} catch (Exception ex) {
this.setError("Ocorreu um erro: " + ex.getMessage());
}
}
/**
* @param nCopias
* @param retrato
* @return
*/
private PrintRequestAttributeSet config(int nCopias, boolean retrato) {
PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
aset.add(new Copies(nCopias));
aset.add(MediaSizeName.ISO_A4);
if (retrato) {
aset.add(OrientationRequested.PORTRAIT);
} else {
aset.add(OrientationRequested.LANDSCAPE);
}
aset.add(Sides.TUMBLE);
return aset;
}
O setCopies(nCopias) nao funciona, ele imprimi sempre 1 copia somente. Nem o aset.add(new Copies). O MediaSizeName esta para A4, porem pdf que esta sendo impresso aparece bem pequeno na folha :S
Valeu.