Recuperar PDF do Banco de Dados e mostrar ele na tela
7 respostas
I
igoorsp
Boa tarde pessoal,
Estou com uma dificuldade em fazer o seguinte:
Tenho uma aplicação WEB, usando JSF e Primefaces e MYSQL.
Tem uma tela de cadastro de produto e nele preciso selecionar um PDF, eu consegui anexar esse PDF e da um “insert” no Banco como “BLOB”, porém na hora de listar, não estou conseguindo.
O que preciso… Dar um select nessa tabela e mostrar o PDF para o cliente, porém não estou conseguindo…
ProdutoDAO
StringBuildersql=newStringBuilder();sql.append("SELECT idProcesso, Processo");sql.append(" FROM processos ");sql.append(" ORDER BY idProcesso ASC");Connectionconexao=ConexaoFactory.conectar();PreparedStatementcomando=conexao.prepareStatement(sql.toString());ResultSetresultado=comando.executeQuery();ArrayList<Processos>lista=newArrayList<Processos>();while(resultado.next()){
Processositem=newProcessos();item.setArquivo("select no campo PDF,");item.setIdProcessos(resultado.getInt("idProcesso"));lista.add(item);}
returnlista;
}
Processo.xhtml
<p:columnheaderText="Processo do Cliente"><p:outputPanelid="read"><p:mediavalue="#{item.arquivo}"player="pdf"/>>
</p:outputPanel></p:column>
Sou novo, então se precisar mais informações, eu adiciono depois.
Novato não faz coisas assim, fera. Novato estuda o básico da linguagem, se chegou aqui, já deixou de ser novato ou está pulando etapas, o que vai trazer muitos outros problemas além deste.
O atributo arquivo, da classe Processos(por que a classe tem nome no plural?) é um byte[]?
V
Vinicius_Salles
Você realmente tem um banco de dados que guarda PDF?
Estou trabalhando com algo parecido, mas ao invés de guardar pdf eu guardo o caminho (Path) de onde o arquivo esta armazenado no servidor.
No meu caso eu acho mais fácil pois guardando o caminho eu só preciso executar a seguinte linha
Você está usando desktop, fera, isso muda muito as coisas.
I
igoorsp
Não, eu tinha tentando de várias formas… agora ela esta como String, pois eu ia tentar usando o path do PDF.
Porém achei que não seria do melhor jeito.
O que não estou conseguindo é dar o select nessa tabela e converter do BLOB para o arquivo PDF.
darlan_machado
É relativamente simples fazer isso, desde que o arquivo seja, efetivamente, PDF.
O arquivo armazenado no banco de dados, na coluna BLOB é um array de bytes ou byte[], por isso a minha primeira pergunta.
A partir do momento que você lê essa coluna, você pode fazer o seguinte:
Isso vai enviar o arquivo pro browser do usuário. Mas, veja, é extremamente importante ler esse byte[] da coluna BLOB.
I
igoorsp
Legal… vou fazer desta forma, mas a outra duvida é como vou mostrar isso no primefaces, pois tentei de algumas formas e nao deu nenhuma.
Nessa hora:
<p:columnheaderText="Processo do Cliente"><p:outputPanelid="read"><p:mediavalue="#{item.arquivo}"player="pdf"/>>
</p:outputPanel></p:column>
darlan_machado
Fera, para isso você tem que se certificar que o primefaces tem algum componente que suporta renderização de pdf.
Se tiver, o que eu realmente não sei, pois faz muito tempo que não desenvolvo com prime ou jsf, aí você precisa ajustar de acordo com o que o primefaces demanda.
O exemplo que sugeri vai enviar o PDF como arquivo e o browser vai entender que deve ser um download.