2011-08-18 314 views
1

我有一個標記爲報告的html文檔。我在這個頁面上有一個按鈕「Export as pdf」。但是我不知道如何導出HTML成pdf..Are有任何工具在那裏,有人建議這樣的任務..將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(){ 

    }); 
    </script> 
    <title>Personal Diary System - Entry Report - <?php echo($date); ?></title> 
    </head> 
    <body> 
    <h1>Entry Report - <?php echo($date); ?></h1>  
    <div id = "buttons"> 
    <a href = "http://dev.speechlink.co.uk">Export as PDF</a>      
    </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{ 
     echo("User didn't leave any feedback"); 
    } 
    echo("<br/>"); 
    ?> 
    </body> 
</html> 
<?php 
} 
?> 

這顯示以下內容:

enter image description here

所以,如果我使用FPDF,什麼是出口跟隨着的最佳方式g作爲pdf?我應該寫一個函數FPDF在同一個php文件或者是它最好寫它創建並顯示PDF文檔(這意味着我必須張貼所有相關數據到該文件)一個單獨的PHP文件...

+0

在什麼平臺上?用GUI或腳本?使用什麼技術? –

+0

我知道的一種方法是,在您的系統上安裝一個PDF打印機,以PDF形式打印您的HTML頁面。 –

+0

請參閱我們的方便[HTML to PDF轉換器列表](http://stackoverflow.com/questions/3178448/list-of-html-to-pdf-converters) –

回答

5

使用FPDF庫for php check here

該文件轉換的第一個和主要基礎是FPDF庫。 FPDF是一個純PHP類,用於即時生成PDF文件。讓我們用簡單的Hello World顯示開始PDF生成。

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

$pdf=new FPDF(); 
$pdf->AddPage(); 
$pdf->SetFont('Arial','B',16); 
$pdf->Cell(40,10,'Hello World!'); 
$pdf->Output(); 
?> 

要生成pdf文件,首先我們需要包含庫文件fpdf.php。然後我們需要使用默認的構造函數FPDF()創建一個FPDF對象。此構造函數可以傳遞三個值,即頁面方向(縱向或橫向),度量單位和頁面大小(A4,A5等)。默認情況下,頁面爲A4人像,測量單位爲毫米。

$pdf=new FPDF('P','mm','A4'); 

它可以使用橫向(L),其他頁面的格式(如Letter和Legal),測量單元(PT,釐米,英寸):它可能已經明確指定。

然後我們用AddPage()添加了一個頁面到我們的pdf文檔。起點位於左上角,當前位置默認放置在離邊界1釐米處;可以使用函數SetMargins()更改邊距。

要打印文本,我們需要先用SetFont()選擇一種字體。讓我們選擇Arial加粗的16:

$pdf->SetFont('Arial','B',16); 

我們使用Cell()函數輸出文本。單元格是一個矩形區域,可能是框架的,其中包含一些文本。它在當前位置輸出。我們指定它的尺寸,文本(居中或對齊),是否應繪製邊框,以及當前位置在其之後移動的位置(向右,下方或下一行的開始處)。要添加一個框架,我們可以這樣做:

$pdf->Cell(40,10,'Hello World !',1); 

最後,文檔被關閉並通過Output()發送到瀏覽器。我們可以通過傳遞所需的文件名將它保存在一個文件中。

1

我發現這個軟件非常有用:http://code.google.com/p/wkhtmltopdf/

這是事實,你必須給exec()從你的代碼,但它的作品非常好,使用的WebKit作爲後端引擎(允許的javascript還有很多其他的功能來定製pdf的創建),節省了很多的代碼。

希望它有幫助,我們在這裏使用它,它像一個魅力。

編輯:嘗試靜態二進制文件。解壓並準備好:)

0

另一個更簡單的方法是使用HTML2FPDF。 HTML2FPDF是一個PHP類庫,它使用FPDF類庫將HTML文件轉換爲PDF文件。該庫由三個類組成,即PDF,HTML2FPDF和FPDF(修改後的FPDF類)。類PDF擴展了擴展類FPDF的類HTML2FPDF。

現在讓我們看看如何使用HTML2FPDF庫將示例html頁面轉換爲PDF文件。 html頁面包含一個表格,其中列出了幾個具有相應國旗的國家。以下是轉換代碼。

<? 
require('html2fpdf.php'); 
$pdf=new HTML2FPDF(); 
$pdf->AddPage(); 
$fp = fopen("sample.html","r"); 
$strContent = fread($fp, filesize("sample.html")); 
fclose($fp); 
$pdf->WriteHTML($strContent); 
$pdf->Output("sample.pdf"); 
echo "PDF file is generated successfully!"; 
?> 

首先,我們需要包括包含HTML2FPDF類html2fpdf.php文件,並使用構造HTML2FPDF創建一個對象()。然後使用函數AddPage()將新頁面添加到PDF文檔中。 html內容使用文件函數從sample.html文件中讀取。然後使用WriteHTML()函數將html內容寫入pdf格式。要查看html文件,請單擊此處並查看生成的pdf,請單擊此處。以上示例代碼與示例html文件和圖像以及html2fpdf類庫可以在此處下載。

HTML2FPDF類庫將與XHTML 1.0一起工作得最好。此類也不支持HTML提供的所有功能。要了解支持的HTML標籤和其他功能,請參閱。

我推薦你使用它,因爲它更容易和友好。

+0

嗨,謝謝..但我沒有看到pdf .php文件? – user559142

+0

檢查我的其他anwser :)這裏是鏈接http://fpdf.org/ –

1

您也可以使用在線工具Pdfcrowd API

它易於集成,並提供其免費版了。你可以查詢 PDFCrowd Official Site

require 'pdfcrowd.php'; 

// create an API client instance 
$client = new Pdfcrowd("username", "apikey"); 

// convert a web page and store the generated PDF into a variable 
$pdf = $client->convertURI('http://www.google.com/'); 

//You can also convert raw HTML code, just use the convertHtml() method instead of convertURI() 
$pdf = $client->convertHtml("<body>My HTML Layout</body>"); 

//Or use convertFile() to convert a local HTML file 
$pdf = $client->convertFile("/path/to/MyLayout.html"); 


// set HTTP response headers 
header("Content-Type: application/pdf"); 
header("Cache-Control: no-cache"); 
header("Accept-Ranges: none"); 
header("Content-Disposition: attachment; filename=\"google_com.pdf\""); 

// send the generated PDF 
echo $pdf;