J'ai rencontré le même problème lors de l'utilisation de google chrome.
L'en-tête ne figure pas dans IE 11.
(je suis seulement en utilisant IE 11 et Google Chrome donc je ne sais pas à quoi cela ressemble d'autres navigateurs)
C'est ce qu'un rendu media
avec valeur en flux continu ressemblera:
<object type="application/pdf"
data="/projectName/javax.faces.resource/dynamiccontent.properties.xhtml?ln=primefaces&v=6.1&pfdrid=a754229fe5cdabff72537ef0693a2399&pfdrt=sc&pfdrid_c=true"
height="600px" width="1100px" internalinstanceid="6">
</object>
/projectName/javax.faces.resource/dynamiccontent.properties.xhtml
vient de DynamicContentSrcBuilder#build(resourcePath)
J'ai essayé:
1. réglage du nom dans DefaultStreamedContent
new DefaultStreamedContent(getData(), "application/pdf", "test.pdf");
cela ne semble pas fonctionner. le nom devient nul dans MediaRenderer#encodeEnd
donc le nom n'est pas ajouté dans le src
.
if (streamedContent.getName() != null) {
int index = src.indexOf("?");
src = src.substring(0, index) + ";/" + streamedContent.getName() + ""
+ src.substring(index, src.length());
}
2. override MediaRenderer#encodeEnd
et ajouter un nom de valeur fixe (test.pdf)
if ((value != null) && (value instanceof StreamedContent) && (player.getType().equals("application/pdf"))) {
streamedContent = (StreamedContent) value;
if (streamedContent.getName() != null) {
int index = src.indexOf("?");
src = src.substring(0, index) + ";/" + streamedContent.getName() + ""
+ src.substring(index, src.length());
}
src = src.substring(0, index) + ";/Test.pdf"
+ src.substring(index, src.length());
}
Cela n'a pas non plus travaillé. La lightBox s'ouvre mais ne peut pas afficher le fichier pdf.
3. override MediaRenderer#encodeEnd
et remplacer la valeur de « dynamiccontent.properties » dans le src
avec la valeur de title
qui est mis en XHTML.
MediaRenderer # encodeEnd
if ((value != null) && (value instanceof StreamedContent) && (player.getType().equals("application/pdf"))) {
streamedContent = (StreamedContent) value;
if (streamedContent.getName() != null) {
int index = src.indexOf("?");
src = src.substring(0, index) + ";/" + streamedContent.getName() + ""
+ src.substring(index, src.length());
}
if (src.contains("dynamiccontent.properties")) {
String[] urlParams = src.split("&");
for (String param : urlParams) {
if (param.contains("title=")) {
String[] titleAndValue = param.split("=");
src = src.replace("dynamiccontent.properties", titleAndValue[1]);
}
}
}
}
xhtml
<p:lightBox>
<h:outputLink value="#" title="#{myDoc.fileName}">
<i class="fa fa-eye" aria-hidden="true"></i>
</h:outputLink>
<f:facet name="inline">
<p:media value="#{documentController.stream}" width="1100px" height="600px" player="pdf">
<f:param name="title" value="Test.pdf" />
</p:media>
</f:facet>
</p:lightBox>
redered media
ressemblera à quelque chose comme ça.
<object type="application/pdf"
data="/projectName/javax.faces.resource/Test.pdf.xhtml?ln=primefaces&v=6.1&pfdrid=a754229fe5cdabff72537ef0693a2399&pfdrt=sc&title=Test.pdf&pfdrid_c=true"
height="600px" width="1100px" internalinstanceid="6">
<param name="title" value="Test.pdf">
</object>
Cela fonctionne uniquement sur StreamedContent
. Voici une capture d'écran de l'en-tête pdf.
Notez que "xhtml" est nécessaire . Ça ne marchera pas sans ça.
Espérons que cela aide.
Merci pour votre réponse. J'ai cherché un peu plus et j'ai trouvé une autre solution qui garde le code très propre. Le tag 'documentViewer'. c'est une extension pour les primitifs et fonctionne très bien. Merci encore. –