日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

用PHP編寫PDF文檔生成器

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

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

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

extension=php_pdf.dll

如果是動態裝載,也可以是參照下面的命令:

dl('php_pdf.dll');

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

一旦你做好了前期準備,就可以創建PDF文件了,下面就是一個簡單的例子:

<?php

// 創建一個新的PDF文檔句柄

$pdf = PDF_new();

// 打開一個文件

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模塊還提供了許多函數來讓我們畫出幾何圖形。比如:直線、圓、長方形等幾何圖案,下面就是一段畫直線的實現方法:

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

// 設定直線的顏色

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

當用Acrobat Reader打開這樣的文檔時,在菜單“文件”-“文檔屬性”-“摘要”里就能看到上面寫進去的信息。

說到這里,相信大家對如何使用PDFLib創建PDF文檔有了基本的了解了吧。下面,我們就以一個實際的例子來看看如何為我們的工作服務。這個例子就是根據提供的數據來生成餅圖,首先,建立一個數據輸入表單,輸入餅圖中每一塊的大小。文件如下:

<html>

<head>

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

</head>

<body>

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

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

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

<tr>

<td>請輸入餅圖中每一塊的數據值,以(,)分割開:</td></tr>

<tr><td><input type=text name=data></td></tr>

<tr><td><input type=submit value='產生PDF餅圖'></td></tr>

</form>

</table>

</body>

</html>

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

<?php

// 接受書庫

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

// 把每一塊分別轉換成相應的百分數(360度圓)

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

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

}

// 開始創建 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++)

{

// 設定填充顏色

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編寫,還可以用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等,具體的運行環境請隨時訪問他們的網站得到最新的資料。

標簽: PHP
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
美腿丝袜亚洲一区| а√在线中文在线新版| 国产精品videosex极品| 一区二区精品| 国产农村妇女精品一二区| 亚洲天堂1区| 日韩三区免费| 久久国产精品成人免费观看的软件| 日韩国产欧美一区二区三区| 男人的天堂亚洲一区| 美女被久久久| 青草综合视频| 国产经典一区| 韩日一区二区| 98精品视频| 久久裸体视频| 亚洲综合精品| 日本午夜精品久久久久| 国产麻豆一区| 国产精品99视频| 国产99精品一区| 亚洲精品精选| 国产精品视频3p| 国产精品日韩精品在线播放| 国产精品白丝久久av网站| 精品久久久中文字幕| 99久久精品网站| 免费日韩一区二区| 国产精品毛片视频| 成人片免费看| 伊人影院久久| 老司机精品视频网| 精品一区三区| 69堂免费精品视频在线播放| 国产精品yjizz视频网| 国产亚洲在线观看| 精品三级av在线导航| 欧美日韩色图| av不卡免费看| 久久久国产精品网站| 国模 一区 二区 三区| 日韩av成人高清| 久久在线免费| 久久久国产精品网站| 九九在线精品| 麻豆久久一区二区| 99国产精品99久久久久久粉嫩| 国产精品流白浆在线观看| 亚洲精品97| 色综合狠狠操| 国产精品欧美日韩一区| 国产精品外国| 久久精品123| 国产一区二区精品久| 石原莉奈在线亚洲三区| 日韩另类视频| 国产一区三区在线播放| 青青在线精品| 中文字幕成人| 欧美专区18| 午夜在线一区| 久久精品欧美一区| 国产午夜精品一区二区三区欧美| 蜜臀av性久久久久蜜臀aⅴ四虎| 欧洲av不卡| 国产成人免费| 麻豆久久一区二区| 国产精品探花在线观看| 四虎精品一区二区免费| 91精品xxx在线观看| 久久久久久一区二区| 精品三级久久| 日韩精品电影| av在线日韩| 久久中文亚洲字幕| 自由日本语亚洲人高潮| 在线看片不卡| 色综合视频一区二区三区日韩 | 欧美国产日本| 国产精品多人| 福利欧美精品在线| 国产精品yjizz视频网| 日韩国产在线| 欧美日韩一二三四| 男人的天堂亚洲一区| 日韩av资源网| 高清av一区| 亚洲免费高清| 久久国产免费看| 国产一区二区三区四区大秀| 欧美国产另类| 欧美日韩激情| 亚洲乱码久久| 91视频精品| 亚洲精品日本| av资源中文在线天堂| 久久视频国产| 青青草国产成人99久久| 亚洲欧美日韩专区| 国产精品99久久免费| 国产日韩精品视频一区二区三区| 国产精品乱战久久久| 欧美一区二区三区激情视频| 国产模特精品视频久久久久| 国产精品一区毛片| 亚洲精品**中文毛片| 999在线观看精品免费不卡网站| 久久婷婷激情| 日本视频在线一区| 国产主播一区| 欧美韩一区二区| 亚洲天堂av资源在线观看| 国产理论在线| 国产精品一线| 亚洲精品在线国产| 激情自拍一区| 激情综合五月| 嫩草伊人久久精品少妇av杨幂 | 青青草伊人久久| 好看的av在线不卡观看| 精品精品99| 国产欧美另类| 亚洲精品日本| 亚洲少妇诱惑| 欧美成人午夜| 激情综合自拍| 久久激情婷婷| 免费观看不卡av| 日韩精品欧美激情一区二区| 色婷婷亚洲mv天堂mv在影片| 里番精品3d一二三区| 国产精品一国产精品k频道56| 黄色日韩在线| 日韩不卡在线| 久久精品免费一区二区三区| 精品国模一区二区三区| 亚洲先锋成人| 国产亚洲激情| 婷婷亚洲成人| 国产亚洲久久| 美女视频一区在线观看| 麻豆国产精品| 欧美日韩在线网站| 伊人久久成人| 日韩专区视频网站| 国产精品蜜月aⅴ在线| 国产精品伦理久久久久久| 日韩综合在线| 播放一区二区| 香蕉成人久久| 国产欧美一区二区三区国产幕精品 | 亚洲精品免费观看| 国产欧美日韩精品一区二区免费| 欧美日一区二区在线观看| 欧美成人一二区| 精品一区欧美| 欧美激情在线精品一区二区三区| se01亚洲视频 | 99国产精品99久久久久久粉嫩| 99久精品视频在线观看视频| 影视先锋久久| 欧美成人亚洲| 久久久国产精品一区二区中文| 电影天堂国产精品| 亚洲一级在线| 欧美日韩调教| 精品欧美日韩精品| 久久不射网站| 久久国内精品视频| 久草精品视频| 亚洲婷婷在线| 免费在线亚洲| 欧美精品一区二区久久| 婷婷精品在线观看| 国产999精品在线观看| 亚洲日本久久| 久久精品国产99| 在线综合欧美| 精品视频国内| 国产精品亚洲综合久久| 99热国内精品| 国产福利资源一区| 亚洲综合丁香| 99香蕉国产精品偷在线观看| 久久gogo国模啪啪裸体| 亚洲国产一区二区在线观看| 国产精品嫩模av在线| 亚州欧美在线| 国产综合精品| 成午夜精品一区二区三区软件| 免费毛片在线不卡| 成人福利视频| 国产精品s色| 日欧美一区二区| 国产探花一区在线观看| 亚洲一区黄色| 免费不卡中文字幕在线| 久久中文字幕导航| 成人在线黄色| 鲁大师精品99久久久|