【问题标题】:Try to show pdf file using PHP and fpdf尝试使用 PHP 和 fpdf 显示 pdf 文件
【发布时间】:2014-01-05 20:34:41
【问题描述】:

背景:它的ae学习网站,当用户处于学习阶段时,它会在前3页显示阅读内容,之后需要用户做测试,当用户克服所有挑战,它将显示pdf证书。

目前,问题是:到达最后一页后,总是显示一些奇怪的词:(以下是全部)

(%PDF-1.3 3 0 obj endobj 4 0 obj 流 x�3R��2�35W(�r Q�w3T04�30PISp �Z*�[����(hx��� �+����(j*�d��7W)

这里是部分代码,文件名为load_data.php

else if ($cur_page == $no_of_paginations){


        ob_end_clean();
        require("../fpdf.php");

        $pdf = new FPDF();
        $pdf->AddPage();
        $pdf->SetFont('Arial','B',16);
        $pdf->Cell(40,10,'Hello World!');
        if (preg_match("/MSIE/i", $_SERVER["HTTP_USER_AGENT"])){
            header("Content-type: application/PDF");
        } else {
            header("Content-type: application/PDF");
            header("Content-Type: application/pdf");
        }
        $pdf->Output();
        exit;
    }

这里是分页的ajax:

function loadData(page){

//        debugger;
        loading_show();
        $.ajax
        ({
            type: "POST",
            url: "load_data.php",
            data: { page: +page, tableName:  $.urlParam('modules') },
            //data: "page="+page,
            success: function(msg)
            {
                $("#container").ajaxComplete(function(event, request, settings)
                {
                    loading_hide();
                    $("#container").html(msg);
                });
            }
        });
    }
    loadData(1);  // For first time page load default results
    $('#container .pagination li.active').live('click',function(){
        var page = $(this).attr('p');
        loadData(page);

    })

【问题讨论】:

    标签: php pdf fpdf


    【解决方案1】:

    FPDF 允许您在输出 PDF 时使用一些选项。您可以强制下载,将文件保存到文件系统,或者您可以在页面上显示它们,但您不能像 Jasper 提到的那样生成 PDF 并内联显示它。下面是你要做的:

    创建一个新文件(可能是 show_pdf.php):

        require("../fpdf.php");
    
        $pdf = new FPDF();
        $pdf->AddPage();
        $pdf->SetFont('Arial','B',16);
        $pdf->Cell(40,10,'Hello World!');
        if (preg_match("/MSIE/i", $_SERVER["HTTP_USER_AGENT"])){
            header("Content-type: application/PDF");
        } else {
            header("Content-type: application/PDF");
            header("Content-Type: application/pdf");
        }
        $pdf->Output();
    

    您可能需要通过 $_GET 传入特定的数据参数,以便在您展开此代码时正常工作。

    要在页面上显示它,您将执行以下操作:

    else if ($cur_page == $no_of_paginations){
    ?>
    <iframe src="show_pdf.php?id=asdfasdf"></iframe>
    <?php
    }
    

    【讨论】:

    • 谢谢!听起来不错!这是否意味着在show_pdf.php文件中,我只需要添加$_GET来检查id值是否为asdfasdf并运行以下代码
    【解决方案2】:

    在 borwser 中显示 fpdf 传递第二个参数 'I'

     $filed = $pdf->Output('abc.pdf', 'I');
    

    【讨论】:

      【解决方案3】:

      您似乎正在尝试内联显示 PDF。为此,您应该使用指向您的 PDF 创建脚本的源创建一个 IFRAME。这样浏览器可以选择是否可以显示 PDF,如果不能,则可以下载该文件。

      要点:浏览器不知道如何解释您提供的内容。

      【讨论】:

      • 感谢您的回复,您能告诉我应该在哪里添加 iframe 吗?在 else if ($cur_page == $no_of_paginations) 块中?
      • @user3112938 您的 AJAX 请求将发送到 load_data.php,这就是您要加载到 IFRAME 中的内容。并且您希望将 IFRAME 放置在通常放置 AJAX 响应的 HTML 中(在 #container 内)。看起来您要么必须更改 PHP 脚本以读取 $_GET 变量而不是 $_POST,要么您可以使用 JS 创建 IFRAME,然后使用 method="post" 创建一个针对您的 IFRAME 的表单,然后提交形式。
      【解决方案4】:

      Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;

      Yii::$app->response->headers->add('Content-Type', 'application/pdf');

          $pdf = new FPDF();
      
          $pdf->AliasNbPages();
          $pdf->AddPage();
          $pdf->SetFont('Arial', 'B', 15);
          $pdf->Cell(40, 10, 'Hello World');
          $pdf->Output();
      

      【讨论】:

        【解决方案5】:

        使用一个对象,$('#fact').html('

        Usted no tiene instalado un pugin para .pdf en este navegador。
        Usted puede usar Este link para descargar el archivo PDF。

        ');

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-26
          • 1970-01-01
          • 2013-05-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-19
          • 1970-01-01
          相关资源
          最近更新 更多