成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

用PHP編寫(xiě)PDF文檔生成器

瀏覽:2日期:2023-12-26 08:42:06

PHP一個(gè)最大的優(yōu)點(diǎn)就是它對(duì)新技術(shù)的支持非常容易,這種語(yǔ)言的可擴(kuò)展性使得開(kāi)發(fā)人員能夠很方便地添加新的模塊,而且遍布世界的技術(shù)團(tuán)體的支持和眾多擴(kuò)展模塊的支持使得PHP已經(jīng)成為功能最齊全的Web編程語(yǔ)言之; 一。目前可得到的擴(kuò)展模塊已經(jīng)能夠使開(kāi)發(fā)人員執(zhí)行IMAP和POP3操作,可以動(dòng)態(tài)產(chǎn)生圖象和Shockwave Flash動(dòng)畫(huà),進(jìn)行信用卡驗(yàn)證,敏感數(shù)據(jù)的加密解密,還能夠解析XML格式的數(shù)據(jù)。但這還不是全部,現(xiàn)在,又有一個(gè)新的模塊可以與PHP進(jìn)行綁定了,那就是PDFLib擴(kuò)展模塊,它能夠讓開(kāi)發(fā)人員動(dòng)態(tài)產(chǎn)生PDF(Adobe Portable Document Format)格式的文件,下面就先看看如何在PHP里使用這個(gè)模塊。

為了能夠使PHP具有操作PDF格式文檔的能力,你必須先在你的系統(tǒng)里安裝PDFLib擴(kuò)展庫(kù),如果你使用的是Lunix系統(tǒng),你可以從 http://www.pdflib.com/pdflib/index.html下載一個(gè)并進(jìn)行編譯,如果你使用的是Windows系統(tǒng),那就更簡(jiǎn)單了,只需要下載一個(gè)編譯好的PDFLib庫(kù),然后在PHP的配置文件里把相應(yīng)的行的注釋去掉即可。

extension=php_pdf.dll

如果是動(dòng)態(tài)裝載,也可以是參照下面的命令:

dl('php_pdf.dll');

此外,你還必須有一個(gè)Adobe Acrobat PDF閱讀器,用來(lái)瀏覽PDF格式,如果你沒(méi)有,你可以從http://www.adobe.com/免費(fèi)下載。

一旦你做好了前期準(zhǔn)備,就可以創(chuàng)建PDF文件了,下面就是一個(gè)簡(jiǎn)單的例子:

<?php

// 創(chuàng)建一個(gè)新的PDF文檔句柄

$pdf = PDF_new();

// 打開(kāi)一個(gè)文件

PDF_open_file($pdf, 'PDFTest.pdf');

// 開(kāi)始一個(gè)新頁(yè)面(A4)

PDF_begin_page($pdf, 595, 842);

// 得到并使用字體對(duì)象

$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);

// 結(jié)束一頁(yè)

PDF_end_page($pdf);

// 關(guān)閉并保存文件

PDF_close($pdf);

?>

然后保存成PHP文件,在瀏覽器里進(jìn)行瀏覽,PHP就會(huì)執(zhí)行上面的代碼,它產(chǎn)生一個(gè)新的PDF文件,并保存到指定的位置。

現(xiàn)在我們分析一下什么的代碼,要使用PHP創(chuàng)建PDF文件,有四個(gè)步驟:1,創(chuàng)建文檔句柄;2,注冊(cè)文檔的字體和顏色;3,用PDFLib提供的函數(shù)向文件句柄寫(xiě)文字或畫(huà)圖;4,保存文檔。

首先,創(chuàng)建PDF文檔句柄,語(yǔ)法如下:

$pdf = PDF_new();

這個(gè)任務(wù)是由PDF_new()函數(shù)完成的,它返回一個(gè)PDF文檔的句柄,這個(gè)句柄將會(huì)被后續(xù)的所有操作使用。

下一步要做的,就是給PDF文件一個(gè)名字,由PDF_open_file()函數(shù)完成,它需要先前創(chuàng)建的文件句柄和自定義的文件名做參數(shù):

PDF_open_file($pdf, 'PDFTest.pdf');

