2011-09-20 5 views
29

DOMPDF를 사용하여 PDF 파일을 만듭니다. PDF로 추출 할 큰 컨텐츠가 있습니다. 모든 페이지에 헤더가 필요합니다. 따라서 누구나 PDF에 머리말과 꼬리말을 추가하여 DOMPDF를 사용하는 모든 페이지에 헤더가 표시되도록 할 수 있습니다.PHP에서 DOMPDF를 사용하는 PDF 페이지의 헤더

답변

18

DOMPDF wiki에 FAQ 항목이 있습니다. 머리글과 바닥 글 또는 페이지 번호를 추가하는 방법이 있습니까?.

그래서 당신이 (당신의 바닥 글에 대한 유사한 page_text 울어 추가) 당신의 HTML 입력에 다음 "인라인 PHP"-snippet을 추가 할 수 있습니다 : 당신이 대신에 이것을 구현하려면

<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() -method를 호출해야합니다.이 메서드는 위의 예제 에서처럼 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 태그를 사용할 수 없기 때문에 지원 텍스트 만 지원한다. 필자의 요구 사항에서는 보고서를 작성해야하며 보고서 헤더 또는 열 이름이 모든 페이지에 표시되어야합니다. PDF에서 내 HTML 헤더를 인쇄하는 것을 찾을 수 없습니다. 네가 뭔가를 알고 있으면 나를 도와주세요. – Sandy

+10

코드의 두 번째 부분이 더 좋으며 인라인 스크립트 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> 

또한 두 가지 스타일의 조합을 사용할 수 있습니다. PDF 개체와 page_text 메서드를 사용하여 추가 한 텍스트는 HTML 내용 위에 렌더링됩니다.

+0

안녕하세요, Brian .. 플러스 1 지도 시간. 당신은 매우 쉽게 만들었습니다 :) –

+1

@BrianS는 페이지 카운터를 존중합니까? 나는 그것을 작동시킬 수 없었다. 이것은 "counter (pages)"의 내용 : counter (page) "에 대한 이야기입니다. – Pzanno

+0

@Pzanno dompdf는 현재이 방법으로 총 페이지 수를 표시 할 수 없습니다. 이 정보에 액세스하는 유일한 방법은 인라인 스크립트를 사용하는 것입니다. – BrianS