小編給大家分享一下如何使用LiveDocx和Zend Framework生成基于模板的文檔,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
神木網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站設(shè)計等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司2013年開創(chuàng)至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。
使用PHP生成打印良好的格式良好的PDF文檔并非易事。傳統(tǒng)上,使用PHP生成PDF有兩種主要方法。如果有足夠的時間和耐心,兩者都可以完成工作,但仍然有很多不足之處:
HTML-to-PDF:這種方法廣泛用于主流應(yīng)用程序。這里使用眾多開源庫之一以編程方式創(chuàng)建HTML文檔并將其轉(zhuǎn)換為PDF。但是,由于HTML不是面向頁面的格式(如PDF),因此無法在HTML和PDF之間執(zhí)行1對1映射。典型的文字處理文件格式功能,例如頁眉和頁腳,孤兒和寡婦甚至頁碼都不能用HTML表示。
程序化:此方法可以完全控制生成的PDF。但是,它要求從程序代碼中設(shè)置每行文本的x和y坐標(biāo),每個幾何形狀和圖形。這不僅是一個非常耗時的解決方案,而且非常脆弱:每當(dāng)圖形設(shè)計師更改文檔的布局時,程序員必須重新編寫他或她的程序代碼。
在本文中,作者提出了一種全新的第三種方法。它依賴于在WYSIWYG環(huán)境中創(chuàng)建的模板,例如Microsoft?Word或Open Office,然后使用PHP填充數(shù)據(jù)。生成的文檔不僅可以保存為PDF,還可以保存為DOCX,DOC和RTF。
在我們深入研究這種新方法的內(nèi)部工作方式之前,讓我們先來看一個實際的例子。以下PHP 5代碼說明了PDF生成,其中模板template.docx [46.7 KB]中的合并字段軟件,被許可方和公司用PHP中的標(biāo)量數(shù)據(jù)填充。生成的文檔document.pdf [104.7 KB]已創(chuàng)建并寫入磁盤。
$ phpLiveDocx = new Zend_Service_LiveDocx_MailMerge ( array ('username' => 'yourUsername' ,'password' => 'yourPassword' )); $ phpLiveDocx - > setLocalTemplate ('template.docx' ); $ phpLiveDocx - > assign ('software' ,'Magic Graphical Compression Suite v1.9' ); $ phpLiveDocx - > assign ('licensee' ,'Henry Smith' ); $ phpLiveDocx - > '公司' ,'Megasoft合作' ); $ phpLiveDocx - > createDocument (); $ document = $ phpLiveDocx - > retrieveDocument ('pdf' ); file_put_contents ('document.pdf' ,$ document ); unset ($ phpLiveDocx );
本文中演示的代碼將隨Zend Framework 1.10一起提供。雖然在撰寫本文時,沒有正式發(fā)布日期,但預(yù)計將于2009年第四季度發(fā)布1.10。同時,您可以檢查標(biāo)準(zhǔn)孵化器 SVN存儲庫中的組件。
LiveDocx是一種基于SOAP的文檔生成服務(wù),基于市場領(lǐng)先的文字處理組件TX Text Control .NET。LiveDocx允許在任何支持SOAP的編程語言中填充文字處理模板。生成的文檔可以保存為任何支持的格式。但是,本文主要介紹如何在PHP 5中使用LiveDocx。
LiveDocx的Zend Framework實現(xiàn)的組件位于標(biāo)準(zhǔn)Zend Framework分發(fā)文件中的/ Zend / Service / LiveDocx /??梢詫iveDocx直接與PHP 5 SoapClient一起使用,不使用Zend Framework,也可以使用第三方庫NuSOAP。NuSOAP方法甚至允許在PHP 4中使用LiveDocx。然而,本文主要關(guān)注PHP 5中的官方Zend Framework組件。
LiveDocx的關(guān)鍵點是將生成格式良好,可打印的文字處理文檔所需的工作量減少到最低限度。對于最終用戶,創(chuàng)建任何支持的文件格式所涉及的邏輯是相同的。例如,無論您是想要PDF還是RTF文件,代碼(一個參數(shù)除外)都是相同的。
LiveDocx的核心開發(fā)人員還希望確保模板的生成盡可能簡單,在最終用戶已經(jīng)非常熟悉的環(huán)境中。因此,您可以在Word或Open Office中創(chuàng)建模板。
在整篇文章中,我們引用術(shù)語模板和文檔。了解兩者之間的區(qū)別非常重要。
模板:術(shù)語模板用于指代輸入文件,包含格式和文本字段。模板可以采用以下任何一種文件格式:
DOCX - Office Open XML格式
DOC - Microsoft?WordDOC格式
RTF - 富文本格式
TXD - TXTextControl?格式
模板可以本地存儲在客戶端計算機(發(fā)起SOAP請求的計算機上)上,也可以遠程存儲在后端服務(wù)器上。決定使用哪一個取決于您正在開發(fā)的應(yīng)用程序類型。
如果在本地存儲模板,則必須將模板與應(yīng)在每個請求上填充的數(shù)據(jù)一起傳輸。如果模板在每個請求中保持不變,則此方法效率非常低。最好將模板上傳到后端服務(wù)器一次,然后在所有后續(xù)請求中引用它。這樣,只有應(yīng)填充的數(shù)據(jù)才會從客戶端傳輸?shù)胶蠖朔?wù)器。使用LiveDocx的大多數(shù)應(yīng)用程序?qū)儆诖祟悇e。
另一方面,如果您有一個不斷變化的模板,或者您允許最終用戶上傳模板的應(yīng)用程序,您可以考慮在本地存儲模板并在每個請求時傳輸它們。這種方法顯然較慢,因為每個請求都包含模板本身,以及填充它的數(shù)據(jù)。
文檔:術(shù)語文檔用于指生成的輸出文件,其中包含模板文件,填充數(shù)據(jù) - 即完成的文檔。文檔可以使用以下任何一種文件格式保存:
DOCX - Office Open XML格式
DOC - Microsoft?WordDOC格式
HTML - XHTML 1.0過渡格式
RTF - 富文本格式
PDF - Acrobat?便攜式文檔格式
TXD - TX文本控制格式
TXT - ANSI純文本
除了上述文字處理文件格式外,文檔還可以保存為以下圖像文件格式:
BMP - 位圖圖像格式
GIF - 圖形交換格式
JPG - 聯(lián)合圖像專家組格式
PNG - 便攜式網(wǎng)絡(luò)圖形格式
TIFF - 標(biāo)記圖像文件格式
WMF - Windows元文件格式
在本節(jié)中,我們將從頭開始查看使用LiveDocx創(chuàng)建文檔的整個過程。
任何LiveDocx項目的第一步都是創(chuàng)建模板。為此,您可以使用Open Office或Microsoft?Word。出于本文的目的,我們將使用Microsoft?Word2007.有關(guān)使用Open Office的說明,請查看LiveDocx博客。
在Microsoft?Word2007中插入合并字段首先在Microsoft?Word2007中創(chuàng)建一個新文件,然后將模板文件另存為template.docx。
然后,您可以開始撰寫模板,使用“ 字段”對話框插入文本,圖形和合并字段,如右圖所示。
一段時間后,您將擁有一個模板,其中包含圖像,文本和許多合并字段。合并字段由{MERGEFIELD name}表示,并將在下一步中填充標(biāo)量數(shù)據(jù)。Microsoft?Word2007中模板的以下屏幕截圖說明了模板的外觀:
完成后保存模板template.docx [/ img] [46 KB]。
現(xiàn)在我們有了模板文件,下一步就是用數(shù)據(jù)填充它。在下面的示例中,我們將向模板分配標(biāo)量數(shù)據(jù)類型(在本例中為字符串)。
$ phpLiveDocx = new Zend_Service_LiveDocx_MailMerge ( array ('username' => 'yourUsername' ,'password' => 'yourPassword' )); $ phpLiveDocx - > setLocalTemplate ('template.docx' ); $ phpLiveDocx - > assign ('software' ,'Magic Graphical Compression Suite v1.9' ); $ phpLiveDocx - > assign ('licensee' ,'Henry Smith' ); $ phpLiveDocx - > '公司' ,'Megasoft合作' ); $ phpLiveDocx - > assign ('date' ,'2009年10月10日' ); $ phpLiveDocx - > assign ('time' ,' 14:12:01 ' ); $ phpLiveDocx - > assign ('city' ,'Frankfurt' ); $ phpLiveDocx - > assign ('country' ,'Germany' ); $ phpLiveDocx - > createDocument (); retrieveDocument ('pdf' ); file_put_contents ('document.pdf' ,$ document ); unset ($ phpLiveDocx );
對于許多應(yīng)用程序,特別是那些使用PDF文件進行存檔的應(yīng)用程序,您可能希望設(shè)置PDF文件的元數(shù)據(jù)。您可以通過使用應(yīng)嵌入PDF文件的元數(shù)據(jù)指定關(guān)聯(lián)數(shù)組來執(zhí)行此操作。在()setDocumentProperties方法前必須調(diào)用createDocument() :
$ documentProperties = array ('title' => 'Magic Graphical Compression Suite v1.9' ,'author' => 'Megasoft Co-operation' ,'subject' => 'Magic Graphical Compression Suite v1.9' ,'keywords' > '圖形,魔法,壓縮,套件,許可' ); $ phpLiveDocx - > setDocumentProperties ($ documentProperties );
生成的文檔document.pdf [104 KB]將寫入磁盤,現(xiàn)在可以在您喜歡的PDF閱讀器中打開,例如Ubuntu中隨附的文檔查看器:
除了在前一個示例中分配給模板的標(biāo)量數(shù)據(jù)類型之外,還可以分配復(fù)合數(shù)據(jù)類型,例如關(guān)聯(lián)數(shù)組。考慮模板template.doc [20.5 KB]和生成的文檔document.pdf [77.6 KB]。特別是,請看一下模板的以下部分(點擊放大):
Microsoft?Word和Microsoft?Word中的書簽之間的模板部分在最終文檔中重復(fù),以生成表的行。以下關(guān)聯(lián)數(shù)組的一個子數(shù)組用于每一行。
使用以下PHP 5代碼,我們將使用電話連接數(shù)據(jù)的關(guān)聯(lián)數(shù)組填充模板。為清楚起見,此示例僅顯示分配關(guān)聯(lián)數(shù)組的部分。LiveDocx的實例化以及文檔創(chuàng)建和可檢索的過程與前面的示例相同,并且已被省略:
//實例化LiveDocx $ billConnections = array ( array ('connection_number' => '+ 11(0)222 333 441' ,'connection_duration' => '00:01:01' ,'fee' => '1.15' ), array ('connection_number' => '+ 11(0)222 333 442' ,'connection_duration' => '00:01:02' ,'fee' => '1.15' ), array ('connection_number' => '+11(0)222 333 443' ,'connection_duration' => '00:01:03' ,'費用' = ''1.15' ), 數(shù)組('connection_number' => '+ 11(0)222 333 444' ,'connection_duration' => '00:01:04' ,'費用' => '1.15' )); $ phpLiveDocx - > assign ('connection' ,$ billConnections ); //創(chuàng)建和檢索文檔
生成的文檔包含下表,其中包含分配的關(guān)聯(lián)數(shù)組中的數(shù)據(jù)(單擊以放大):
除了上面列出的LiveDocx支持的文字處理文件格式之外,您還可以將生成的文檔另存為一個或多個圖像文件。為此,Zend_Service_LiveDocx_MailMerge提供方法getAllBitmaps()和getBitmaps():
//實例化LiveDocx //獲取所有位圖//(zoomFactor,format)$ bitmaps = $ phpLiveDocx - > getAllBitmaps (100 ,'png' );
同樣,可以檢索特定范圍內(nèi)頁面的圖像:
//獲取在規(guī)定的范圍內(nèi)的位圖只是//(fromPage,toPage,zoomFactor,格式)$位圖= $ phpLiveDocx - > getBitmaps (2 ,2 ,100 ,'PNG' );
注意zoomFactor參數(shù)。這是一個百分比值,在10%到400%的范圍內(nèi)。這些方法非常適合于生成所創(chuàng)建文檔的縮略圖圖像,例如,作為預(yù)覽在瀏覽器中顯示。
通過迭代$ bitmaps數(shù)組,可以將實際的圖像文件寫入磁盤。數(shù)組中每個記錄有一頁二進制數(shù)據(jù):
//寫入磁盤//(每個記錄一頁)foreach ($ bitmaps as $ pageNumber => $ bitmapData ){ $ filename = sprintf ('documentPage%d.png' ,$ pageNumber ); file_put_contents ($ filename ,$ bitmapData ); printf ('將%d個字節(jié)寫入磁盤為%s。%s' ,filesize ($ filename ),$ filename ,PHP_EOL ); }
Zend框架中提供的構(gòu)成LiveDocx的PHP 5實現(xiàn)的代碼在新BSD許可下發(fā)布,因此可以根據(jù)許可條款在大多數(shù)項目中進行部署,修改和重新分發(fā)。但是,實際的LiveDocx SOAP服務(wù)器是專有軟件??梢酝ㄟ^三種方式在自己的應(yīng)用程序中部署SOAP服務(wù)。
免費公共服務(wù)器
對于絕大多數(shù)應(yīng)用程序,開發(fā)人員選擇這種方法。Zend Framework組件中引用的默認LiveDocx服務(wù)器是免費的公共服務(wù)器。它可以完全免費用于您自己的應(yīng)用程序。注冊 LiveDocx帳戶。
高級托管服務(wù)器
如果您的應(yīng)用程序每小時生成數(shù)千個文檔,您可以考慮支付少量月費來訪問您自己的個人LiveDocx服務(wù)器。與領(lǐng)先的托管服務(wù)提供商合作,您可以租用這樣的高級托管服務(wù)器。
本地許可服務(wù)器
如果您的應(yīng)用程序在一小時內(nèi)生成的文檔超過一萬個,您可以考慮在本地網(wǎng)絡(luò)中安裝LiveDocx服務(wù)器。在本地千兆網(wǎng)絡(luò)中直接訪問是迄今為止部署LiveDocx的最快方式。
以上是“如何使用LiveDocx和Zend Framework生成基于模板的文檔”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
本文名稱:如何使用LiveDocx和ZendFramework生成基于模板的文檔
標(biāo)題URL:http://aaarwkj.com/article8/gjocip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、電子商務(wù)、軟件開發(fā)、營銷型網(wǎng)站建設(shè)、定制網(wǎng)站、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)