2012-07-11 4 views
1

TCPDF와 FPDI 템플릿을 함께 사용하면 일부 CSS 지원이 손실됩니다. 문제는 테두리 또는 배경색과 같은 것으로, 결국 PDF 템플릿 아래의 레이어로 끝납니다. TCPDF는 SetLineStyle()을 사용하여 CSS 테두리/배경을 PDF로 변환하며 이것이 문제인 것으로 보입니다. 예를 들어FPDI 템플릿 및 CSS가 포함 된 TCPDF

:

$this->setSourceFile($filename); // /path/to/my/background.pdf 
$imported_page = $this->ImportPage(1); 
$this->useTemplate($imported_page); 

... 

$html = '<table style="border: 1px solid #000;"><tr><td style="background-color: #ff0000;">...</td></tr></table>'; 

$this->writeHTMLCell(45, 25, 160, 29, $html); 

는 CSS 테두리를 렌더링하지 않습니다. useTemplate()이 제거되면 바로 테두리가 표시됩니다.

  1. 표/컨텐츠 층
  2. PDF 템플릿 층 (그룹)
  3. 테두리 및 배경 레이어 : 위에서 아래로 - useTemplate()

    PDF 레이어 : 일러스트 레이터와 결과 PDF 파일을 분석하는 것은 흥미로운 일을 보여줍니다 (경로) useTemplate()없이

PDF 레이어 - 위에서 아래로 :

,363,210
  1. 표/컨텐츠 층
  2. 테두리 및 배경 층 (경로)

일러스트 레이터에서 PDF 템플릿을 포함하는 레이어 그룹을 사용하지 않도록 설정, 테두리 및 배경이 표시됩니다.

불행히도 우리는 PDF 템플릿 레이어 그룹을 스택 맨 아래에 놓아 다른 모든 것들이 그 위에 렌더링되도록하는 방법을 찾지 못했습니다. 우리가 가지고 올 수있는 유일한 해결 방법은, startTemplate()/endTemplate()writeHTMLCell() 전화를 포장하고 printTemplate()로 마무리되었다 :

$this->setSourceFile($filename); // /path/to/my/background.pdf 
$imported_page = $this->ImportPage(1); 
$this->useTemplate($imported_page); 

... 

$html = '<table style="border: 1px solid #000;"><tr><td style="background-color: #ff0000;">...</td></tr></table>'; 

$workaround_template = $this->startTemplate($w, $h); 
$this->writeHTMLCell(45, 25, 160, 29, $html); 
$this->endTemplate(); 
$this->printTemplate($workaround_template, $x, $y, $w, $h, 'T', 'L'); 

그래서 호기심은 :이 할 수있는 유일한 방법입니다, 또는 방법이 PDF 템플릿을 앞으로 모든 일의 맨 아래에 넣으시겠습니까?

미리 감사드립니다.

답변

4

해결책은 실제로 setPageMark()를 사용하는 것입니다. 여기 나를 위해 매우 잘 작동 것입니다 :

public function AddPage($orientation = '', $format = '') { 
    global $pdf_data_path; 
    parent::AddPage($orientation, $format); 
    if ($this->use_headed) { 
     $this->setSourceFile($pdf_data_path."/headed.pdf"); 
     $tplidx = $this->importPage(1, '/MediaBox'); 
     $this->useTemplate($tplidx, 0, 0, 0, 0, true); 
     $this->setPageMark(); 
    }  
} 

열쇠는 당신이 템플릿을 사용 후() setPageMark을 배치하는 것입니다. 그러면 테두리가 결과 PDF의 템플릿 위에 쌓입니다.

관련 문제