PHP:尝试使pdf文件可下载

时间:2013-03-22 19:11:37

标签: php

我正在尝试在用户成功提交表单后下载PDF文件。

我使用了this question中的代码,但pdf文件的内容以gebrish字符输出,而不是弹出的下载对话框。

从函数

中调用下载代码
function phpfmg_thankyou(){
    phpfmg_redirect_js();

    //include('get_file.php');
    $pdf_file = "{$_SERVER['DOCUMENT_ROOT']}/secured_assets/CRE_White_Paper_Release_01-15-2013.pdf";
    if( file_exists( $pdf_file ) ){
        header("Content-Type: application/octet-stream");
        header("Content-Disposition: attachment; filename=" . Urlencode('CRE_White_Paper_Release_01-15-2013.pdf'));   
        header("Content-Type: application/force-download");
        header("Content-Type: application/download");
        header("Content-Description: File Transfer");            
        header("Content-Length: " . Filesize($pdf_file));
        flush(); // this doesn't really matter.
        $fp = fopen($pdf_file, "r");
        while (!feof($fp)){
            echo fread($fp, 65536);
            flush(); // this is essential for large downloads
        } 
        fclose($fp);

    }

?>

<!-- [Your confirmation message goes here] -->
    <br>

    <div style="padding: 1em; background: #CDD7B6;">    
        <b>Your inquiry has been received. Thank you!</b>
        <p><a title="FREE White Paper Commercial Real Estate Expectations" href="secured_assets/CRE_White_Paper_Release_01-15-2013.pdf">Click Here</a> to get your FREE copy of White Paper Commercial Real Estate Expectations</p>
    </div>

<?php



} // end of function phpfmg_thankyou()

enter image description here

2 个答案:

答案 0 :(得分:0)

这只是一种预感,但请尝试删除PHP中的所有HTML代码:

<!-- [Your confirmation message goes here] -->
    <br>

    <div style="padding: 1em; background: #CDD7B6;">    
        <b>Your inquiry has been received. Thank you!</b>
        <p><a title="FREE White Paper Commercial Real Estate Expectations" href="secured_assets/CRE_White_Paper_Release_01-15-2013.pdf">Click Here</a> to get your FREE copy of White Paper Commercial Real Estate Expectations</p>
    </div>

添加这样的内容(我认为)会让您的客户认为HTML是PDF文件的一部分。正在压缩的PDF文件,任何非标准数据最终都会使整个过程变得乱七八糟。

浏览器会在下载文件之前自动将您带回原来的页面(如果文件设置为自动下载)

因此,如果你想要一个thankyou,你可以设置一个PHP页面,上面写着“Thankyou”,然后将浏览器重定向到实际下载的PHP页面。下载发生时,仍会显示您的Thankyou。

我绝对不是PHP专家,所以如果我错了,请告诉我,我会删除答案。

在尝试下载文件之前,我建议只是尝试让php文件假装它是一个pdf文件。这样可以减少可能出错的事情。一旦你输出了一个pdf文件,你只需要在现有代码中添加正确的标题,使其自动下载。

答案 1 :(得分:0)

谢谢大家的投入。我能够通过在提交后重定向到另一个页面来解决这个问题,并将下载代码放在该重定向页面中。