PHP一個最大的優(yōu)點就是它對新技術(shù)的支持非常容易,這種語言的可擴展性使得開發(fā)人員能夠很方便地添加新的模塊,而且遍布世界的技術(shù)團體的支持和眾多擴展模塊的支持使得PHP已經(jīng)成為功能最齊全的Web編程語言之 一。目前可得到的擴展模塊已經(jīng)能夠使開發(fā)人員執(zhí)行IMAP和POP3操作,可以動態(tài)產(chǎn)生圖象和Shockwave Flash動畫,進行信用卡驗證,敏感數(shù)據(jù)的加密解密,還能夠解析XML格式的數(shù)據(jù)。但這還不是全部,現(xiàn)在,又有一個新的模塊可以與PHP進行綁定了,那就是PDFLib擴展模塊,它能夠讓開發(fā)人員動態(tài)產(chǎn)生PDF(Adobe Portable Document Format)格式的文件,下面就先看看如何在PHP里使用這個模塊。 為了能夠使PHP具有操作PDF格式文檔的能力,你必須先在你的系統(tǒng)里安裝PDFLib擴展庫,如果你使用的是Lunix系統(tǒng),你可以從 http://www./pdflib/index.html下載一個并進行編譯,如果你使用的是Windows系統(tǒng),那就更簡單了,只需要下載一個編譯好的PDFLib庫,然后在PHP的配置文件里把相應(yīng)的行的注釋去掉即可。
一旦你做好了前期準備,就可以創(chuàng)建PDF文件了,下面就是一個簡單的例子:
// 創(chuàng)建一個新的PDF文檔句柄 $pdf = PDF_new();
PDF_open_file($pdf, "PDFTest.pdf");
PDF_begin_page($pdf, 595, 842);
$arial = PDF_findfont($pdf, "Arial", "host", 1); PDF_setfont($pdf, $arial, 10);
PDF_show_xy($pdf, "This is an exam of PDF Documents, It is a good Lib,",50, 750); PDF_show_xy($pdf, "If you like,please try yourself!", 50, 730);
PDF_end_page($pdf);
PDF_close($pdf); ?>
然后保存成PHP文件,在瀏覽器里進行瀏覽,PHP就會執(zhí)行上面的代碼,它產(chǎn)生一個新的PDF文件,并保存到指定的位置。 現(xiàn)在我們分析一下什么的代碼,要使用PHP創(chuàng)建PDF文件,有四個步驟:1,創(chuàng)建文檔句柄;2,注冊文檔的字體和顏色;3,用PDFLib提供的函數(shù)向文件句柄寫文字或畫圖;4,保存文檔。 首先,創(chuàng)建PDF文檔句柄,語法如下:
下一步要做的,就是給PDF文件一個名字,由PDF_open_file()函數(shù)完成,它需要先前創(chuàng)建的文件句柄和自定義的文件名做參數(shù):
注意這里,在PDF_begin_page()函數(shù)里,有另外兩個參數(shù),他們分別代表頁面尺寸的寬和高,單位是磅(point,1磅等于1/72英寸),或許在這里數(shù)學并不是你的強項,PHP還提供了大多數(shù)標準頁面尺寸,象A4等,上面的例子就是使用A4的尺寸。 在調(diào)用PDF_begin_page()函數(shù)和PDF_end_page()函數(shù)之間的代碼是向PDF文檔了寫內(nèi)容的,內(nèi)容可以是文字、圖象以及幾何圖形等。例子中只是寫了一行文字,先得到一個字體,然后把文字寫到文檔里。通過PDF_findfont()和PDF_setfont()函數(shù)選擇和注冊字體是很方便的,PDF_findfont()函數(shù)預(yù)備了一種文檔中要使用的字體,需要的參數(shù)有字體的名字,使用的編碼,字體是否要嵌入到PDF文件中。PDF_findfont()函數(shù)返回一個字體對象,它將會在PDF_setfont()函數(shù)里使用。
PDF_setfont($pdf,$arial, 10);
PDF_show_xy($pdf, "If you like,please try yourself!", 50, 730);
PDFLib庫能做的事情還遠不止這些,還可以在頁面里加入圖象,我們以前面的文件為例,在文字的下面添加一個圖象文件,下面的語句實現(xiàn)了添加圖象功能:
PDF_place_image($pdf, $image, 50, 650, 0.25);
除了在PDF文檔里畫出現(xiàn)有的圖象以外,PDF模塊還提供了許多函數(shù)來讓我們畫出幾何圖形。比如:直線、圓、長方形等幾何圖案,下面就是一段畫直線的實現(xiàn)方法:
$pdf = PDF_new(); PDF_open_file($pdf, "LineExam.pdf"); PDF_begin_page($pdf, 595, 842); $arial = PDF_findfont($pdf, "Arial", "host", 1); PDF_setfont($pdf, $arial, 12);
PDF_setcolor($pdf, "stroke", "rgb", 0, 0, 0);
$image = PDF_open_image_file($pdf, "jpeg", "logo.jpg"); PDF_place_image($pdf, $image, 50, 785, 0.5);
PDF_moveto($pdf, 20, 780); PDF_lineto($pdf, 575, 780); PDF_stroke($pdf);
PDF_moveto($pdf, 20,50); PDF_lineto($pdf, 575, 50); PDF_stroke($pdf);
PDF_show_xy($pdf, "Meng‘s Corporation", 200, 35); PDF_end_page($pdf); PDF_close($pdf); ?>
從上面的例子可以看出,要畫一條直線,只需要三個函數(shù)即可:PDF_moveto(), PDF_lineto() 和 PDF_stroke()。上面的例子是先用PDF_moveto($pdf, 20, 780)函數(shù)把光標移動到坐標(20,780),然后用PDF_lineto($pdf, 575, 780)函數(shù)定義直線的另外一個點的坐標(575,780),最后用PDF_stroke($pdf)畫出線。設(shè)定顏色的函數(shù)PDF_setcolor($pdf, "stroke", "rgb", 0, 0, 0)有好幾個參數(shù),其中的顏色填充模式有stroke、fill、both三種選項,顏色可以是RGB或CMYK配色方案的顏色值。值得注意的是:PDF_setcolor()函數(shù)中使用的值是顏色的百分比,也就是說是該顏色的亮度,比如:如果想設(shè)為紅色(RGB:255,0,0),你可以這樣寫:PDF_setcolor($pdf, "stroke", "rgb", 1, 0, 0),如果想設(shè)為黃色,可以這樣:PDF_setcolor($pdf, "stroke", "rgb", 1, 1, 0)。
PDF_setcolor($pdf, "fill", "rgb", 1, 1, 0);
PDF_setcolor($pdf, "stroke", "rgb", 0, 0, 0);
PDF_rect($pdf, 50, 500, 200, 300); PDF_fill_stroke($pdf); PDF_setcolor($pdf, "fill", "rgb", 0, 1, 0); PDF_setcolor($pdf, "stroke", "rgb", 0, 0, 1);
PDF_set_info_creator($pdf, "Meng Xianhui"); PDF_set_info_title($pdf, "PHP Exam"); PDF_set_info_subject($pdf, "PHP"); PDF_set_info_keywords($pdf, "PHP PDF PDFLib");
說到這里,相信大家對如何使用PDFLib創(chuàng)建PDF文檔有了基本的了解了吧。下面,我們就以一個實際的例子來看看如何為我們的工作服務(wù)。這個例子就是根據(jù)提供的數(shù)據(jù)來生成餅圖,首先,建立一個數(shù)據(jù)輸入表單,輸入餅圖中每一塊的大小。文件如下:
<head> <title>利用PHP創(chuàng)建PDF文檔(餅圖)</title> </head> <body> <h3>餅圖生成器</h3> <table cellspacing="5" cellpadding="5"> <form action="pie.php" method=POST> <tr> <td>請輸入餅圖中每一塊的數(shù)據(jù)值,以(,)分割開:</td></tr> <tr><td><input type=text name=data></td></tr> <tr><td><input type=submit value="產(chǎn)生PDF餅圖"></td></tr> </form> </table> </body> </html>
// 接受書庫 $data = $_POST[‘data‘]; $slices = explode(",", $data);
$sum = 0; $degrees = Array(); $diameter = 200; $radius = $diameter/2;
$colours = array(array(0,0,0),array(0,0,1),array(0,1,0), array(1,0,0),array(0,1,1),array(1,1,0), array(1,0,1));
$sum = array_sum($slices);
for ($y=0; $y<sizeof($slices); $y++) { $degrees[$y] = ($slices[$y]/$sum) * 360; }
$pdf = PDF_new(); PDF_open_file($pdf, "chart.pdf"); PDF_begin_page($pdf, 500, 500); PDF_setcolor($pdf, "stroke", "rgb", 1, 1, 0); PDF_moveto($pdf, 250, 250); PDF_lineto($pdf, 350, 250); PDF_stroke($pdf);
{ // 設(shè)定填充顏色 PDF_setcolor($pdf, "fill", "rgb", $colours[$z][0], $colours[$z][1], $colours[$z][2]);
$end_x = round(250 + ($radius * cos($last_angle*pi()/180))); $end_y = round(250 + ($radius * sin($last_angle*pi()/180)));
PDF_moveto($pdf, 250, 250); PDF_lineto($pdf, $end_x, $end_y);
PDF_arc($pdf, 250, 250, $radius, $last_angle,($last_angle+$degrees[$z]));
$last_angle = $last_angle+$degrees[$z];
PDF_fill_stroke($pdf); }
PDF_circle($pdf, 250, 250, 100); PDF_stroke($pdf);
PDF_close($pdf);
$buf = PDF_get_buffer($p); $len = strlen($buf); header("Content-type: application/pdf"); header("Content-Length: $len"); header("Content-Disposition: inline; filename=Pie_php.pdf"); print $buf; PDF_delete($p); ?>
運行上面的程序,并輸入不同數(shù)值,你將會得到不同的餅圖。 PDFLib是一個兼容性很好的模塊,你不但可以用PHP編寫,還可以用Java,C#,VB.NET,VB5/6(ActiveX/COM),ASP(VBScript/Jscript),Borland Delphi, Windows Script Host,ColdFusion4.5+,C/C++,Python,Perl,RPG;支持的平臺不僅僅有Windows,還有Unix/Linux,Mac OS,IBM eServer iSeries 400 和 zSeries S/390等,具體的運行環(huán)境請隨時訪問他們的網(wǎng)站得到最新的資料。 |
|