none
Pegar um PDF em byte[] por um JsonResult e colocá-lo em uma tag html? RRS feed

  • Pergunta

  • Seguinte, tenho um JsonResult que vai me retornar uma Tuple com um objeto que tem umas características específicas e um array de byte. Da seguinte forma:

    return this.Json(new Tuple<ConfiguracaoCredencial, byte[]>(configuracaoCredencial, pdfCredencialEmBytes));

    Do outro lado, no retorno do $.post eu vou pegar esses dois itens, ok.. isso é simples. Porém, como eu faço para, com esse array de bytes (que é meu pdf só que em bytes) jogá-lo em uma tag html e fazê-lo aparecer certinho?

    sexta-feira, 23 de dezembro de 2011 19:40

Todas as Respostas

  • Vinicius,

     

    Por ser um pdf, você vai precisar utilizar algum componente da adobe para que o usuário consiga visualizá-lo diretamente pelo navegador.

     

    Caso fosse uma image, você poderia exibir da seguinte forma:

    Ajax: $('#image').attr('src', "data:image/jpg;base64,"+json.property);

     

     

    Abs,

     



    Ronie Dias MCP, MCTS, MCITP, MCPD roniedias.com
    segunda-feira, 26 de dezembro de 2011 16:34
  • Tinha que cuspir o binário do pdf direto para o browser,  processando de forma síncrona. (Abrir uma nova janela só para exibir o PDF, ou exibi-lo dentro de um iframe)

    No servidor você especifica no header o content type para application/pdf, dai o navegador vai interpretar como sendo um PDF e vai lançar o devido plugin/activex - caso esteja instalado - para exibir o PDF corretamente. (Adobe Reader, Foxit Reader etc.. o leitor de PDF instalado na maquina do cliente)

    Algo do gênero:

    response.setContentType( "application/pdf" );
    

    Talvez teria que especificar também o nome do arquivo no content-disposition (filename=xxx.pdf), tem que testar.


    Virtual Group - Soluções Inteligentes www.virtualgroup.com.br
    quarta-feira, 28 de dezembro de 2011 22:05
  • Fiz o seguinte no server side:

    return

     

    this.Json(new Tuple<ConfiguracaoCredencial, string>(configuracaoCredencial, Convert

    .ToBase64String(arquivoEmBytes)));

     

    E no client side:

    document.getElementById(

    "preview_credencial").innerHTML = "<object id='credencial_atual' width='250' height='420' style='border: 1px solid' data='data:application/pdf;base64," + dados.Item2 + "' />"

    ;

     

    O problema é que o valor dados.Item2 está vazio... todavia, se eu faço:

    return this.Json(new Tuple<ConfiguracaoCredencial, byte[]>(configuracaoCredencial, arquivoEmBytes));

    O valor dados.Item2 chega correto...]

    Alguém tem idéia de porque de quando envio como string está ficando vazio?

    segunda-feira, 2 de janeiro de 2012 17:26
  • Por um motivo que só Deus sabe qual, a string tá aparecendo... o problema é que... não funciona.
     
    Quando eu pego o arquivoEmBytes e coloco ele em um FileResult, o pdf aparece... porém no JsonResult e colocando ele dentro da tag object, não.
     
    Alguém tem idéia, ou se tem algo errado na tag...?
    segunda-feira, 2 de janeiro de 2012 18:15