一旦我們創(chuàng)建了文檔,就可以用PDF_begin_page()函數(shù)在其中插入新頁(yè)面了:

PDF_begin_page($pdf, 595, 842);

然后用PDF_end_page()結(jié)束頁(yè)面。

注意這里,在PDF_begin_page()函數(shù)里,有另外兩個(gè)參數(shù),他們分別代表頁(yè)面尺寸的寬和高,單位是磅(point,1磅等于1/72英寸),或許在這里數(shù)學(xué)并不是你的強(qiáng)項(xiàng),PHP還提供了大多數(shù)標(biāo)準(zhǔn)頁(yè)面尺寸,象A4等,上面的例子就是使用A4的尺寸。

在調(diào)用PDF_begin_page()函數(shù)和PDF_end_page()函數(shù)之間的代碼是向PDF文檔了寫(xiě)內(nèi)容的,內(nèi)容可以是文字、圖象以及幾何圖形等。例子中只是寫(xiě)了一行文字,先得到一個(gè)字體,然后把文字寫(xiě)到文檔里。通過(guò)PDF_findfont()和PDF_setfont()函數(shù)選擇和注冊(cè)字體是很方便的,PDF_findfont()函數(shù)預(yù)備了一種文檔中要使用的字體,需要的參數(shù)有字體的名字,使用的編碼,字體是否要嵌入到PDF文件中。PDF_findfont()函數(shù)返回一個(gè)字體對(duì)象,它將會(huì)在PDF_setfont()函數(shù)里使用。

$arial = PDF_findfont($pdf, 'Arial', 'host', 1);

PDF_setfont($pdf,$arial, 10);

一旦我們?cè)O(shè)定了字體,就可以使用PDF_show_xy()函數(shù)向頁(yè)面中的指定位置寫(xiě)字符串了。

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()函數(shù)用來(lái)向頁(yè)面寫(xiě)內(nèi)容,最后兩個(gè)參數(shù)是要寫(xiě)入的字符串的坐標(biāo)位置,注意坐標(biāo)的原點(diǎn)(0,0)是在文檔的左下角。一旦文字寫(xiě)完了,頁(yè)面就可以關(guān)閉了PDF_end_page(),當(dāng)然你也可以寫(xiě)更多的頁(yè)。所有的頁(yè)面寫(xiě)完之后,用PDF_close()函數(shù)關(guān)閉文檔,此時(shí)文檔就回保存到調(diào)用PDF_open_file()函數(shù)時(shí)指定的文件名和路徑下,文檔句柄隨之銷毀。

PDFLib庫(kù)能做的事情還遠(yuǎn)不止這些,還可以在頁(yè)面里加入圖象,我們以前面的文件為例,在文字的下面添加一個(gè)圖象文件,下面的語(yǔ)句實(shí)現(xiàn)了添加圖象功能:

$image = PDF_open_image_file($pdf, 'jpeg', 'PDFImageTest.jpg');

PDF_place_image($pdf, $image, 50, 650, 0.25);

是不是很簡(jiǎn)單?PDF_open_image_file()函數(shù)打開(kāi)一個(gè)圖形文件,可以接受的圖象類型有:GIF, JPEG, TIFF 和 PNG,該函數(shù)返回圖象句柄,PDF_place_image()函數(shù)利用前面的圖象句柄,把圖象插入到PDF文檔中。注意這里的坐標(biāo)位置是指圖象的左下角,最后一個(gè)參數(shù)是圖象顯示時(shí)的比例因子,1是與實(shí)際大小一樣顯示,0.5是按原來(lái)尺寸的一半顯示。

除了在PDF文檔里畫(huà)出現(xiàn)有的圖象以外,PDF模塊還提供了許多函數(shù)來(lái)讓我們畫(huà)出幾何圖形。比如:直線、圓、長(zhǎng)方形等幾何圖案,下面就是一段畫(huà)直線的實(shí)現(xiàn)方法:

<?php

$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);

// 設(shè)定直線的顏色

PDF_setcolor($pdf, 'stroke', 'rgb', 0, 0, 0);

// 在左上角放置一個(gè)Logo標(biāo)識(shí)

$image = PDF_open_image_file($pdf, 'jpeg', 'logo.jpg');

