2015-03-24 6 views
3

Я пытаюсь создать PDF с помощью комбинации TCPDF и FPDI. Вот мой код.TCPDF ERROR: Не удается создать выходной файл

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.

Примечание: нет прав доступа к файлам не выдает

Можно ли указать вопрос, пожалуйста.

ответ

11

Попробуйте поместить ob_clean(); прямо над $ pdf-> Output ('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

предваряя $ _SERVER [ «DOCUMENT_ROOT»] работал для меня, благодаря! – plong0

5

В «включают/tcpdf_static.php» файл о 2435 линии в статическом function 'fopenLocal', если я удалю полный оператор if 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); 
} 
3

это подсказка для Laravel программистов, использующих TCPDF , если вы хотите сохранить PDF в общедоступном каталоге, просто используйте:

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

0

Проверьте права доступа папки, а также. Потому что у меня такая же проблема, и я разрешаю ее, изменяя права доступа к папке.

0

проблема возникает из-за пути файла. Я получаю это исправить путем изменения $pdf->Output('output.pdf', 'F'); к абсолютному пути $pdf->Output('/var/www/yourdomain/output.pdf', 'F');

0

Вы должны поставить полный путь вместо относительного одного, пример использования with__DIR__:

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