Se você tiver um deploy de um projeto Java com falha e esse tal de BIP4502E aparecer, cata o diretório shared-classes e soca ali todos os jar que a tua aplicação usa.
O meu shared-classes está em C:\ProgramData\Application Data\IBM\MQSI\shared-classes.
Seus problemas serão terminados. Ou somente começando. Depende da aplicação.
Mostrando postagens com marcador Java. Mostrar todas as postagens
Mostrando postagens com marcador Java. Mostrar todas as postagens
terça-feira, 15 de março de 2011
quinta-feira, 13 de maio de 2010
Manipulando imagens em Java
Para manipular imagens em Java, existem uma API: a Java Advanced Imaging (JAI). Ela é bem joinha e bem fácil de mexer.
Eu precisei, pra um relatório, dados vários resultados numéricos criar vários gráficos. Todos eles foram criados com o JFreeChart exceto um. O que eu usei JAI é uma figura que precisava ser semelhante ao Input Number Slider (componente do RichFaces), já que o Sun UI Visual não sei o quê do Netbeans não tem um componente parecido.
Pra gerar a figura que representa o slider, eu calculei o tamanho da margem esquerda que o meu slider (o losango cinza) deveria estar e unia esta imagem à imagem base pra gerar coisas no estilo:
Segue a classe teste que eu gerei:
Eu precisei, pra um relatório, dados vários resultados numéricos criar vários gráficos. Todos eles foram criados com o JFreeChart exceto um. O que eu usei JAI é uma figura que precisava ser semelhante ao Input Number Slider (componente do RichFaces), já que o Sun UI Visual não sei o quê do Netbeans não tem um componente parecido.
Pra gerar a figura que representa o slider, eu calculei o tamanho da margem esquerda que o meu slider (o losango cinza) deveria estar e unia esta imagem à imagem base pra gerar coisas no estilo:
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
public class ImageCombiner {
public static void main(String[] args) {
try {
BufferedImage img1 = ImageIO.read(
new File("perfilRiscoImagemBase.jpg"));
BufferedImage img2 = ImageIO.read(new File("pontoImagemBase.jpg"));
BufferedImage ponto = ImageIO.read(new File("ponto.jpg"));
// calculo de onde colocar o ponto
Double valor, posicao;
for (valor = new Double(1); valor <= 4; valor += 1) {
// gerando a figura do ponto
BufferedImage figuraPonto = new BufferedImage(img2.getWidth(),
img2.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics g1 = figuraPonto.getGraphics();
g1.drawImage(img2, 0, 0, null);
posicao = (((valor - 1) * 532) / 3) + 8;
if (valor < 3) {
posicao += valor;
} else if (valor >= 3 && valor < 4) {
posicao += new Double(2);
}
System.out.println("posicao; " + posicao);
// posicionando o ponto
g1.drawImage(ponto, posicao.intValue(), 0, null);
// gerando a figura final
BufferedImage combined = new BufferedImage(img1.getWidth(),
img1.getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics g = combined.getGraphics();
g.drawImage(img1, 0, 0, null);
g.drawImage(figuraPonto, 0, 0, null);
g.dispose();
String fileName = "resultado" + valor.doubleValue() + ".png";
File file = new File(fileName);
ImageIO.write(combined, "png", file);
}
} catch (Exception w) {
w.printStackTrace();
}
}
}
quarta-feira, 5 de maio de 2010
Unindo dois (ou mais) .jasper para obtenção de apenas um relatório
Enfrentei o problema de ter um relatório muito grande para ser gerado usando JasperReport. Nem com subrelatórios o maldito era gerado. Cheguei à conclusão que o iReport não funciona legal com relatórios cuja base é extensa (e depois encontrei alguns posts pela internet falando que a quebra de página do iReport/Jasper não funciona corretamente).
A solução que encontrei foi fazer dois arquivos .jasper diferentes que, juntos, compunham meu relatório. O problema na sequência foi unir esses dois .jasper para a obtenção de um único relatório. Segue minha solução fortemente baseada nesse post do GUJ:
O código acima ainda está bem cru. Fica como excercício pra você melhorá-lo. :)
A solução que encontrei foi fazer dois arquivos .jasper diferentes que, juntos, compunham meu relatório. O problema na sequência foi unir esses dois .jasper para a obtenção de um único relatório. Segue minha solução fortemente baseada nesse post do GUJ:
public void imprimirRelatorio() {
ExternalContext econtext = getExternalContext();
InputStream stream;
List j = new ArrayList();
try {
Map params = new HashMap(); // preenche os parâmetros do relatório 1
stream =
econtext.getResourceAsStream("/WEB-INF/reports/rel1.jasper");
j.add(JasperFillManager.fillReport(stream, params));
params = new HashMap(); // preenche os parâmetros do relatório 2
stream =
econtext.getResourceAsStream("/WEB-INF/reports/rel2.jasper");
j.add(JasperFillManager.fillReport(stream, params));
JRPdfExporter exporter = new JRPdfExporter();
HttpServletResponse response =
(HttpServletResponse) econtext.getResponse();
FacesContext fcontext = FacesContext.getCurrentInstance();
ByteArrayOutputStream retorno = new ByteArrayOutputStream();
exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, j);
exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, retorno);
exporter.setParameter
(JRPdfExporterParameter.IS_CREATING_BATCH_MODE_BOOKMARKS,
Boolean.TRUE);
exporter.exportReport();
byte[] retornoArray = retorno.toByteArray();
response.setContentType("application/pdf");
response.setContentLength(retornoArray.length);
OutputStream output = response.getOutputStream();
output.write(retornoArray);
output.flush();
output.close();
} catch (RuntimeException e) {
// logar e tratar exception
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
stream.close();
} catch (IOException e) {
// logar e tratar exception
}
}
fcontext.responseComplete();}O código acima ainda está bem cru. Fica como excercício pra você melhorá-lo. :)
quinta-feira, 22 de abril de 2010
Assinar:
Postagens (Atom)