PDF_place_image($pdf, $image, 50, 785, 0.5);

// 在Logo標(biāo)識(shí)下畫(huà)出直線

PDF_moveto($pdf, 20, 780);

PDF_lineto($pdf, 575, 780);

PDF_stroke($pdf);

// 在頁(yè)面底部畫(huà)出另外一條直線

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);

?>

從上面的例子可以看出,要畫(huà)一條直線,只需要三個(gè)函數(shù)即可:PDF_moveto(), PDF_lineto() 和 PDF_stroke()。上面的例子是先用PDF_moveto($pdf, 20, 780)函數(shù)把光標(biāo)移動(dòng)到坐標(biāo)(20,780),然后用PDF_lineto($pdf, 575, 780)函數(shù)定義直線的另外一個(gè)點(diǎn)的坐標(biāo)(575,780),最后用PDF_stroke($pdf)畫(huà)出線。設(shè)定顏色的函數(shù)PDF_setcolor($pdf, 'stroke', 'rgb', 0, 0, 0)有好幾個(gè)參數(shù),其中的顏色填充模式有stroke、fill、both三種選項(xiàng),顏色可以是RGB或CMYK配色方案的顏色值。值得注意的是:PDF_setcolor()函數(shù)中使用的值是顏色的百分比,也就是說(shuō)是該顏色的亮度,比如:如果想設(shè)為紅色(RGB:255,0,0),你可以這樣寫(xiě):PDF_setcolor($pdf, 'stroke', 'rgb', 1, 0, 0),如果想設(shè)為黃色,可以這樣:PDF_setcolor($pdf, 'stroke', 'rgb', 1, 1, 0)。

要想畫(huà)帶填充色的長(zhǎng)方形和圓形,可以使用下面的方法:

//設(shè)定填充顏色

PDF_setcolor($pdf, 'fill', 'rgb', 1, 1, 0);

// 設(shè)定邊框線的顏色

PDF_setcolor($pdf, 'stroke', 'rgb', 0, 0, 0);

// 畫(huà)矩形,后面的四個(gè)參數(shù)分別是左下角的坐標(biāo)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);

// 畫(huà)出圓,參數(shù)分別是圓心坐標(biāo)和圓的半徑

PDF_circle($pdf, 400, 600, 100)

此外,PDFLib還提供了書(shū)寫(xiě)文檔摘要信息的函數(shù),這些函數(shù)以PDF_set_info_*()開(kāi)頭,這些信息可以包括:文檔的作者、標(biāo)題、內(nèi)容,主題等。下面是幾個(gè)常用的函數(shù):

PDF_set_info_author($pdf, 'net_lover');

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');

當(dāng)用Acrobat Reader打開(kāi)這樣的文檔時(shí),在菜單“文件”-“文檔屬性”-“摘要”里就能看到上面寫(xiě)進(jìn)去的信息。

說(shuō)到這里,相信大家對(duì)如何使用PDFLib創(chuàng)建PDF文檔有了基本的了解了吧。下面,我們就以一個(gè)實(shí)際的例子來(lái)看看如何為我們的工作服務(wù)。這個(gè)例子就是根據(jù)提供的數(shù)據(jù)來(lái)生成餅圖,首先,建立一個(gè)數(shù)據(jù)輸入表單,輸入餅圖中每一塊的大小。文件如下:

<html>

<head>

<title>利用PHP創(chuàng)建PDF文檔(餅圖)</title>

</head>

<body>

<h3>餅圖生成器</h3>

<table cellspacing='5' cellpadding='5'>

<form action='pie.php' method=POST>

<tr>

<td>請(qǐng)輸入餅圖中每一塊的數(shù)據(jù)值,以(,)分割開(kāi):</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>

下面是pie.php文件的代碼:

<?php

// 接受書(shū)庫(kù)

$data = $_POST['data'];

$slices = explode(',', $data);

// 初始化變量

$sum = 0;

$degrees = Array();

$diameter = 200;

$radius = $diameter/2;

// 設(shè)定每一塊餅圖的顏色,用數(shù)組存儲(chǔ)

$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));

// 計(jì)算總的數(shù)值

$sum = array_sum($slices);

