2009-06-29 21 views
9

Mi aplicación basada en Java tiene un servlet que transmite contenido PDF de vuelta al navegador según el parámetro de solicitud.¿Cómo cambiar el título de una página de navegador a la que un servlet distribuye un PDF?

p. Ej. el usuario hace clic en una etiqueta A con un href de "myApp/FetchPDFServlet? id = 123". El mapeo del servlet recoge la solicitud, transmite los datos PDF a la respuesta como aplicación tipo mimo/pdf, cierra los buffers.

Sin embargo, la barra de título del navegador para la página que muestra el PDF lee "FetchPDFServlet? Id = 123"

¿Cómo puedo cambiar el título de las pantallas del navegador para la página que muestra el PDF? Así que el título del navegador es "Aquí está el increíble PDF" no "FetchPDFServlet? Id = 123".

¿Es posible en absoluto? ¿Cuál es la mejor manera de hacer esto?

Respuesta

4

Puede visualizar el PDF en un iframe.
Algo como esto:

<html> 
    <head> 
     <title>Here is the amazing PDF</title> 
     <style type="text/css"> 
     html, body, div, iframe { margin:0; padding:0; height:100%; } 
     iframe { display:block; width:100%; border:none; } 
     </style> 
    </head> 
    <body> 
    <iframe width="100%" length="100%" src="myApp/FetchPDFServlet?id=123"/> 
    </body> 
</html> 

Así que en lugar de vincular a un documento PDF utilizando myApp/FetchPDFServlet?id=123, se uniría a algo que devuelve el HTML anterior. Por ejemplo, una página JSP: myApp/ShowPDF.jsp?id=123&title=Here%20is%20the%20amazing%20PDF

7

Añadir esta cabecera a su HttpServletResponse:

response.setHeader("Content-Disposition","inline; filename=Here is the Amazing PDF"); 

Creo que el navegador va a recogerlo y lo uso como el título de la ventana.

2

He solucionado este problema, y ​​aunque mi solución tiene bastantes restricciones, pensé que podría compartirla.

Baiscally Abriré el pdf en una nueva pestaña, y luego cambiaré su título de la página original.

$('#aa').click(function(){ 
    ref = window.open('resume.pdf','mywindow');  
    ref.onload = function(){ 
     ref.document.title="New Title"; 
    } 
    return false; 
    }); 
    }); 

Tenga en cuenta que las páginas padre e hijo deben estar en el mismo dominio.

He probado esto en algunos navegadores, y aquí están los resultados:

  • Chrome 10 - Funciona como un regalo
  • Safari 5 - Obras, pero por defecto se abre en una nueva no ventana de la ficha . El usuario puede cambiar esto para abrir todas las ventanas nuevas en pestañas.
  • IE 8 - No funciona, como se esperaba: op
  • Firefox - Funciona como un regalo
0

He intentado una solución en Java y ha funcionado. Puede establecer cabeceras dan en otros idiomas

response.setHeader("Content-Disposition","inline; filename=\"MyFile.pdf\""); 
response.setContentType("application/pdf; name=\"MyFile.pdf\""); 
response.getOutputStream().write(pdfAsBytesArray); 
+0

AFAIK [Content-Type header] (https://www.w3.org/Protocols/rfc1341/4_Content- Type.html) no contiene una propiedad 'name'. – naXa

+0

No funciona para mí. El nombre de la pestaña es siempre el nombre del valor de la solicitud y no el nombre de "nombre de archivo". – M46

1

El título de la pestaña se toma de los metadatos de los documentos PDF, específicamente el atributo título. Por lo tanto, si genera el documento en su aplicación, su biblioteca de PDF debe tener una forma de establecer los metadatos de los documentos.

+0

He intentado esto.Casi funcionó. El título de la pestaña ahora es el título pdf (bueno) + el valor de la solicitud (malo). – M46

Cuestiones relacionadas