2017-12-21 12 views
0

DOMPDFを使用して$ html引数に設定したものの.pdfを生成する関数があります。HTMLが既に存在する場合、DOMPDFは機能しません

function generate_pdf($html){ 
    //DOMPDF stuff 
} 

これはうまくいきますが、私が取り組んでいる問題は、すでにHTMLコンテンツがあるページからこの関数を呼び出すと失敗することです。

は...

<?php 
    require_once '../header.php'; //This has HTML content in it. 
    $html = '<h1>stuff</h1>'; 
    generate_pdf($html); 
?> 

これも失敗した...

<?php 
    echo 'stuff'; 
    $html = '<h1>stuff</h1>'; 
    generate_pdf($html); 
?> 

作品...

<?php 
    $html = '<h1>stuff</h1>'; 
    generate_pdf($html); 
?> 

を失敗するこれを回避する方法はありますか? $dompdf = new \Dompdf\Dompdf();が間違って表示されることがありますが、その行が正常に動作している理由ですので、この機能が住んでいるファイルは、名前空間を持っていることをfunction generate_pdf($html)

function generate_pdf($html){ 
    //Get the necessary dompdf files 
    include_once DOMPDF_PATH . '/autoload.inc.php'; 

    // instantiate and use the dompdf class 
    $dompdf = new \Dompdf\Dompdf(); 
    $dompdf->loadHtml($html); 

    // Render the HTML as PDF 
    $dompdf->render(); 

    //Output the PDF 
    $dompdf->stream(); 
} 


内容。

答えて

1

完全なコードは、質問に追加された後に変更ANSWER:

私が含まれているファイルで完全 HTMLコンテンツを持っている、余分なHTMLその前または後に(も何もPHPが響いていません)。

私は前に間違いを犯しました。私はdompdf autoloadと内容を混在させましたが、私の場合はどのように動作するのかを見てください。

<?php 
require_once '../../dompdf/autoload.inc.php'; 
use Dompdf\Dompdf; 
$dompdf = new Dompdf(); 
$dompdf->set_option('isPhpEnabled', true); 
ob_start(); 

//Here I am getting a few variables (from the URL via GET) which I use in the included php file 

include_once "your_content_in_one_file.php"; 
$html = ob_get_contents(); 
ob_end_clean(); 
$dompdf->loadHtml($html); 
$dompdf->setPaper('A4', 'portrait'); 
$dompdf->render(); 
$dompdf->stream($pdf_name); 
?> 
+0

多分私の問題です。前と後にHTMLがある場合(ヘッダーとフッターが含まれていると思う)、それは問題を引き起こすでしょうか? – gtilflm

+0

そうだと思います。完全なHTMLを余分なPHPファイルにまとめて組み込む必要があります。 – Johannes

+0

私はちょうど別のテストをして、私の質問を更新しました。私の関数では、require_once DOMPDF_PATHから変更しました。 '/autoload.inc.php'; 'to' include_once DOMPDF_PATHです。 '/autoload.inc.php'; 'しかし、関数呼び出しの前のHTML(またはそれに関するもの)は、 '私はまだpdf:ストリームを送ることができませんでした。だから、問題はHTMLだとは思わない。私の言いたいことを見て? – gtilflm

0

それはob_start();がすでにシステム内の別の場所と呼ばれていたという事実に関連することになった。これは、機能がない、PHPファイルの内容です。使用方法...

if (ob_get_level()){ 
    ob_end_clean(); 
} 

私の問題が修正されました。他の人に役立つことを願っています。

関連する問題