// 把每一塊分別轉(zhuǎn)換成相應(yīng)的百分?jǐn)?shù)(360度圓)

for ($y=0; $y<sizeof($slices); $y++) {

$degrees[$y] = ($slices[$y]/$sum) * 360;

}

// 開(kāi)始創(chuàng)建 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<sizeof($slices); $z++)

{

// 設(shè)定填充顏色

PDF_setcolor($pdf, 'fill', 'rgb', $colours[$z][0],

$colours[$z][1], $colours[$z][2]);

// 計(jì)算每個(gè)圓弧的終點(diǎn)坐標(biāo)

$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);

// 計(jì)算并畫(huà)出圓弧

PDF_arc($pdf, 250, 250, $radius, $last_angle,($last_angle+$degrees[$z]));

// 保存最后的角度

$last_angle = $last_angle+$degrees[$z];

// 填充顏色

PDF_fill_stroke($pdf);

}

// 重畫(huà)外圓輪廓

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);

?>

運(yùn)行上面的程序,并輸入不同數(shù)值,你將會(huì)得到不同的餅圖。

PDFLib是一個(gè)兼容性很好的模塊,你不但可以用PHP編寫(xiě),還可以用Java,C#,VB.NET,VB5/6(ActiveX/COM),ASP(VBScript/Jscript),Borland Delphi, Windows Script Host,ColdFusion4.5+,C/C++,Python,Perl,RPG;支持的平臺(tái)不僅僅有Windows,還有Unix/Linux,Mac OS,IBM eServer iSeries 400 和 zSeries S/390等,具體的運(yùn)行環(huán)境請(qǐng)隨時(shí)訪問(wèn)他們的網(wǎng)站得到最新的資料。

