用PHP編寫PDF文件生成器 (轉)
用編寫PDF文件生成器
.NET_lover[孟子E章]
PHP一個最大的優點就是它對新技術的支援非常容易,這種語言的可擴充套件性使得開發人員能夠很方便地新增新的模組,而且遍佈世界的技術團體的支援和眾多擴充套件模組的支援使得PHP已經成為功能最齊全的語言之一。目前可得到的擴充套件模組已經能夠使開發人員IMAP和POP3操作,可以動態產生圖象和Shockwave Flash動畫,進行信用卡驗證,敏感資料的,還能夠解析格式的資料。但這還不是全部,現在,又有一個新的模組可以與PHP進行繫結了,那就是PDFLib擴充套件模組,它能夠讓開發人員動態產生PDF(Adobe Portable Document Format)格式的,下面就先看看如何在PHP裡使用這個模組。
為了能夠使PHP具有操作PDF格式文件的能力,你必須先在你的裡PDFLib擴充套件庫,如果你使用的是L系統,你可以從 一個並進行編譯,如果你使用的是系統,那就更簡單了,只需要下載一個編譯好的PDFLib庫,然後在PHP的檔案裡把相應的行的註釋去掉即可。
extension=php_pdf.dll
如果是動態裝載,也可以是參照下面的命令:
dl("php_pdf.dll");
此外,你還必須有一個Adobe Acrobat PDF閱讀器,用來瀏覽PDF格式,如果你沒有,你可以從免費下載。
一旦你做好了前期準備,就可以建立PDF檔案了,下面就是一個簡單的例子:
// 建立一個新的PDF文件控制程式碼
$pdf = PDF_new();?php>
// 開啟一個檔案
PDF_open_file($pdf, "PDFTest.pdf");
// 開始一個新頁面(A4)
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就會執行上面的程式碼,它產生一個新的PDF檔案,並儲存到指定的位置。
現在我們分析一下什麼的程式碼,要使用PHP建立PDF檔案,有四個步驟:1,建立文件控制程式碼;2,註冊文件的字型和顏色;3,用PDFLib提供的向檔案控制程式碼寫文字或畫圖;4,儲存文件。
首先,建立PDF文件控制程式碼,語法如下:
$pdf = PDF_new();
這個任務是由PDF_new()函式完成的,它返回一個PDF文件的控制程式碼,這個控制程式碼將會被後續的所有操作使用。
下一步要做的,就是給PDF檔案一個名字,由PDF_open_file()函式完成,它需要先前建立的檔案控制程式碼和自定義的檔名做引數:
PDF_open_file($pdf, "PDFTest.pdf");
一旦我們建立了文件,就可以用PDF_begin_page()函式在其中插入新頁面了:
PDF_begin_page($pdf, 595, 842);
然後用PDF_end_page()結束頁面。
注意這裡,在PDF_begin_page()函式里,有另外兩個引數,他們分別代表頁面尺寸的寬和高,單位是磅(point,1磅等於1/72英寸),或許在這裡數學並不是你的強項,PHP還提供了大多數標準頁面尺寸,象A4等,上面的例子就是使用A4的尺寸。
在PDF_begin_page()函式和PDF_end_page()函式之間的程式碼是向PDF文件了寫內容的,內容可以是文字、圖象以及幾何圖形等。例子中只是寫了一行文字,先得到一個字型,然後把文字寫到文件裡。透過PDF_findfont()和PDF_setfont()函式選擇和註冊字型是很方便的,PDF_findfont()函式預備了一種文件中要使用的字型,需要的引數有字型的名字,使用的編碼,字型是否要嵌入到PDF檔案中。PDF_findfont()函式返回一個字型物件,它將會在PDF_setfont()函式里使用。
$arial = PDF_findfont($pdf, "Arial", "host", 1);
PDF_setfont($pdf,$arial, 10);
一旦我們設定了字型,就可以使用PDF_show_xy()函式向頁面中的指定位置寫字串了。
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_show_xy()函式用來向頁面寫內容,最後兩個引數是要寫入的字串的座標位置,注意座標的原點(0,0)是在文件的左下角。一旦文字寫完了,頁面就可以關閉了PDF_end_page(),當然你也可以寫更多的頁。所有的頁面寫完之後,用PDF_close()函式關閉文件,此時文件就回儲存到呼叫PDF_open_file()函式時指定的檔名和路徑下,文件控制程式碼隨之銷燬。
PDFLib庫能做的事情還遠不止這些,還可以在頁面里加入圖象,我們以前面的檔案為例,在文字的下面新增一個圖象檔案,下面的語句實現了新增圖象功能:
$image = PDF_open_image_file($pdf, "jpeg", "PDFImageTest.jpg");
PDF_place_image($pdf, $image, 50, 650, 0.25);
是不是很簡單?PDF_open_image_file()函式開啟一個圖形檔案,可以接受的圖象型別有:GIF, JPEG, TIFF 和 PNG,該函式返回圖象控制程式碼,PDF_place_image()函式利用前面的圖象控制程式碼,把圖象插入到PDF文件中。注意這裡的座標位置是指圖象的左下角,最後一個引數是圖象顯示時的比例因子,1是與實際大小一樣顯示,0.5是按原來尺寸的一半顯示。
除了在PDF文件裡畫出現有的圖象以外,PDF模組還提供了許多函式來讓我們畫出幾何圖形。比如:直線、圓、長方形等幾何圖案,下面就是一段畫直線的實現方法:
$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);?php>
// 設定直線的顏色
PDF_setcolor($pdf, "stroke", "rgb", 0, 0, 0);
// 在左上角放置一個Logo標識
$image = PDF_open_image_file($pdf, "jpeg", "logo.jpg");
PDF_place_image($pdf, $image, 50, 785, 0.5);
// 在Logo標識下畫出直線
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);
?>
從上面的例子可以看出,要畫一條直線,只需要三個函式即可:PDF_moveto(), PDF_lineto() 和 PDF_stroke()。上面的例子是先用PDF_moveto($pdf, 20, 780)函式把游標移動到座標(20,780),然後用PDF_lineto($pdf, 575, 780)函式定義直線的另外一個點的座標(575,780),最後用PDF_stroke($pdf)畫出線。設定顏色的函式PDF_setcolor($pdf, "stroke", "rgb", 0, 0, 0)有好幾個引數,其中的顏色填充有stroke、fill、both三種選項,顏色可以是RGB或CMYK配色方案的顏色值。值得注意的是:PDF_setcolor()函式中使用的值是顏色的百分比,也就是說是該顏色的亮度,比如:如果想設為紅色(RGB:255,0,0),你可以這樣寫:PDF_setcolor($pdf, "stroke", "rgb", 1, 0, 0),如果想設為黃色,可以這樣:PDF_setcolor($pdf, "stroke", "rgb", 1, 1, 0)。
要想畫帶填充色的長方形和圓形,可以使用下面的方法:
//設定填充顏色
PDF_setcolor($pdf, "fill", "rgb", 1, 1, 0);
// 設定邊框線的顏色
PDF_setcolor($pdf, "stroke", "rgb", 0, 0, 0);
// 畫矩形,後面的四個引數分別是左下角的座標X、Y和寬度、高度
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_circle($pdf, 400, 600, 100)
此外,PDFLib還提供了書寫文件摘要資訊的函式,這些函式以PDF_set_info_*()開頭,這些資訊可以包括:文件的作者、標題、內容,主題等。下面是幾個常用的函式:
PDF_set_info_author($pdf,_lover");
PDF_set_info_creator($pdf, "Meng Xianhui");
PDF_set_info_title($pdf, "PHP Exam");
PDF_set_info_subject($pdf, "PHP");
PDF_set_info_keys($pdf, "PHP PDF PDFLib");
當用Acrobat Reader開啟這樣的文件時,在選單“檔案”-“文件屬性”-“摘要”裡就能看到上面寫進去的資訊。
說到這裡,相信大家對如何使用PDFLib建立PDF文件有了基本的瞭解了吧。下面,我們就以一個實際的例子來看看如何為我們的工作服務。這個例子就是根據提供的資料來生成餅圖,首先,建立一個資料輸入表單,輸入餅圖中每一塊的大小。檔案如下:
餅圖生成器
請輸入餅圖中每一塊的資料值,以(,)分割開: |
下面是pie.php檔案的程式碼:
// 接受書庫
$data = $_POST['data'];
$slices = explode(",", $data);?php>
// 初始化變數
$sum = 0;
$degrees = Array();
$diameter = 200;
$ = $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);
// 把每一塊分別轉換成相應的百分數(360度圓)
for ($y=0; $y
}
// 開始建立 PDF 文件
$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);
for ($z=0; $z
// 設定填充顏色
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_end_page($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);
?>
執行上面的,並輸入不同數值,你將會得到不同的餅圖。
PDFLib是一個相容性很好的模組,你不但可以用PHP編寫,還可以用,,,VB5/6(/COM),(/),Borland , Windows Script Host,ColdFusion4.5+,C/C++,,,RPG;支援的平臺不僅僅有Windows,還有Unix/,Mac OS,IBM eServer iSeries 400 和 zSeries S/390等,具體的執行環境請隨時訪問他們的網站得到最新的資料。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991693/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何編寫 Python 文件生成器Python
- 使用 VS Code + Markdown 編寫 PDF 文件
- 用開源 apidoc rap編寫php介面文件APIPHP
- 用PHP編寫email群發器 (轉)PHPAI
- 基於PDF資料編寫PRD長文件測試案例
- Master PDF Editor for Mac PDF文件編輯軟體ASTMac
- go用unioffice轉換word文件為pdfGo
- 用PHP編寫登陸介面PHP
- 基於PHP與XML的PDF文件生成技術(摘要) (轉)PHPXML
- 用PHP編寫Android應用程式PHPAndroid
- pdf轉換成word文件
- 用VB編寫簡單的程式來清空文件選單 (轉)
- C# 將PDF文件轉換為Markdown文件C#
- 轉換不同文件到pdf
- PDF文件轉換器PDF to Word Document Converter MacMac
- 用Delphi編寫DelTree程式 (轉)
- 用Java編寫ASP元件 (轉)Java元件
- 用Excel編寫小遊戲 (轉)Excel遊戲
- php編寫大型網站問題集 (轉)PHP網站
- react,vue編寫介面文件ReactVue
- LaTeX 編寫中文文件
- 線上免費工具——pdf轉word文件
- 利用powershell轉wps文件到pdf
- pdf編輯器如何開啟PDF檔案拆分文件頁面
- Python 將Word/ Exce/ PDF/ PPT文件轉為OFD文件Python
- 用VC++編寫CGI程式 (轉)C++
- 用VB編寫抽獎程式 (轉)
- 編寫高效的MySQL應用(轉)MySql
- 編寫自己的php擴充套件函式 (轉)PHP套件函式
- php實現pdf轉圖片PHP
- 用Java寫一個PDF,Word檔案轉換工具Java
- 編寫自定義Yeoman生成器簡述
- PDF Expert 2.5.16 中文版-實用的 PDF 文件工具
- PDF Expert for Mac(PDF編輯閱讀轉換器)3.4.1中文啟用版Mac
- 給寶寶用Python寫個支援翻譯PDF文件的小軟體Python
- Windows 系統,PHP實現PPT轉PDF,PDF轉圖片的操作WindowsPHP
- 編寫自己的php擴充套件函式(一) (轉)PHP套件函式
- 用Delphi編寫安裝程式(1) (轉)