2011-09-20 39 views
29

DOMPDFを使用してPDFファイルを作成しています。私はPDFで抽出する大きなコンテンツを持っている、我々はすべてのページにいくつかのヘッダーが必要です。だから誰でも、ヘッダーとフッターをPDFに追加して、ヘッダーがDOMPDFを使ってすべてのページに表示されるようにすることができます。PHPのDOMPDFを使用したPDFページのヘッダー

答えて

18

DOMPDF wikiにFAQエントリがあります。ヘッダーとフッターまたはページ番号を追加する方法はありますか?

だから、あなたはあなたのHTML入力を次のように「インラインPHP」-snippet(あなたのフッターの同様のpage_text -callを追加)を追加するか:あなたはむしろあなたにこれを実装する場合

<script type="text/php"> 
    if (isset($pdf)) { 
     $font = Font_Metrics::get_font("helvetica", "bold"); 
     $pdf->page_text(72, 18, "Header: {PAGE_NUM} of {PAGE_COUNT}", 
         $font, 6, array(0,0,0)); 
    } 
</script>  

を呼び出し元側(PHPコード内での直接の意味)にDOMPDFSのget_canvas()メソッドを呼び出す必要があります。このメソッドは、上記の例のようにpage_textメソッドを呼び出すことができる基本PDFレンダラーを返します。私は私が何を意味するかをお見せしましょう:

// your dompdf setup   
$dompdf = new DOMPDF(); 

$dompdf->load_html($html); 
$dompdf->render(); 

// add the header 
$canvas = $dompdf->get_canvas(); 
$font = Font_Metrics::get_font("helvetica", "bold"); 

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

最終的にあなたが(ちょうどそれを試してみる)load_htmlpage_textを呼び出す必要があります。

+0

ありがとうございましたvstm ...ヘッダーにいくつかのhtmlタグを印刷しようとしています。 TCPDFも試してみましたが、HTMLタグを使用することができないので、その唯一のサポートテキストです。私の必要条件では、レポートを作成しなければならず、レポートヘッダーまたは列名をすべてのページに表示する必要があります。 HTMLヘッダをPDFに印刷するものは見つかりません。あなたが何かを知っているなら、私を助けてください。 – Sandy

+10

コードの2番目の部分は、より良いものです、インラインスクリプトPHPコードはありません。 "//ヘッダを追加する"部分は "$ dompdf-> render();"の後になければなりません。働くために – machineaddict

+0

これは受け入れられた回答である必要があります – Epoc

50

0.6.0コードでは、HTML + CSSを使用してヘッダーとフッターを生成することができます。インラインPHPを使用する場合(例:まだPAGE_COUNT個のプレースホルダなし)と比較して、いくつかの制限があります。そのため、実行可能かどうかはニーズに応じて異なります。

次のコードはtwo-page document with a header and footer生成されます:あなたが不足している機能の一部へのアクセスを必要に応じて

<html> 
<head> 
    <style> 
    @page { margin: 180px 50px; } 
    #header { position: fixed; left: 0px; top: -180px; right: 0px; height: 150px; background-color: orange; text-align: center; } 
    #footer { position: fixed; left: 0px; bottom: -180px; right: 0px; height: 150px; background-color: lightblue; } 
    #footer .page:after { content: counter(page, upper-roman); } 
    </style> 
<body> 
    <div id="header"> 
    <h1>Widgets Express</h1> 
    </div> 
    <div id="footer"> 
    <p class="page">Page </p> 
    </div> 
    <div id="content"> 
    <p>the first page</p> 
    <p style="page-break-before: always;">the second page</p> 
    </div> 
</body> 
</html> 

また、2つのスタイルを組み合わせて使用​​することができます。 page_textメソッドを使用して追加されたPDFオブジェクトおよびテキストは、HTMLコンテンツの上にレンダリングされます。

+0

あなたの素晴らしいチュートリアル。あなたはそれを非常に簡単に作った:) –

+1

@BrianSはdompdfはページカウンタを尊重しますか?私はそれを働かせることができませんでした。これは私が「カウンタ(ページ)」の内容:counter(ページ)について語っているものです。 – Pzanno

+0

@Pzanno dompdfは現在、このように総ページ数を表示できません。この情報にアクセスする唯一の方法は、インラインスクリプトによるものです。 – BrianS

関連する問題