標(biāo)簽: PHP
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日韩一区二区视频在线观看| 午夜精品亚洲| 欧美1区2区| 精品国内二区三区| 久久www免费人成看片高清| 亚洲一区三区视频在线观看| 亚洲男同性视频| 亚洲欧洲日本一区二区三区| 亚洲欧洲日韩一区二区三区| 亚洲调教视频在线观看| 国产精品毛片久久久久久久| 国产精品国产亚洲精品看不卡15| 国产精品拍天天在线| 亚洲视频综合| 1区2区3区精品视频| 伊人久久亚洲热| 亚洲桃色在线一区| 国产欧美日韩视频一区二区三区| 亚洲免费视频中文字幕| 精品动漫3d一区二区三区免费版| 亚洲三级免费观看| 国产精品免费区二区三区观看| 亚洲图片自拍偷拍| 欧美亚男人的天堂| 激情五月婷婷综合| 日韩午夜激情电影| 91在线小视频| 中文字幕乱码久久午夜不卡 | 亚洲精品老司机| 亚洲区一区二区三区| 夜夜夜精品看看| 久久久久久久高潮| 九一九一国产精品| 日韩欧美中文一区| 欧美精品二区三区四区免费看视频| 国产精品理伦片| 国产视频一区免费看| 日韩精品久久理论片| 欧美日韩mp4| 99精品视频在线播放观看| 国产精品高潮久久久久无| 中文欧美日韩| 丝袜美腿亚洲色图| 91麻豆精品91久久久久久清纯| 99久久亚洲一区二区三区青草| 国产精品女主播av| 免费视频一区二区三区在线观看| 蜜臀久久99精品久久久久久9 | 国产日韩精品视频一区| 伊人成年综合电影网| 丝袜诱惑制服诱惑色一区在线观看 | 99久久精品国产一区| 国产香蕉久久精品综合网| 99av国产精品欲麻豆| 美国毛片一区二区| 精品国产三级电影在线观看| 亚洲国产裸拍裸体视频在线观看乱了中文 | 国产在线欧美| 亚洲成年人影院| 欧美一区在线视频| 黄色精品网站| 蜜臀av性久久久久av蜜臀妖精| 日韩免费福利电影在线观看| 亚洲经典三级| 免费不卡在线观看| 精品久久久久一区二区国产| 亚洲欧洲另类| 国产精品自拍一区| 亚洲视频一二三区| 欧美三级电影精品| 国内久久精品| 国模娜娜一区二区三区| 国产精品视频看| 日本福利一区二区| 欧美一区二视频在线免费观看| 亚洲夂夂婷婷色拍ww47| 91精品久久久久久久久99蜜臂| 欧美一区久久| 日韩高清一区在线| 日韩欧美一级二级| 亚洲精品一级| 国产在线乱码一区二区三区| 国产精品久久久久久久岛一牛影视 | 最新日韩在线视频| 欧美视频中文字幕| 欧美日韩妖精视频| 毛片av一区二区| 日本一区二区三区高清不卡| 久久综合中文| 欧美一区免费| 麻豆国产一区二区| 亚洲青青青在线视频| 7777精品久久久大香线蕉| 亚洲精品韩国| 成人免费不卡视频| 日韩精品三区四区| 中文字幕乱码亚洲精品一区| 欧美日韩在线三级| 伊人激情综合| 国产成人av一区二区三区在线| 亚洲美女少妇撒尿| 精品国产不卡一区二区三区| 亚洲欧美春色| 欧美精品一区二区视频| 国产一区在线观看麻豆| 亚洲午夜久久久久久久久久久| 久久久久久久综合狠狠综合| 在线一区二区三区做爰视频网站| 欧美激情第二页| 国产精品91一区二区| 午夜精品久久久久久久| 日本一区二区不卡视频| 欧美放荡的少妇| 亚洲一区日韩在线| 欧美日韩亚洲国产精品| 国产精品一区二区久久不卡| 午夜伊人狠狠久久| 国产精品天美传媒沈樵| 欧美一级视频精品观看| 色婷婷精品大在线视频| 日韩亚洲国产欧美| 欧美国产三级| 成人在线视频一区二区| 日韩电影网1区2区| 一区二区在线免费| 中文字幕第一区| 精品国产乱码91久久久久久网站| 欧美日韩一区精品| 久久久国产精品一区二区中文| 影音先锋久久资源网| 成人福利视频网站| 麻豆精品在线观看| 亚洲成在线观看| 亚洲视频你懂的| 国产亚洲污的网站| 日韩丝袜情趣美女图片| 欧美日韩精品一区二区天天拍小说| 免费欧美日韩| 亚洲少妇在线| 亚洲欧洲一区二区天堂久久| 欧美一区久久| 91影院在线观看| 不卡一区二区在线| 国产成人精品亚洲日本在线桃色| 韩国欧美国产一区| 久久99精品一区二区三区 | 蜜桃一区二区三区在线观看| 亚洲国产日韩一级| 亚洲美女区一区| 一区视频在线播放| 国产精品久久久久久久浪潮网站| 国产女人aaa级久久久级| 26uuu色噜噜精品一区二区| 91精品国产aⅴ一区二区| 欧美色涩在线第一页| 色激情天天射综合网| 久久一区精品| 麻豆九一精品爱看视频在线观看免费| 国产日产精品一区二区三区四区的观看方式| 韩日在线一区| 精品1区2区3区4区| 亚洲视频精品| 亚洲大胆在线| 在线一区视频| 国产精品一区二区三区四区五区 | 婷婷六月综合亚洲| 日韩中文字幕亚洲一区二区va在线 | 69av一区二区三区| 欧美精品三级在线观看| 欧美精品色一区二区三区| 制服丝袜成人动漫| 欧美一级理论性理论a| 日韩视频免费直播| 久久综合成人精品亚洲另类欧美| 久久久久国产精品麻豆ai换脸| 久久精品亚洲麻豆av一区二区 | 欧美日韩国产天堂| 欧美日韩一区二区三区视频| 欧美日韩一二区| 欧美挠脚心视频网站| 欧美一级久久久| 久久久亚洲精华液精华液精华液| 国产亚洲自拍一区| 国产精品久久久久aaaa| 亚洲美女精品一区| 婷婷综合另类小说色区| 久久爱另类一区二区小说| 国产黄色成人av| 99re免费视频精品全部| 欧美在线1区| 91久久精品www人人做人人爽| 亚洲日本黄色| 久久精品日韩欧美| 欧美日韩一级片网站| 欧美成人免费网站| 国产视频一区二区在线| 亚洲女与黑人做爰| 青青草成人在线观看| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲一区中文在线|