使用PHP生成PDF时出现Chrome错误

时间:2015-07-29 11:11:56

标签: php pdf http-headers tcpdf

我遇到了在Chrome中使用PHP显示PDF的问题。

上下文:

我使用TCPDF(http://www.tcpdf.org/)生成PDF。 我设置了这样的标题:

header("Content-type: application/pdf");
header('Content-Disposition: inline; filename="Sujet.pdf"');
header("Content-Transfer-Encoding: binary");
header('Accept-Ranges: bytes');

出于测试目的,我将我的标题放在index.php文件的最开头,就在第一个<?php之后

其他信息,我使用FatFree框架,我不认为标题是由框架处理的。

我正在使用TCPDF类的扩展来显示PDF。我创建了一个实现函数render的扩展类,它使用以下命令:

$this->Output('Sujet.pdf', 'I');

问题:

  1. 使用chrome:PDF不会显示,我有ERR_INVALID_RESPONSE
  2. 使用firefox:显示PDF但有一个firebug错误:NetworkError: 500 Internal Server Error。答案是
  3.   

    此网址中的资源不是文字

    我认为这意味着firefox期望文本并改为使用其他内容。

    此外,PDF正确显示在TCPDF网站示例中。在我看来,问题来自错误或错位的标题。

    感谢您考虑我的问题。

    的Matthias

3 个答案:

答案 0 :(得分:1)

使用标题功能

public function Header()

答案 1 :(得分:0)

解决方案

标题由TCPDF负责,这里不需要它们。但问题并非如此。

它来自一条没有任何意义的路线:

echo \Template::instance()->render($pdf->rendu($f3, $this));

这是我试图使用FatFree模板用TCPDF编写html的时候。忘了擦掉它。

答案 2 :(得分:-1)

index.php文件:

<?php
header("Content-type: application/pdf");
header('Content-Disposition: inline; filename="Sujet.pdf"');
header("Content-Transfer-Encoding: binary");
header('Accept-Ranges: bytes');

// defining constants
include('liste_permissions.php');
define('PAGE_ERREUR', 'templates/forbidden.htm');

// adding librairies
$f3 = require('lib/base.php');
// adding config files
$f3->config('config/config.ini');
$f3->config('config/routes.ini');
$f3->config('config/bdd.ini');

// defining other constants in the Hive of fatfree framework
$bdd = new Bdd($f3);
$f3->set('Bdd', $bdd->getDb());
$f3->set('f3', $f3);
$f3->set('FILE', __FILE__);

// Global functions used a lot
include('fct_globales.php');

// Refreshing the session of the connexion
\Membre\Manager::instance()->refreshConnection();

// running fatfree framework
$f3->run();

路由服务调用以下函数:

function renduPdf($f3) {

    if(CIA(SEE_SUJETS_ET_COR)) {
        $pdf = new \Pdf;
        $pdf->rendu(Manager::instance()->getFromId($f3->get('PARAMS.id')));
        echo \Template::instance()->render($pdf->rendu($f3, $this));
    }
    else {
        echo ERREUR;
    }
}

pdf->rendu()在这里:( pdf扩展TCPDF类)

public function rendu(\Sujet\Data $sujet) {
    //fatfree base
    $f3 = \Base::instance();
    // Setting the class attributes
    $this->sujet = $sujet;
    $questions = $sujet->getQuestions();
    $this->nomAbrege = 'CB' . $sujet->getNumero_cb();
    $this->numMatiere = $sujet->getMatiere();
    $this->nomMatiere = $f3->get('matieres')[$sujet->getMatiere()];

    // PDF initialisation : author, imagescale
    $this->initialisation();

    // Displaying questions
    $this->premierePage();
    foreach ($questions as $question) {
        $this->question($question);
    }

    $this->Output('Sujet.pdf', 'I');
}