2014-09-03 5 views
1

웹에서 가져온 TCPDF 예제에 대한 간단한 래퍼 클래스를 만들었습니다. 제 목표는 클래스의 메소드를 연속적으로 호출 한 다음 pdf 파일을 프로젝트의 디렉토리로 출력하는 것입니다.TCPDF - 호출 출력 메서드가 아무 것도하지 않는 것 같습니다.

하나의 BLOB에 버전이 있고 페이지에서 호출 할 때 코드가 올바르게 작동했습니다. 그것을 클래스에 넣은 후에는 Output()으로 전화를 걸거나 끊을 것입니다. 나는 netbeans에서 디버깅 할 때 단계로 나아갈 수 없으며 아무런 오류도 표시되지 않습니다.

폴더 권한 문제 인 경우 해당 출력 디렉토리에서 chmod를 실행했습니다. 나는 내 인터넷 검색에서 유사한 문제를 찾을 관리하지 않은

require_once('PDF_Test.php'); 
$pdf = new PDF_Test(); 

$pdf->set_document_info(); 
$pdf->header(); 
$pdf->footer(); 
$pdf->set_default_monospaced_font(); 
$pdf->set_margins(); 
$pdf->set_auto_page_break(); 
$pdf->set_image_scale(); 
$pdf->set_language_array(); 
$pdf->set_font_subsetting(); 
$pdf->set_font(); 
$pdf->add_page(); 
$pdf->add_text_blob(); 
$pdf->output(); 

: 여기에 또 다른 PHP 파일에 클래스를 호출하는 코드가

<?php 

define('IMAGE_DIR', '/home/user/NetBeansProjects/PDF_Quote/img/'); 
require_once('lib/tcpdf/tcpdf.php'); 

class PDF_Test extends TCPDF { 


    function __construct() { 
     parent::__construct(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); 
    } 

    public function set_document_info($creator = '', $author = '', $title = '', $subject = '', $keywords = '') 
    {    
     $creator = PDF_CREATOR; 
     $author = 'Author'; 
     $title = 'Title Example'; 
     $subject = 'Subject Example'; 
     $keywords = 'TCPDF, PDF, example, test, guide'; 

     // set document information 
     $this->SetCreator($creator); 
     $this->SetAuthor($author); 
     $this->SetTitle($title); 
     $this->SetSubject($subject); 
     $this->SetKeywords($keywords); 
    } 

    public function header($logo_img = '', $title_text = '', $addit_text = '') 
    { 
     $logo_img = IMAGE_DIR . 'headerimg.png'; 
     $title_text = 'the title'; 
     $addit_text = 'additional text'; 

     $this->SetHeaderData($logo_img, PDF_HEADER_LOGO_WIDTH, $title_text.' 001', $addit_text, array(0,64,255), array(0,64,128)); 
     $this->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); 
    } 

    public function footer($logo_img = '', $text = '') 
    { 
     $this->setFooterData(array(0,64,0), array(0,64,128)); 
     $this->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); 
    } 

    public function set_default_monospaced_font($font = '') 
    { 
     if (strlen($font) === 0) { $font = 'courier'; } 
     $this->SetDefaultMonospacedFont($font); 
    } 

    public function set_margins($margin_left = '', $margin_top = '', $margin_right = '', $margin_header = '', $margin_footer = '') 
    { 
     $margin_left = PDF_MARGIN_LEFT; $margin_top = PDF_MARGIN_TOP; $margin_right = PDF_MARGIN_RIGHT; 
     $margin_header = PDF_MARGIN_HEADER; $margin_foot = PDF_MARGIN_FOOTER; 

     $this->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); 
     $this->SetHeaderMargin(PDF_MARGIN_HEADER); 
     $this->SetFooterMargin(PDF_MARGIN_FOOTER);    
    } 

    public function set_auto_page_break($set = True, $margin = '') 
    { 
     $set = True; 
     $margin = PDF_MARGIN_BOTTOM; 

     $this->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); 
    } 

    public function set_image_scale($img_scale_ratio = '') 
    { 
     $img_scale_ratio = PDF_IMAGE_SCALE_RATIO; 

     $this->setImageScale(PDF_IMAGE_SCALE_RATIO); 
    } 

    public function set_language_array() 
    { 
    if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { 
     require_once(dirname(__FILE__).'/lang/eng.php'); 
     $this->setLanguageArray($l); 
    } 
    } 

    public function set_font_subsetting($set = True) 
    { 
     $set = True; 

     $this->setFontSubsetting($set); 
    } 

    public function set_font($family = '', $style = '', $size = '', $fontfile = '', $subset = '', $out = True) 
    { 
     $family = 'dejavusans'; $size = '14'; 

     $this->SetFont($family, $style, $size, '', $out); 
    } 

    public function add_page() 
    { 
     $this->AddPage(); 
    } 

    // Can be html or just plain text 
    public function add_text_blob($html = '') 
    { 
     $html = '<h1>This is some stuff</h1><p style="background-color: green;">This is some content adhjdjasjd</p>'; 

     $this->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); 
    } 

    public function output($path, $file_name) 
    { 
     $path = dirname(__FILE__) . '/pdfcache/'; //'/home/user/NetBeansProjects/PDF_Quote/pdfcache/'; 
     $file_name = 'file_' . date('Y_m_d_H_i_s') . '.pdf'; 

     try 
     { 
      $fp = $path . 'example1.pdf'; //. $file_name; //'/home/user/NetBeansProjects/PDF_Quote/pdfcache/example_001.pdf'; 
      $this->Output($fp, 'F'); 
     } 
     catch (exception $ex) 
     { 
      return $ex; 
     }    
     return $path . $file_name; 
    } 
} 

?> 

: 여기

는 클래스입니다 하지만 PHP에 익숙하지 않아서 눈에 띄지 않는 부분을 간과하고 있는지 확실하지 않습니다.

답변

1

PDF를 이진 문자열로 반환하는 방식으로 Output 메서드를 사용하는 것이 좋습니다. 그러면 원하는대로 무엇이든 할 수 있습니다. 이것은 $pdfdoc = $pdf->Output('', 'S')입니다.

이 방법을 사용하면 파일을 원하는 경로에 넣을 수도 있지만 클라이언트에 직접 덤프하거나 전자 메일에 첨부 할 수 있습니다. 더 나은 오류 처리를 수행 할 수 있습니다. TCPDF가 생성하는 것을 제어합니다.

그런데 PHP에서 메소드를 재정의하고 부모 메소드를 호출하려면 parent::METHOD()을 사용해야합니다. 왜냐하면 실제로는 (당신이 소문자 인 경우에도) header, footeroutput 개의 TCPDF 방법을 실제로 무시하기 때문입니다.

+0

내 겉만 번지르르 한 오버로딩이 문제였던 것 같습니다. "$ this->"를 "parent ::"로 바꾸면 TCPDF 메소드를 호출 할 때마다 출력이 모두 시작되었습니다. 감사! – dbr

관련 문제