Olá pessoal,
Tenho um relatório criado no iReports, e que quero apresentar em pdf na minha aplicação web. O problema é que preciso adicionar um código de barras em determinado ponto desse relatório. Esse código de barras está sendo gerado, corretamente, através da classe BarcodeInter25 do iText.
O problema é na hora de inserir em runtime esse código de barras no relatório já desenhado. Tentei isso de duas formas.
A primeira:
ServletOutputStream out = response.getOutputStream();
Document document = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
PdfWriter writer = PdfWriter.getInstance(document, baos);
document.open();
PdfReader reader = new PdfReader("/caminho/meurelatorio.pdf");
PdfImportedPage page1 = writer.getImportedPage(reader, 1);
writer.getDirectContent().addTemplate(page1, 1, 0, 0, 1, 0, 0);
PdfContentByte cb = writer.getDirectContent();
BarcodeInter25 codeI25 = new BarcodeInter25();
codeI25.setCode("00190000090050201018400016324188");
Image imageI25 = codeI25.createImageWithBarcode(cb, null, null);
//ao criar o Chunk, os parametros correspondem a imagem, posicao horizontal,
//posicao vertical
document.add(new Phrase(new Chunk(imageI25, 10, -600)));
document.close();
} catch (Exception e) {
e.printStackTrace();
}
response.setContentType("application/pdf");
response.setContentLength(baos.size());
baos.writeTo(out);
out.flush();
Nessa primeira tentativa, estou usando o PdfImportedPage para importar a página do meu relatório já criado e colocá-la no meu novo relatório. Porém, não está funcionando: o relatório vem apenas com o código de barras, sem ter importado o relatório do arquivo.
A segunda forma:
ServletOutputStream out = response.getOutputStream();
Document document = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("/caminho/meurelatorio.pdf"));
document.open();
PdfContentByte cb = writer.getDirectContent();
BarcodeInter25 codeI25 = new BarcodeInter25();
codeI25.setCode("00190000090050201018400016324188");
Image imageI25 = codeI25.createImageWithBarcode(cb, null, null);
//ao criar o Chunk, os parametros correspondem a imagem, posicao horizontal,
//posicao vertical
document.add(new Phrase(new Chunk(imageI25, 10, -600)));
document.close();
} catch (Exception e) {
e.printStackTrace();
}
response.setContentType("application/pdf");
response.setContentLength(baos.size());
baos.writeTo(out);
out.flush();
Nessa segunda tentativa, tento abrir o pdf direto em meu document e escrever a imagem nela com o pdfwriter. O código é interpretado normalmente e não dá nenhum erro, porém na hora que o pdf é lançado na tela, ele não abre… fica só a tela cinza, como se estivesse eternamente carregando.
A documentação que estou consultando veio principalmente daqui: http://itextdocs.lowagie.com/tutorial/general/copystamp/. Talvez tenha alguma falha que não estou enxergando, então, toda ajuda é bem vinda. Aceito sugestões de novas formas de fazer isso.
Obrigada pela atenção