Je veux afficher un fichier PDF dans le navigateur. J'ai le chemin vers le pdf dans JS et je fais un appel pour récupérer le PDF en tant que servlet de java. Voici ce que j'ai jusqu'à présent:Afficher le PDF dans un navigateur avec un servlet
JavaScript:
RequestManager.getJSON(Config.server + "getPDF.json?pdfPath=" + this.pathToPdfFile, (function(data){
$("#" + this.divId).append('<object id="' + this.pdfObjectId + '" data="' + data + '" type="application/pdf" width="600" height="800"></object>');
ResizeManager.addResizeHandler(this.pdfObjectId, this.divId, -10, -10);
}).bind(this));
Java:
@RequestMapping("/getPDF")
public void pdfPathToServlet(Model model, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
String pdfPath = request.getParameter("pdfPath");
if (pdfPath == null || pdfPath.equals(""))
throw new ServletException("Invalid or non-existent file parameter in UrlServlet servlet.");
if (pdfPath.indexOf(".pdf") == -1)
pdfPath += ".pdf";
File pdf = new File(pdfPath);
String pdfName = pdfPath.substring(pdfPath.lastIndexOf("/") + 1, pdfPath.length());
logger.debug(pdfName);
ServletOutputStream stream = null;
BufferedInputStream buf = null;
try
{
stream = response.getOutputStream();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline; filename='" + pdfName + "'");
FileInputStream input = new FileInputStream(pdf);
response.setContentLength((int) pdf.length());
buf = new BufferedInputStream(input);
int readBytes = 0;
while ((readBytes = buf.read()) != -1)
stream.write(readBytes);
}
catch (IOException ioe)
{
throw new ServletException(ioe.getMessage());
}
finally
{
if (stream != null)
stream.close();
if (buf != null)
buf.close();
}
}
Mon problème est que c'est montrant la sortie binaire dans mon navigateur sous forme de texte.
Je ne suis pas sûr de ce que je fais incorrectement. J'ai essayé de changer l'en-tête en pièce jointe au lieu de en ligne, mais cela a montré la même chose. Je crois que je veux en ligne cependant, comme je souhaite le montrer dans le navigateur et ne pas le télécharger.
Pourquoi votre URL se termine par '.json' lorsque vous renvoyez' application/pdf'? –
@ Michael-O Honnêtement, je l'avais mis par habitude. La façon dont l'application est écrite est une URL que l'application entière exécute sous. Cela ne change jamais réellement. Le fichier .json est normalement utilisé pour empêcher la redirection de la page vers une autre URL qui ne contient rien. – user856354
Ce n'est pas une servlet du tout. C'est une action du contrôleur Spring MVC. – BalusC