2014-04-16 2 views
1

페이지에서 동적으로 생성 된 데이터에서 PDF를 작성해야하는 스크립트 작업을하고 있습니다. 몇 가지 조사를 한 후 domPDF를 사용하기로 결정했습니다. 현재 CodeIgniter를 프레임 워크로 사용하므로이 코드는 tutorial입니다. 이 튜토리얼에서 컨트롤러에 대한 다음 코드 세트를 얻었습니다.domPDF로 동적 PHP 변수 출력 처리

컨트롤러 : dompdf_test.php -로드 된보기를 기반으로 실제 PDF를 생성하는 데 사용됩니다.

class Dompdf_test extends CI_Controller { 

    public function index() { 
     // Load all views as normal 
     $this->load->view('summary/index'); 
     // Get output html 
     $html = $this->output->get_output(); 

     // Load library 
     $this->load->library('dompdf_gen'); 

     // Convert to PDF 
     $this->dompdf->load_html($html); 
     $this->dompdf->render(); 
     $this->dompdf->stream("SavedData.pdf"); 
    } 
} 

컨트롤러 : - dompdf_view.php이 PDF로

class Dompdf_view extends CI_Controller { 
    public function index() 
    { 
     $this->load->view('summary/index'); 
    } 
} 

라이브러리 변환됩니다 액세스 할 단지 페이지입니다 : dompdf_gen.php를 - 응용 프로그램에 위치한/라이브러리

class Dompdf_gen { 

    public function __construct() { 

     require_once APPPATH.'third_party/dompdf/dompdf_config.inc.php'; //this is where the whole dompdf plugin is located 

     $pdf = new DOMPDF(); 
     $CI =& get_instance(); 
     $CI->dompdf = $pdf; 
    } 
} 

여기까지입니다. PDF로 변환하려는 페이지는 사용자가 조작하는 데이터를 생성합니다. 생성 된 데이터는 데이터베이스가 아닌 사용자가 선택한 것을 기반으로합니다. 예를 들어 사용자가 성별로 여성을 선택했습니다. "여성"단어가 요약 탭에 추가됩니다 (동일한 페이지에 있음). 요약 탭의 모든 데이터는 pdf 파일에 포함됩니다. 그 페이지는 pdf 저장을 위해 많은 관련이없는 데이터를 포함하고 있기 때문에 domPDF는 일부 CSS 구문을 지원하지 않기 때문에 (그 데이터가 다른 PHP 파일로 전달되었다고 생각했습니다. 그 파일에서 전달 된 데이터는 간단한 PDF 템플릿 테이블의 기초가 될 것입니다.

이제 문제가 있습니다. 데이터를 전달할 때이 매우 간단한 code을 사용했습니다.

보기 : summary/sourceData.php - 데이터를 입력해야하는 샘플 페이지. 입력 된 모든 데이터는 요약/색인보기로 전달됩니다.

<form method="post" action="http://siteURL/dompdf_view"> //dompdf_view is simply the summary/index page 
<input type="text" name="name0" placeholder="Add text"/><br/> 
<input type="text" name="name1" placeholder="Add text"/><br/> 
<input type="text" name="name2" placeholder="Add text"/><br/> 
<input type="text" name="name3" placeholder="Add text"/><br/> 
<input type="text" name="name4" placeholder="Add text"/><br/> 
<input type="submit" name="submit" value="Pass Variable"/> 

</form> 

요약/index.php - 데이터가 전달되는 곳입니다. 요약에서

<?php 

$name0 = isset($_POST['name0']) ? $_POST['name0'] : ""; 
$name1 = isset($_POST['name1']) ? $_POST['name1'] : ""; 
$name2 = isset($_POST['name2']) ? $_POST['name2'] : ""; 
$name3 = isset($_POST['name3']) ? $_POST['name3'] : ""; 
$name4 = isset($_POST['name4']) ? $_POST['name4'] : ""; 

    echo $name0.'<br/><br/>'; 
    echo $name1.'<br/><br/>'; 
    echo $name2.'<br/><br/>'; 
    echo $name3.'<br/><br/>'; 
    echo $name4.'<br/><br/>'; 

    ?> 

    <a href="<http://siteURL/dompdf_test>">Save as PDF</a> 

데이터/sourceData.php는 요약/index.php에 전달됩니다하지만 PDF로의 index.php/요약을 저장하려고하면, 그것은 저장하지만 데이터를 얻을하지 않습니다. PDF로 저장이라는 단어를 제외하고는 그냥 공백 PDF 문서입니다.

나는 연구했지만 추가는했지만 여전히 운이 없었습니다.

domPDF가 PHP 에코 파일을 읽을 수 없습니까? 그렇지 않다면, 어떻게?

나는 데이터를 pdf로 저장할 수있는 방법을 아직 모릅니다. 또는 데이터를 전달할 다른 방법이 있습니까?

참고 : 페이지가 정적 인 경우 위 코드가 작동합니다. 그러나 동적 데이터를 추가 할 때 PDF 파일 내의 해당 페이지에서 PHP 결과를 읽지 않습니다.

모든 도움/조언을 부탁드립니다.

+0

넘겨 줄 수 있도록 코드를 게시하십시오. 행 번호 8에 잘못 배열을 사용하는 것처럼 보입니다. – Skewled

+0

안녕하세요. 죄송합니다. 사과드립니다. 나는 그 질문을 편집했다. – novice

+0

Save as PDF이 코드는 어디에 있습니까? action.php가 데이터를 처리하고 있거나 action.php에서 새 페이지로 데이터를 전달하고 있습니까? 내가 코드를 볼 실제 코드를 만들 domPDF와 함께 ... – Skewled

답변

1

안에 $ HTML을 생성하는 PHP 코드를 실행할 수 있습니다. 제출 된 데이터가 컨트롤러에 전달되지 않아 컨트롤러가 비어 있습니다. 우리는 입력 게시물을 통해 데이터를 제출하고 컨트롤러에 다음을 추가했습니다.

$html = $this->load->view('summary/index', $data, true); 

감사합니다. :)

