Pessoal estava montando um arquivo PDF e estou precisando de uma função em java que receba a imagem que está armazenada no banco e converta ela para um formato que funcione no PDF…
Tentei convertendo para ASCII85, mas não sei se é o método que está incorreto ou se preciso fazer algo além disso…
Esse código que usei aí abaixo, pega a imagem do banco como um array de bytes e converte ASCII85, depois eu pego esse código e jogo no corpo de um arquivo PDF, só que a imagem está ficando completamente distorcida:
Se alguém souber o erro que estou cometendo ou souber uma forma melhor para fazer isso agradeço!
protected static final Variant ebfEncodesBLOBAsASCII85(Variant value) throws Exception {
byte[] bytes = ((byte[]) value.getObject());
StringBuilder codigoASCII = new StringBuilder();
insereCaractere(codigoASCII,bytes);
return VariantPool.get(codigoASCII.toString());
}
private static final void insereCaractere(StringBuilder codigoASCII,byte[] bytes) {
long[] power85 = {1,85,85*85,85*85*85,85*85*85*85};
int quantCaracteres=0;
int leftBytes = (bytes.length)%4;
byte b;
long soma;
for (int i=0;i<bytes.length-leftBytes;i=i+4) {
soma=0;
for (int j=0; j<4;j++) {
soma = (soma<<8)+(bytes[i+j]&(0x000000ffL));
}
if(soma==0L){
if(++quantCaracteres == 80){
quantCaracteres = 0;
codigoASCII.append("\n");
}
codigoASCII.append((char)122);
continue;
}
for(int k=4;k>=0;k--){
b = (byte)(soma/power85[k]);
if(++quantCaracteres == 80){
codigoASCII.append("\n");
quantCaracteres = 0;
}
codigoASCII.append((char)(b+33));
soma -= b*power85[k];
}
}
soma=0;
if (leftBytes!=0) {
for(int i=leftBytes-1;i>=0;i–)
soma = (soma<<8)+(bytes[bytes.length-(i+1)]&(0x000000ffL));
soma = soma<<8*(4-leftBytes);
for(int k=4;k>=4-leftBytes;k--){
b = (byte)(soma/power85[k]);
codigoASCII.append((char)(b+33));
soma -= b*power85[k];
}
}
codigoASCII.append("~>");
}