2011-08-18 7 views
2

나는 데이터베이스를 쿼리 한 다음 이에 따라 HTML을 쓰고 업데이트하는 PHP 파일이 있습니다.PHP 파일에서 HTML을 PDF 파일로 변환

은 내가 HTML2FPDF를 사용하여 PDF로이 페이지를 변환하려고 .. "PDF로 내보내기"이 페이지에 버튼이 있습니다, 그러나 나는 다음과 같은 오류 얻을 : 나는 문제가 의심

FPDF error: Unable to create output file: Entry Report 

을 html 파일 대신 php 파일을 전달하기 때문에 :

<?php 
require('html2fpdf.php'); 

if(isset($_POST['link'])){ 
    $url = $_POST['link']; 
    $nm = $_POST['nm']; 
    convert($url, $nm); 
} 

function convert($link, $name){ 
    $pdf=new HTML2FPDF(); 
    $pdf->AddPage(); 
    $fp = fopen($link,"r"); 
    $strContent = fread($fp, filesize($link)); 
    fclose($fp); 
    $pdf->WriteHTML($strContent); 
    $pdf->Output($name); 
    echo ("PDF file generated successfully!"); 
} 
?> 

내가이 문제를 어떻게 해결할 수 있는지 아는 사람 있습니까? ...

또는 PDF 파일로 PHP 파일을 변환하는 직접적인 방법이 ...

편집을 아마 중 하나를 변환 PHP에 의해 다음 HTML로 PDF로 HTML : OK 그래서 문제가 I didn를이었다 공용 쓰기 권한을 허용하지 않습니다. 이것을 변경하면, 나는 pdf 파일을 만들 수 있었다. 문제는 이것이다. ... pdf 파일이 비어있다. ...

나는 이것이 내가 지나가고 있다는 사실과 관련이 있다는 것을 알고있다. 통과 될 때 아마도 비어있는 PHP 페이지 ... html 내에서 html 내용을 캡처하여 pdf 출력이 비어 있지 않도록하려면 어떻게합니까? 여기

는 PHP 페이지입니다 :

<?php 

function connect() { 
    $dbh = mysql_connect ("localhost", "user", "password") or die ('I cannot connect to the database because: ' . mysql_error()); 
    mysql_select_db("PDS", $dbh); 
    return $dbh; 
} 

session_start(); 

if(isset($_SESSION['username'])){ 
    if(isset($_POST['entryId'])){ 
    //do something 
    $dbh = connect(); 
    $ide = $_POST['entryId']; 
    $usertab = $_POST['usertable']; 
    $answertable = $usertab . "Answers"; 
    $entrytable = $usertab . "Entries"; 
    $query = mysql_query("SELECT e.date, q.questionNumber, q.question, q.sectionId, a.answer FROM $answertable a, Questions q, $entrytable e WHERE a.entryId = '$ide' AND a.questionId = q.questionId AND e.entryId = '$ide' ORDER BY q.questionNumber ASC;") or die("Error: " . mysql_error()); 

    if($query){ 
     //set variables 

     $sectionOne = array(); 
     $sectionTwo = array(); 
     $sectionThree = array(); 
     $sectionFour = array(); 
     $sectionFive = array(); 
     while($row=mysql_fetch_assoc($query)){ 
    $date = $row['date']; 
    $section = $row['sectionId']; 
    switch($section){ 
    case '1': 
     $sectionOne[] = $row; 
     break; 
    case '2': 
     $sectionTwo[] = $row; 
     break; 
    case '3': 
     $sectionThree[] = $row; 
     break; 
     case '4': 
     $sectionFour[] = $row; 
     break; 
     case '5': 
     $sectionFive[] = $row; 
     break; 
     default:  
     break;  
    } 
     } 
    }else{ 
     //error - sql failed 
    } 
    } 

?> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <script src = "jQuery.js"></script> 
    <script> 
    $(document).ready(function(){ 
     $("#export").click(function(e){ 
     //post to html2pdfconverter.php 
     $("#link").val("Testers/viewentryreport.php"); 
     $("#nm").val("Entry Report.pdf"); 
     $("form#sendanswers").submit(); 
     }); 
    }); 
    </script> 
    <title>Personal Diary System - Entry Report - <?php echo($date); ?></title> 
    </head> 
    <body> 
    <h1>Entry Report - <?php echo($date); ?></h1>  
    <div id = "buttons"> 
    <form id = "sendanswers" name = "sendanswers" action="Testers/html2pdfconverter.php" method="post"> 
    <input type = "hidden" name = "link" id = "link" value = ""> 
    <input type = "hidden" name = "nm" id = "nm" value = ""> 
    <input type = "button" name = "export" id = "export" value = "Export As PDF"/> 
    </form>       
    </div>       
    <h3>Biological Information</h3> 
    <?php 
     $i = 0;       
     foreach($sectionOne as &$value){ 
    if($i == 1 || $i == 3){ 
     $image = "assets/urine".$i.".png"; 
     echo("<br/>"); 
     echo($value['question']." <br/> "."<img src = \"$image\"/>"); 
     echo("<br/>"); 
    }else{ 
     echo($value['question'].' : '.$value['answer']); 
    } 
    echo("<br/>"); 
    $i++; 
     } 
    ?> 
    <h3>Fatigue and Recovery</h3> 
    <?php 
     foreach($sectionTwo as &$value){ 
    echo($value['question'].' : '.$value['answer']); 
    echo("<br/>"); 
     } 
    ?> 
    <h3>Illness and Injury</h3> 
    <?php 
     foreach($sectionThree as &$value){ 
    echo($value['question'].' : '.$value['answer']); 
    echo("<br/>"); 
     } 
    ?> 
    <h3>Training Sessions</h3> 
    <?php 
     foreach($sectionFour as &$value){ 
    echo($value['question'].' : '.$value['answer']); 
    echo("<br/>"); 
     } 
    ?> 
    <h3>General Feedback</h3> 
    <?php 
    if(count($sectionFive)>0){ 
     foreach($sectionFive as &$value){ 
    echo($value['question'].' : '.$value['answer']);  
     } 
    }else{ 
     $sectionFive = "User didn't leave any feedback"; 
     echo("User didn't leave any feedback"); 
    } 
    echo("<br/>"); 
    ?> 
    </body> 
</html> 
<?php 
} 
?> 

