Ich habe das gleiche Problem bei der Verwendung von Google Chrome gefunden.
Der Header in IE nicht erscheint 11.
(Ich verwende nur IE 11 und Google Chrome, damit ich weiß nicht, was das ist wie auf anderen Browser aussieht)
Dies ist, was mit einem eine gerenderte media
gestreamten Wert wird wie folgt aussehen:
<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
von DynamicContentSrcBuilder#build(resourcePath)
kommt
ich habe versucht:
1. Einstellung Name in DefaultStreamedContent
new DefaultStreamedContent(getData(), "application/pdf", "test.pdf");
dies nicht zu funktionieren scheint. name wird null in MediaRenderer#encodeEnd
, so dass der Name nicht in src
hinzugefügt wird.
if (streamedContent.getName() != null) {
int index = src.indexOf("?");
src = src.substring(0, index) + ";/" + streamedContent.getName() + ""
+ src.substring(index, src.length());
}
2. Überschreibung MediaRenderer#encodeEnd
und fügen Sie einen festen Wert Name (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());
}
Das hat auch nicht funktioniert. Die lightBox öffnet sich, kann aber die PDF-Datei nicht anzeigen.
3.MediaRenderer#encodeEnd
Überschreibung und den Wert von "dynamiccontent.properties" ersetzt im src
mit dem Wert aus, der in title
xhtml eingestellt ist.
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>
media
redered etwas wie folgt aussehen.
<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>
Dies funktioniert aber nur auf StreamedContent
. Folgendes ist ein Screenshot des PDF-Headers.
Beachten Sie, dass ".xhtml" ist erforderlich. Ohne sie geht es nicht.
Hoffe, das hilft.
Danke für Ihre Antwort. Ich habe ein wenig mehr gesucht und eine andere Lösung gefunden, die den Code sehr sauber hält. Der Tag "documentViewer". es ist eine Erweiterung für Hauptoberflächen und funktioniert sehr gut. Noch einmal Danke. –