Tem como eu criar pdf a partir de um vetor de bytes?
O que este array de bytes representa? uma imagem? uma string?
Eu tenho uma tabela documento que tem dois campos um text com o conteudo texto do pdf que uso o hibernate search para indexar e fazer busca fulltext e um outro campo blob onde salvo o array de bytes que forma aquele documento.
Esse vetor de byte representa o conteúdo binário do arquivo pdf que foi armazenado.
É o processo de recuperação do pdf para exibi-lo na tela.
Ideia de como fazer isso?
Acho que normal. Escreve no arquivo físico no filesystem com os streams do java. Depois retorna esse arquivo.
Salva com a extensão .pdf apenas?
Tentei fazer isso e o arquivo veio em branco…
Mas o arquivo tava com que tamanho, em bytes? Acho que a extensão não importa, importa mesmo é seu conteúdo escrito em bytes.
O código que uso para gerar o arquivo é esse…O pdf que ele gera vem em branco sendo que o vetor de bytes está com conteúdo…
[code]public static File convertInputStreamToFile(InputStream inputStream,
String nomeArquivo) {
try {
File f = new File("c:\\desenvolvimento\\pdf\\"+nomeArquivo + ".pdf");
OutputStream out = new FileOutputStream(f);
byte buf[] = new byte[1024];
int len;
while ((len = inputStream.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.close();
inputStream.close();
f.createNewFile();
return f;
}
catch (IOException e) {
throw new UtilException(e);
}
}
new ByteArrayInputStream(documentoModel.getArquivoFisico())[/code]
[color=green]Olá, acredito que o código abaixo possa te ajudar:[/color]
[code]
ServletOutputStream servletOutputStream = res.getOutputStream();
File reportFileJasper = “C:\ … \teste.jasper”;
byte[] bytes = null;
try {
bytes = JasperRunManager.runReportToPdf(reportFileJasper.getPath(), parametros, con);
res.setContentType("application/pdf");
res.setContentLength(bytes.length);
servletOutputStream.write(bytes, 0, bytes.length);
servletOutputStream.flush();
servletOutputStream.close();
} catch (JRException e) {
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
e.printStackTrace(printWriter);
res.setContentType(“text/plain”);
res.getOutputStream().print(stringWriter.toString());
};
[/code][color=green]Até…[/color]
Antônio uma pergunta, você tá utilizando Oracle para armazenar o binário?
o link abaixo dá a resposta…
[code]import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
public class genFile {
public static void main(String[] args) throws FileNotFoundException, IOException {
File file = new File("java.pdf");
FileInputStream fis = new FileInputStream(file);
//System.out.println(file.exists() + "!!");
//InputStream in = resource.openStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
try {
for (int readNum; (readNum = fis.read(buf)) != -1;) {
bos.write(buf, 0, readNum); //no doubt here is 0
//Writes len bytes from the specified byte array starting at offset off to this byte array output stream.
System.out.println("read " + readNum + " bytes,");
}
} catch (IOException ex) {
Logger.getLogger(genJpeg.class.getName()).log(Level.SEVERE, null, ex);
}
byte[] bytes = bos.toByteArray();
//below is the different part
File someFile = new File("java2.pdf");
FileOutputStream fos = new FileOutputStream(someFile);
fos.write(bytes);
fos.flush();
fos.close();
}
}[/code]