TCPDF错误:无法创建输出文件

时间:2015-03-24 12:32:17

标签: php pdf tcpdf fpdf

我正在尝试使用TCPDF和FPDI的组合生成pdf。这是我的代码。

require_once('../tcpdf/tcpdf.php');
require_once('../FPDI/fpdi.php');

$fileName = '../sample.pdf';

class PDF extends FPDI {
/**
 * "Remembers" the template id of the imported page
 */
var $_tplIdx;
var $numPages = 0;

/**
 * Draw an imported PDF logo on every page
 */
function Header() {

    global $fileName;

    if (is_null($this->_tplIdx)) {
        $this->setSourceFile($fileName);
        $this->_tplIdx = $this->importPage(1);
        $this->numPages = $this->setSourceFile($fileName);
    }
    $size = $this->useTemplate($this->_tplIdx);
}

function Footer() {
    // emtpy method body
}
}

// initiate PDF
$pdf = new PDF($fileName);
$pdf->setFontSubsetting(true);

// add a page
$pdf->AddPage();

// save file
$pdf->Output('output.pdf', 'F');

此处,最后一行$pdf->Output('output.pdf', 'F');用于保存文件。但它没有用。当我只有$pdf->Output()时,它在浏览器中显示pdf。

我已尝试$pdf->Output('output.pdf', 'D');进行下载,但效果很好。似乎$pdf->Output('output.pdf', 'F');仅起作用,并显示错误TCPDF ERROR: Unable to create output file: output.pdf

注意:没有文件权限问题

请有人指出这个问题。

9 个答案:

答案 0 :(得分:12)

尝试放入ob_clean();正好在$ pdf->输出('output.pdf','F');

ob_clean();

// save file
$pdf->Output('output.pdf', 'F');

如果那不起作用。比你需要设置这样的路径:

$pdf->Output('yourpath/output.pdf', 'F');

如果你不知道绝对路径,试试这个:

$pdf->Output($_SERVER['DOCUMENT_ROOT'] . 'output.pdf', 'F');

答案 1 :(得分:5)

在' include / tcpdf_static.php'在静态函数' fopenLocal'中记录大约2435行。如果我删除了完整的“if”语句,那么......工作正常。

public static function fopenLocal($filename, $mode) {
    /*if (strpos($filename, '://') === false) {
        $filename = 'file://'.$filename;
    } elseif (strpos($filename, 'file://') !== 0) {
        return false;
    }*/
    return fopen($filename, $mode);
}

答案 2 :(得分:3)

这是使用tcpdf的laravel程序员的一个提示 如果要将pdf保存到公共目录,只需使用:

PDF::Output(public_path('/uploads/pdf/hello_world.pdf'),'F');

答案 3 :(得分:2)

问题是由文件路径引起的。我通过将$pdf->Output('output.pdf', 'F');更改为绝对路径$pdf->Output('/var/www/yourdomain/output.pdf', 'F');

来解决此问题

答案 4 :(得分:2)

您必须使用完整路径而不是相对路径,使用_DIR __:

 $pdf->Output(__DIR__."/../invoices/invoice_".date('d-M-Y').".pdf", 'F');

答案 5 :(得分:0)

同时检查文件夹权限。因为我有同样的问题,我通过更改文件夹权限来解决它。

答案 6 :(得分:0)

我发现此错误也是由太多图像引起的。我试图用186张图像创建PDF,但出现此错误。我尝试了上述所有选项,但仍然收到此错误。然后我缩小图像(并用100张图像进行了测试),PDF创建成功。再次增加图像数量,然后再次出现错误。

答案 7 :(得分:0)

请确保在运行脚本时未在任何位置打开文件 sample.pdf 。如果它在其他地方打开,则TCPDF无法打开它。

答案 8 :(得分:0)

授予您要存储 output.pdf 文件的目录权限

chmod -R 0777 /yourdirectory