2009-06-29 16 views
9

La mia webapp basata su Java ha un servlet che riporta il contenuto PDF al browser in base al parametro request.Come modificare il titolo di una pagina del browser su cui un servlet ha trasmesso in streaming un PDF?

ad es. l'utente fa clic su un tag A con un href di "myApp/FetchPDFServlet? id = 123". La mappatura servlet raccoglie la richiesta, trasmette i dati PDF alla risposta come applicazione/pdf di tipo mime, chiude i buffer di svuotamento.

Tuttavia la barra del titolo del browser per la pagina di visualizzazione del formato PDF si legge "FetchPDFServlet? Id = 123"

Come posso cambiare il titolo i display del browser per la pagina che visualizza il PDF? Quindi il titolo del browser è "Ecco il fantastico PDF" non "FetchPDFServlet? Id = 123".

È possibile a tutti? Il modo migliore per farlo?

risposta

4

È possibile visualizzare il PDF in un iframe.
Qualcosa di simile a questo:

<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> 

Così, invece di collegare a un documento PDF utilizzando myApp/FetchPDFServlet?id=123, volesse link a qualcosa che restituisce quanto sopra html. Ad esempio, una pagina JSP: myApp/ShowPDF.jsp?id=123&title=Here%20is%20the%20amazing%20PDF

7

Aggiungi questa intestazione al HttpServletResponse:

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

Credo che il browser sarà raccoglierlo e usarlo come il titolo della finestra.

2

Ho riscontrato questo problema e, sebbene la mia soluzione abbia alcune restrizioni, ho pensato di condividerla.

Baiscally Aprirò il pdf in una nuova scheda, quindi cambierò il titolo dalla pagina originale.

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

Si noti che le pagine padre e figlio devono essere nello stesso dominio.

Ho testato questo in alcuni browser, ed ecco i risultati:

  • Chrome 10 - funziona come un ossequio
  • Safari 5 - Opere, ma di default si apre in una nuova non finestra della scheda . L'utente può cambiarlo per aprire tutte le nuove finestre nelle schede.
  • IE 8 - non funziona, come ci si aspettava: op
  • Firefox - Funziona come un ossequio
0

ho cercato una soluzione in java e ha funzionato. È possibile impostare le intestazioni dato in altre lingue

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

AFAIK [Intestazione Content-Type] (https://www.w3.org/Protocols/rfc1341/4_Content-Type.html) non contiene una proprietà 'name'. – naXa

+0

Non funziona per me. Il nome della scheda è sempre il nome del valore della richiesta e non il nome di "nomefile". – M46

1

Il titolo della scheda è tratto dal documenti PDF metadati, in particolare l'attributo titolo. Quindi, se generi il documento nella tua app, la tua libreria PDF dovrebbe avere un modo per impostare i metadati dei documenti.

+0

Ho provato questo.Ha quasi funzionato. Il titolo della scheda è ora il titolo del pdf (buono) + il valore della richiesta (cattivo). – M46

Problemi correlati