Сгенерированный Dompdf PDF-файл имеет размер 0 байт.

Я пытаюсь сохранить pdf на диск.

Я использую Dompdf и Codeigniter, как показано ниже:

$this->load->helper('dompdf','file');
$this->load->helper('file');
$saveTo = './labels'; 
$data['id'] = $this -> uri -> segment(3);
$data['no_of_prints'] = $this -> uri -> segment(4);   
$labelname = "Label". $data['id'] ."-". $data['no_of_prints'] . ".pdf";
$html = $this->load->view('label_view', $data, TRUE);
file_put_contents($saveTo."/".$labelname, pdf_create($html, $labelname));

Хотя имя метки генерируется правильно. Файл, сохраненный на диске, читает 0 байт, и, как и ожидалось, я получаю ошибку Adobe Reader cannot open this file ....

Я также использую fancybox 2.0 для всплывающего окна PDF, и когда я щелкаю правой кнопкой мыши по всплывающему окну (pdf не отображается, я предполагаю, что проблемы с плагином PDF), я могу Save as читаемый PDF, который не равен 0 байтам.

Важно, чтобы приложение автоматически сохраняло pdf на диск. Как сохранить читабельный pdf на диск?


person watkib    schedule 20.05.2013    source источник
comment
Файл записывается на сервер? Вы пытались использовать абсолютный системный путь для расположения файла? Например. $save_to = $_SERVER[DOCUMENT_ROOT] . '/labels/'.$labelname.'.pdf';   -  person Rooneyl    schedule 20.05.2013
comment
Файлы записываются в папку labels в корне, просто она 0 байт и не может быть открыта читалкой pdf.   -  person watkib    schedule 20.05.2013
comment
Вы должны исследовать по частям. Во-первых, ищите любые ошибки или предупреждения от PHP. Во-вторых, проверьте, заполнено ли $html? Вы можете просто повторить это, чтобы проверить. В-третьих, верните результаты pdf_create(), чтобы убедиться, что он что-то возвращает. Если ничего из этого не работает, вам может потребоваться проверить конфигурацию dompdf или погрузиться в расширение, которое использует dompdf.   -  person BrianS    schedule 20.05.2013
comment
Спасибо @BrianS проверил части по отдельности, использовал выбранный ответ ниже, это сработало.   -  person watkib    schedule 21.05.2013


Ответы (1)


Я нашел старый код CI (до версии 2), который использовал DomPDF, у меня был дополнительный параметр для записи в виде файла.
Он сильно отличается от вашего?

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
function pdf_create($html, $filename, $stream=FALSE, $orientation='portrait')
{
    require_once("dompdf/dompdf_config.inc.php");
    spl_autoload_register('DOMPDF_autoload');

    $dompdf = new DOMPDF();
    $dompdf->set_paper( array(0,0, 2.175 * 72, 3.375 * 72), "landscape" ); // credit card size
    $dompdf->load_html($html);
    $dompdf->render();
    if ($stream)
    {
        $dompdf->stream($filename.".pdf");
    }
    else
    {
        $CI =& get_instance();
        $CI->load->helper('file');
        write_file("./uploads/$filename.pdf", $dompdf->output());
    }
}
?>
person Rooneyl    schedule 20.05.2013
comment
Добавил require_once(), создал новый объект DOMPDF, как показано в вашем коде, и все заработало. Спасибо. - person watkib; 21.05.2013