0

"PDF로 저장"링크를 클릭하여 PDF를 생성 할 때 POST 매개 변수없이보기 요약/색인보기에서 새 요청을 트리거합니다. 그러면 컨트롤러가 서버 쪽이라고하는 PDF를 생성하고 pdf 생성을위한 요약 인덱스보기를 렌더링하지만 이제는 게시 매개 변수가 필요하지 않습니다. 그것이 귀하의 pdf가 비어있는 이유입니다. 당신이

<a href="<http://siteURL/dompdf_test>">Save as PDF</a> 

대체 할 수있다 :이 당신에게 어떻게 DOMPDF 작품에 대한 힌트를 제공한다

if($_POST['submit']!='Save as PDF'){ 
    ?> 
     <form method="post" action="http://siteURL/dompdf_test"> 
     <input type="hidden" name="name0" value="<?php echo htmlspecialchars($name0,ENT_COMPAT,'UTF-8')?>"/><br/> 
     <input type="hidden" name="name1" value="<?php echo htmlspecialchars($name1,ENT_COMPAT,'UTF-8')?>" /><br/> 
     <input type="hidden" name="name2" value="<?php echo htmlspecialchars($name2,ENT_COMPAT,'UTF-8')?>"/><br/> 
     <input type="hidden" name="name3" value="<?php echo htmlspecialchars($name3,ENT_COMPAT,'UTF-8')?>"/><br/> 
     <input type="hidden" name="name4" value="<?php echo htmlspecialchars($name4,ENT_COMPAT,'UTF-8')?>"/><br/> 
     <input type="submit" name="submit" value="Save as PDF"/> 
     </form> 
    <?php 
    } 
+0

안녕하세요, @AthanasiusKirchner입니다. 당신의 도움을 주셔서 감사합니다. 귀하의 코드를 시도했지만 여전히 PDF는 비어 있습니다. 정적 문자열을 추가하더라도 PDF에 추가되지 않습니다. 어떤면에서 필자는 요약/인덱스 뷰가 비어있는 POST 매개 변수를 가져 오지 않는다고 말한 것에 동의합니다. 그렇다면 POST 매개 변수와 함께 해당 뷰를 렌더링하는 방법에 대한 아이디어가 있습니까? – novice

+0

저는이 라이브러리 (domPDF)에 익숙하지 않지만 "https://code.google.com/p/dompdf/"는 "형편없는 HTML에는 특별히 관대하지 않습니다"와 같은 의미입니다. 즉'$ html로 =이 '

이 테스트

에게 그게 전부'를보십시오;'대신 문제 그게 전부 여부를 확인하는 데 사용되는 렌더링 된 뷰를 사용하는 컨트롤러이다. – AthanasiusKirchner

+0

예. 그 $ html은 그 페이지가 정적이라면 반드시 작동 할 것입니다. 하지만 일단 POST 매개 변수가있는 것처럼 동적이되면 이제는 내 딜레마입니다. 비록 내가 현재 해결책을 찾고있다. 고마워, @AthanasiusKirchner :) – novice

0

.

 //File when you gererate $html 
     $dir = dirname(__FILE__); 
     require_once($dir.'/file_to_generate_html_from_php.php'); 
     // Load the dompdf files 
     require_once($dir.'/include/dompdf/dompdf_config.inc.php'); 

     $dompdf = new DOMPDF(); // Create new instance of dompdf 
     $dompdf->load_html($html); // Load the html 
     $dompdf->render(); // Parse the html, convert to PDF 
     $pdf_content = $dompdf->output(); // Put contents of pdf into variable for later 

file_to_generate_html_from_php.php - 다음과 비슷한 모습이 될 것입니다.

$html = ' 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <html lang="sv"> 
</head> 
<body>'; 
$html .='<h2>Report</h2>'; 
$html .=' 
</body> 
</html>'; 

또한 우리는 내 문제에 대한 해결책으로 내놓았다 file_to_generate_html_from_php.php

$SQLQUERY= mysql_query("SELECT * FROM table WHERE Column = '$variable'") or die(mysql_error()); 

while($row = mysql_fetch_array($SQLQUERY)) { 
               // echo out the contents of each row into a table 
               if(empty($row['Column'])){ 
               $html .= '<p>No results!</p>'; 
               } 
               else{ 
               $html .= '<pre>Yes we found this: '.$row['Column'].'</pre>'; 
               } 
             } 
+0

안녕하세요 @hedqvist, 나는 내 현재 코드에서 당신과 거의 비슷한 pdf를 생성 할 수 있습니다. 내 문제는 있지만 PDF에 있어야하는 데이터는 선택된 데이터와 입력 데이터를 기반으로 동적이며 SQL 데이터를 기반으로하지 않습니다. 그렇다면 dompdf에서 인라인 PHP를 사용하는 방법을 알고 있습니까? 내가 조사했지만 어떤 신뢰할 수있는 문서를 찾을 수 없습니다. – novice

+0

if (isset ($ variable)) {echo $ html. = "$ 변수가 설정된 경우 더 많은 html로 html 변수를 입력 할 수 있습니다."} – hedqvist