2011-10-14 3 views
0

PDF 생성을 위해 TCPDF를 사용하고 있습니다. PDF는 fpdi 클래스를 통해 PDF 템플릿을 사용합니다. 생성 된 일부 PDF는 단일 페이지입니다. 하지만 때로는 두 번째 페이지가 있습니다. 나는 $ pdf-> MultiCell을 사용하여 내 콘텐츠를 출력합니다. 페이지 나누기는 $ pdf-> SetAutoPageBreak (true)를 통해 잘 작동합니다.두 번째 페이지의 위쪽 여백을 tcpdf로 변경하십시오. AcceptPageBreak()

이제 내 문제 : 두 번째 페이지에서 다른 상단 여백이 필요합니다. 지금까지 시도한 것은 AcceptPageBreak() 함수를 사용하여 불행하게도 성공하지 못했기 때문입니다.

다음 코드를 사용하여 두 번째 페이지의 여백을 변경했습니다. 그러나 PDF 끝에는 하나의 빈 페이지가 추가됩니다.

public function AcceptPageBreak() { 

    $this->SetMargins(24, 65, 24, true); 
    $this->AddPage();   
    return false; 

} 

$ pdf-> deletePage로 마지막 페이지를 제거하려고했지만 작동하지 않습니다. 내가 함수에 몇 가지 조건을 삽입하려고 :

public function AcceptPageBreak() { 
    if (1 == $this->PageNo()) { 
     $this->SetMargins(24, 65, 24, true); 
     $this->AddPage();   
     return false; 
    } else { 
     return false; 
    } 

} 

이 2 페이지에 텍스트 PDF의 잘 작동합니다. 하지만 이제는 작은 텍스트 만 있어도 두 페이지로 된 PDF를 얻을 수 있습니다. PDF가 생성 될 때마다 "AcceptPageBreak()"함수가 호출되는 것 같습니다.

내 PDF가 끝날 때 빈 페이지를 어떻게 방지 할 수 있습니까?

답변

1

드디어 내 자신의 질문에 대한 해결책을 찾았습니다. 아마도 같은 문제가있는 다른 사람에게 흥미로울 수 있습니다.

위 페이지 (버전 1)처럼 AcceptPageBreak() 함수를 사용했습니다. PDF를 저장 한 후 마지막 페이지가없는 PDF를 새 PDF로 가져오고 새 PDF를 저장합니다. 여기에 코드

:

$pdf = new MYPDF(); 

$pdf->SetMargins(24, 54);   

$pdf->AddPage(); 

... 

$pdf->MultiCell('0', '', $text, '', 'L'); 

$pdf->lastPage(); 

$lastPage = $pdf->PageNo() + 1; 

$pdf->Output($filePath, 'F'); 

// remove last page 

$finalPdf = new FPDI(); 
$finalPdf->setSourceFile($filePath); 

for ($i=1; $i < $lastPage; $i++) { 
    $finalPdf->AddPage(); 
    $tplIdx = $finalPdf->importPage($i); 
    $finalPdf->useTemplate($tplIdx);    
} 
$finalPdf->Output($filePath, 'F'); 

는 도움이되기를 바랍니다.

6

일부 코드와 원래 기능을 사용하여 파일 끝에 불필요한 빈 페이지가 추가되지 않는 방법을 발견했습니다.

public function AcceptPageBreak() { 
     if (1 == $this->PageNo()) { 
       $this->SetMargins($left_margin, $top_margin, $right_margin, true); 
     } 
     if ($this->num_columns > 1) { 
      // multi column mode 
      if ($this->current_column < ($this->num_columns - 1)) { 
       // go to next column 
       $this->selectColumn($this->current_column + 1); 
      } elseif ($this->AutoPageBreak) { 
       // add a new page 
       $this->AddPage(); 
       // set first column 
       $this->selectColumn(0); 
      } 
      // avoid page breaking from checkPageBreak() 
      return false; 
     } 
     return $this->AutoPageBreak; 
    } 
0

자동 페이지 나누기로 인해 콘텐츠 렌더링이 일부 비 일관 적으로 발생합니다. 의도하지 않게 페이지 경계 밖으로 확장되는 요소로 인해 추가 페이지가 생성 될 수 있습니다.

$pdf->SetAutoPageBreak(true, $margin_bottom); 

다음을 사용하여 콘텐츠를 추가 할 때만 자동 페이지 나누기를하는 것이 좋습니다.

$pdf->SetAutoPageBreak(false); 
관련 문제