Recebendo pdf com jquery

6 respostas
R

Pessoal!
Tudo bem? Espero que sim.
estou trabalhando com web service restful.
tenho uma classe resource do tipo get que retorna uma arquivo PDF.
apenas digitando a url no navegador ele ja me retorna este arquivo.
porém quero fazer isso com ajax, usando o jquery
estou fzd da seguinte maneira.

$.ajax({

type: ‘get’,

url: "<a href="http://localhost:8080/Teste2/resources/generic/report?%22+queryString">http://localhost:8080/Teste2/resources/generic/report?"+queryString</a>,

dataType: “application/pdf”,

success: function(data, textStatus, jqXHR) {

console.log(textStatus, data);

},

error: function(data, textStatus, jqXHR) {

alert(data);

}

});

a variavel queryString é o parametro para impressão do relatorio.
creio que preciso tratar de alguma forma na resposta. Só acho estranho pq quando digito no navegador comum a url, ele me retorna o arquivo direto.
alguem sabe o que preciso fazer?

6 Respostas

J

Qual objetivo final?

Se for para exibir o PDF na página:

<embed src="http://www.sistemaintegrado.com.br/si/webfiles/arquivos/sis_cursos_5922fd72e61e6.pdf" width="900" height="600" type='application/pdf'>

``

Se for acionado pelo usuário para download:

<a href="http://www.sistemaintegrado.com.br/si/webfiles/arquivos/sis_cursos_5922fd72e61e6.pdf" download>
Teste
</a>

Se for pelo programa pode tentar isso:

https://fiddle.jshell.net/tnbzrv5z/

R

O Objetivo final é exibir o pdf, porem, assim eu não consigo exigir autenticação, desta forma que indicou não consigo passar o token na requisição.

Realizando a requisição pelo ajax consigo definir o token que será validado no servidor, assim só é possível visualizar o pdf se estiver autenticado, não encontrei uma forma de realizar isto.

Então fiz assim, utilizei o object e carreguei o pdf nele, semelhante ao que você indicou com o , o usuário não ve o endereço da requisição do pdf, mas pode facilmente ver se monitorar as requisições do navegador.

Ainda procuro um meio de definir o token, e visualizar o pdf apenas se autenticado.
Enquanto não encontro utilizo o .

Se souber de uma forma e definir o token e visualizar o pdf como desejo, ficarei muito grato…

Obrigado pela atenção.

J

Como é um get, se o token é passado pela URL, basta concatenar como parametro na URL.

R

Sim, ja defini o token no header da requisição, o problema é quando quando realizo este tipo de requisição recebo uma string com o pdf, ele não é aberto pelo navegador automaticamente como se eu digitasse a requisição no url do navegador, tentei de diversas formas visualizar o pdf através deste retorno que recebo do servidor, fazendo encode, criando blob convertendo a string que recebo em pdf, o navegador até exibiu o pdf com o titulo e o número de paginas correto mas sem as folhas estavam em branco, sem valor nem um.

self.consultarManifesto = function() {	

var config = {headers:  {

Content-Type : application/json,

Authentication: Bearer  + localStorage.getItem(token)

}

};

return $http.get(/pdf/1, config)

.then(function successCallback(response) {

$scope.pdf = response.data;

});

};

O problema não é como passar o token, é como visualizar o retorno do servidor em pdf, se realizo a requisição do modo como informei recebo uma string do pdf, ele não é visualizado automaticamente como se digitasse a url no navegador.
J

Exemplo:

HTML:

<a id="teste" download>Teste</a>

<embed id="teste2" width="900" height="600" type='application/pdf'>

JS:

var queryString = "?token=123";

var url = "http://www.sistemaintegrado.com.br/si/webfiles/arquivos/sis_cursos_5922fd72e61e6.pdf" + queryString;

document.getElementById("teste").href = url;

document.getElementById("teste2").src = url;
R

Olá Rafael!

Você já tentou configurar o Content-Type do header para application/pdf?

Pode ser que esteja retornando uma string porque foi definido como application/json.

Criado 19 de outubro de 2017
Ultima resposta 23 de out. de 2017
Respostas 6
Participantes 3