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

Lin*_*vel 5 php pdf fpdf tcpdf

我正在尝试使用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');
Run Code Online (Sandbox Code Playgroud)

这里,最后一行$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.

注意:没有文件权限问题

任何人都可以指出这个问题.

小智 14

尝试把ob_clean(); 在$ pdf-> Output('output.pdf','F')之上;

ob_clean();

// save file
$pdf->Output('output.pdf', 'F');
Run Code Online (Sandbox Code Playgroud)

如果那不行.比你需要设置这样的路径:

$pdf->Output('yourpath/output.pdf', 'F');
Run Code Online (Sandbox Code Playgroud)

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

$pdf->Output($_SERVER['DOCUMENT_ROOT'] . 'output.pdf', 'F');
Run Code Online (Sandbox Code Playgroud)

  • 前置$ _SERVER ['DOCUMENT_ROOT']为我工作,谢谢! (3认同)

Cha*_*JRA 6

您必须放置完整路径而不是相对路径,使用 __DIR__ 的示例:

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


小智 5

在'include/tcpdf_static.php'文件中,如果我删除完整的'if语句',静态函数'fopenLocal'中大约2435行......工作正常.

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


mos*_*znv 5

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

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