2013-12-19 5 views
1

я пытаюсь создать PDF-файл из Smarty шаблона с помощью DOMPDF: код ниже: -не может открыть файл PDF генерируется с использованием DOMPDF

require_once('dompdf/dompdf_config.inc.php'); 
$dompdf = new DOMPDF(); 
$dompdf->load_html($smarty->fetch(CURRENT_TEMPLATE.'/module/shopping_cart.html')); 
$dompdf->render(); 
$dompdf->stream("sample.pdf"); 

PDF-файл создается, но когда я пытаюсь открыть PDF файл ошибки сообщения, отображающее, как показано ниже «Acrobat не может открыть„sample.pdf“, потому что он либо не поддерживается тип файла или потому, что файл был поврежден» HTML страницы правильно diplaying, когда я пытаюсь

echo $smarty->fetch(CURRENT_TEMPLATE.'/module/shopping_cart.html') 

, пожалуйста, помогите мне решить эту проблему. rror ... заранее заблаговременно

ответ

5

да это проблема dompdf. Но я могу преодолеть эту проблему. Я создал функцию для создания PDF. проверьте ниже функции: -

function pdf_create($html, $filename='', $stream=TRUE) 
{ 
    require_once("dompdf/dompdf_config.inc.php"); 
    $savein = 'uploads/policy_doc/'; 
    $dompdf = new DOMPDF(); 
    $dompdf->load_html($html); 
    $dompdf->render(); 
    $canvas = $dompdf->get_canvas(); 
    $font = Font_Metrics::get_font("arial", "normal","12px"); 

    // the same call as in my previous example 
    $canvas->page_text(540, 773, "Page {PAGE_NUM} of {PAGE_COUNT}", 
        $font, 6, array(0,0,0)); 

    $pdf = $dompdf->output();  // gets the PDF as a string 

    file_put_contents($savein.str_replace("/","-",$filename), $pdf); // save the pdf file on server 
    unset($html); 
    unset($dompdf); 

} 

Примечание: - вам нужно получить сгенерированный PDF в виде строки, а затем сохранить его в файл pdf.

EDIT: - Вы можете удалить ниже часть из выше функции: -

$canvas = $dompdf->get_canvas(); 
    $font = Font_Metrics::get_font("arial", "normal","12px"); 

    // the same call as in my previous example 
    $canvas->page_text(540, 773, "Page {PAGE_NUM} of {PAGE_COUNT}", 
        $font, 6, array(0,0,0)); 

это выше код для обработки нескольких страниц заголовков.

+0

спасибо за ответ, но, к сожалению, это не сработало для меня..почему это get_canvas(); пожалуйста, не могли бы вы дать некоторое объяснение кода .... еще раз спасибо – sarincm99

+0

какая ошибка вы получаете? Вы можете опустить get_canvas из своего кода. это используется - если у вас несколько страниц. затем для каждого заголовка страницы. – ripa

+0

большое спасибо ..... это работает :) нет слов для выражения моей благодарности..и после этого за последние 2 дня..а большое облегчение сейчас – sarincm99

2

это работает для меня, в конце концов мой код выглядит следующим образом:

$html = 
    '<html><body>'. 
    '<p>Put your html here, or generate it with your favourite '. 
    'templating system.</p>'. 
    '</body></html>'; 
function pdf_create($html, $filename='', $stream=TRUE) 
{ 
    require_once('scripts/vendor/dompdf/dompdf/dompdf_config.inc.php'); 
    $savein = ''; 
    $dompdf = new DOMPDF(); 
    $dompdf->load_html($html); 
    $dompdf->render(); 
    $canvas = $dompdf->get_canvas(); 
    $font = Font_Metrics::get_font("arial", "normal","12px"); 

    /*// the same call as in my previous example 
    $canvas->page_text(540, 773, "Page {PAGE_NUM} of {PAGE_COUNT}", 
        $font, 6, array(0,0,0));*/ 

    $pdf = $dompdf->output();  // gets the PDF as a string 

    file_put_contents("arquivo.pdf",$pdf); // save the pdf file on server 

    unset($html); 
    unset($dompdf); 

} 

pdf_create($html); 
3

Использование ob_end_clean(); перед вызовом $dompdf->stream();.

1

У меня также была такая же ошибка, но когда я использовал ob_end_clean() до $ dompdf-> stream(), это сработало для меня.

Ниже приведен мой код.

$ dompdf = new DOMPDF();

$ dompdf-> load_html ($ html);

$ dompdf-> render();

$ pdf = $ dompdf-> output();

$ invnoabc = 'Bokkinglist.pdf';

ob_end_clean();

$ dompdf-> поток ($ invnoabc); выход;

Смежные вопросы