및 html2pdfconverter.php

<?php 
require('html2fpdf.php'); 

if(isset($_POST['link'])){ 
    $url = $_POST['link']; 
    $nm = $_POST['nm']; 
    convert($url, $nm); 
} 

function convert($link, $name){ 
    $pdf=new HTML2FPDF(); 
    $pdf->AddPage(); 
    $fp = fopen($link,"r"); 
    $strContent = fread($fp, filesize($link)); 
    fclose($fp); 
    $pdf->WriteHTML($strContent); 
    $pdf->Output($name); 
    echo ("PDF file generated successfully!"); 
} 
?> 

편집 @TIMFERRIS

내가 @TimeFerris '답변에 따라이 내 변환 기능을 변경

:

function convert($link, $name){ 

    $pdf=new HTML2FPDF(); 
    $pdf->AddPage(); 
    $content = file_get_contents($link); //shorter than what you did 
    ob_start(); 
    echo $content; 
    $pdf->WriteHTML(ob_get_contents()); 
    ob_end_clean(); 
    $pdf->Output($name); 
    echo ("PDF file generated successfully!"); 
} 

PDF 파일이 생성되었지만 여전히 비어 있습니다.

+0

"PHP 파일 전달"이란 무엇입니까? 함수에 전달하기 전에 $ url의 값은 무엇입니까? – Cfreak

+0

스크립트에 해당 디렉토리에 대한 쓰기 권한이 있습니까? PHP와 FPDF는 당신의 파일명이 무엇인지 신경 쓸 수 없습니다. 파일 이름이 실제로 url이 아니고 스크립트에 쓰기 권한이 없으면 지정한 파일에 출력을 씁니다. –

+0

$ url의 값은 www.url.co.uk/create와 같습니다.php – user559142

답변

1

최근에 TCPDF을 사용하여이 작업을 수행했습니다. TCPDF는 FPDF의 추가 개발 버전입니다.

PDF로 변환하는 것과 관련된 예시는 this link을 참조하십시오. 또한 here에서 더 많은 예제를 찾을 수 있습니다. 예제 61은 또한 매우 유용 할 수 있습니다. TCPDF 사용

샘플 코드 : 당신이 PHP 파일을 실행하면됩니다하지만, PHP 스크립트가 밖으로 쓰는 내용을 캡처 출력 버퍼링을 사용할 수

$html = '<h1>HTML Example</h1> 
<div style="text-align:center">IMAGES<br /> 
<img src="../images/logo_example.png" alt="test alt attribute" width="100" height="100" border="0" /><img src="../images/tiger.ai" alt="test alt attribute" width="100" height="100" border="0" /><img src="../images/logo_example.jpg" alt="test alt attribute" width="100" height="100" border="0" /> 
</div>'; 

// output the HTML content 
$pdf->writeHTML($html, true, false, true, false, ''); 
1

한 가지. 그런 다음 해당 내용을 .html 파일에 저장하고 해당 파일을 변환기로 전달하십시오.

+1

출력 버퍼링은 한 가지 방법입니다. 내용을 파일에 저장할 필요조차 없습니다. 변환기에 직접 전달할 수 있으며 적절한 헤더를 반향하여 PDF로 제공 할 수 있습니다. – markus

+0

좋아, 근본적으로, 나는 PHP 페이지의 HTML 내용을 캡처하고 그 파일을 변환 파일로 보내려면 PHP var를 만들 ... ...? – user559142

+0

팀 페니스 (Tim Fennis)의 다른 대답을보십시오. 필자는이 예제가 파일을 먼저 파일로 저장하는 대신 버퍼 내용을 PDF 파서에 직접 전달한다고 제안했던 것과 정확히 일치해야합니다. –

1

당신이 제공하는 php 파일은 올바른 html 코드가되기 전에 파서를 통해 실행되어야합니다.

$content = file_get_contents($filename); //shorter than what you did 
ob_start(); 
echo $content; 
$pdf->WriteHTML(ob_get_contents()); 
ob_end_clean(); 
+0

죄송합니다.이를 코드에 어떻게 구현합니까? $ filename은 무엇입니까? – user559142

+0

이것을 변환 기능에 추가했지만 출력은 여전히 ​​공백입니다 ... 수정 된 게시물보기 – user559142

관련 문제