html 轉 pdf 教學

此篇為 html2pdf 備忘錄,

記載 :

1.將 html 內容轉換至 pdf
2.解決語系utf 問題
3.順道理解 ob_start() 緩存在php的作法

以下連結包含解決中文顯示的問題 , 搭配底下的 code 一起看
https://github.com/spipu/html2pdf


直接帶入code來看 , 分為兩部份


//Content.php
<table>

<?php for($i = 0 ; $i < 5 ; $i++ ){ ?>

 <tr>
 <td><?php echo "---->".$i."<br>"; ?></td>
 </tr>

<?php } ?>
</table>



<!-- 開始緩存 -->
<?php ob_start(); ?>

要轉成pdf的內容こんにちは世界

<!-- 取得緩存內容 -->
<?php $content = ob_get_contents(); ?>

<!-- 關閉緩存 -->
<?php ob_flush(); ?>

<!-- 關閉緩存 印出 -->
<?php ob_get_flush(); ?>

<!-- 關閉緩存 不印出 -->
<?php ob_end_clean(); ?>

<!-- 測試緩存內容 -->
<?php echo "<br>php Cache:".ob_get_contents()."<br>"; ?>

    <form method="post" action="html2pdf.php">
     <input type="hidden" name="Content" value=<?php echo $content; ?>
     <input type="submit" name="submit" value="Submit">
    </form>


整體的理解
1.整個 html 資源由上到下,若需轉成 pdf 部份 以 ob_start()為起始
2.執行 ob_start() 表由該行開始將內容記入 php 緩存
3.ob_get_contents 取出緩存內容放入變數 $Content 中
4.為什麼需要這麼做?網路上得到的解答是只有字串才能放入寫檔函式中
因此透過緩存返回的字串塞進轉換函式中

5.記入緩存的內容以下列兩種方式來清除
    5.1.ob_get_flush 清除緩存並且將緩存內容導致瀏覽器
    5.2.ob_get-_clean 只清除緩存




//html2pdf.php
<?php
    require_once(dirname(__FILE__).'../html2pdf.class.php');
    try
    {
     
     //freeserif
     $content = '<page style="font-family:javiergb">'.$_REQUEST['Content'].'</page>';
        $html2pdf = new HTML2PDF('P', 'A4', 'fr', true, 'UTF-8', 0);
        $html2pdf->pdf->SetDisplayMode('fullpage');
        $html2pdf->setDefaultFont('javiergb');
        $html2pdf->writeHTML($content, isset($_GET['vuehtml']));
        $html2pdf->Output('ticket.pdf');
    }
    catch(HTML2PDF_exception $e) {
        echo $e;
        exit;
    }
?>
html2pdf.php
這支檔案內容理解很簡單,單純將form post的內容傳送至此做轉換
唯一要注意是
$html2pdf->setDefaultFont('javiergb');
此字型支援 Utf 各種語系顯示,轉換出來的中文才會正常


沒有留言:

張貼留言