Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试在“我的浏览器”中查看PDF文件时,PDF将呈现为文本内容_Java_Pdf_Jsf_Servlets_Response - Fatal编程技术网

Java 尝试在“我的浏览器”中查看PDF文件时,PDF将呈现为文本内容

Java 尝试在“我的浏览器”中查看PDF文件时,PDF将呈现为文本内容,java,pdf,jsf,servlets,response,Java,Pdf,Jsf,Servlets,Response,我有一个错误,当我想下载或在网络浏览器中看到一个pdf文件,不知何故,该文件是以文本形式生成的。有人有这个问题吗 这是我的代码: public void downloadPDF(File ArchivoPDF, String NombrePDF) throws IOException{ FacesContext facesContext = FacesContext.getCurrentInstance(); ExternalContext externalContext =

我有一个错误,当我想下载或在网络浏览器中看到一个pdf文件,不知何故,该文件是以文本形式生成的。有人有这个问题吗

这是我的代码:

public void downloadPDF(File ArchivoPDF, String NombrePDF) throws IOException{

    FacesContext facesContext = FacesContext.getCurrentInstance();
    ExternalContext externalContext = facesContext.getExternalContext();
    HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();

    BufferedInputStream input = null;
    BufferedOutputStream output = null;

    try{
        input = new BufferedInputStream(new FileInputStream(ArchivoPDF),DEFAULT_BUFFER_SIZE);

        response.reset();
        response.setHeader("Content-Type","application/pdf");
        response.setHeader("Content-Length",String.valueOf(ArchivoPDF.length()));
        response.setHeader("Content-Disposition","attachment; filename=\"" + NombrePDF + ".pdf\"");
        output = new BufferedOutputStream(response.getOutputStream(),DEFAULT_BUFFER_SIZE);

        byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
        int length;
        while((length = input.read(buffer)) > 0){
            output.write(buffer,0,length);
        }

        output.flush();
    } finally{
        close(output);
        close(input);
    }

    facesContext.responseComplete();
}

private static void close(Closeable resource){
    if(resource != null){
        try{
            resource.close();
        } catch(IOException e){
            e.printStackTrace();
        }
    }
}
我的组件命令按钮是:

<a4j:commandButton  id="btnGenerarAllPDF" style="width:130px;"
                rendered="#{clsGestionReclamoRealSrv.objComponente.blVerBtnGenerarExpedienteElectronico}"
                value="Generar Expediente"
                onclick="#{rich:component('modCargando')}.show();" 
                action="#{clsGestionReclamoRealSrv.doGenerarAllPDF}"
                oncomplete="#{rich:component('modCargando')}.hide();"
                reRender="frmRegistrarReclamo"/>
结果是浏览器中的文本


他们知道如何修复它。

我认为设置内容类型的适当方法如下:

response.setContentType("Content-Type","application/pdf");
response.setHeader("Content-Disposition", "inline; filename=\"" + NombrePDF + ".pdf\";");   
这可以按预期将您的文件下载为
pdf
。要在浏览器中查看文件,请尝试以下操作:

response.setContentType("Content-Type","application/pdf");
response.setHeader("Content-Disposition", "inline; filename=\"" + NombrePDF + ".pdf\";");   

嗨,把目标改成空白,它就成功了。你可以在不占用大量带宽的情况下加载pdf?