您好,登錄后才能下訂單哦!
小編給大家分享一下如何使用LiveDocx和Zend Framework生成基于模板的文檔,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
使用PHP生成打印良好的格式良好的PDF文檔并非易事。傳統上,使用PHP生成PDF有兩種主要方法。如果有足夠的時間和耐心,兩者都可以完成工作,但仍然有很多不足之處:
HTML-to-PDF:這種方法廣泛用于主流應用程序。這里使用眾多開源庫之一以編程方式創建HTML文檔并將其轉換為PDF。但是,由于HTML不是面向頁面的格式(如PDF),因此無法在HTML和PDF之間執行1對1映射。典型的文字處理文件格式功能,例如頁眉和頁腳,孤兒和寡婦甚至頁碼都不能用HTML表示。
程序化:此方法可以完全控制生成的PDF。但是,它要求從程序代碼中設置每行文本的x和y坐標,每個幾何形狀和圖形。這不僅是一個非常耗時的解決方案,而且非常脆弱:每當圖形設計師更改文檔的布局時,程序員必須重新編寫他或她的程序代碼。
在本文中,作者提出了一種全新的第三種方法。它依賴于在WYSIWYG環境中創建的模板,例如Microsoft?Word或Open Office,然后使用PHP填充數據。生成的文檔不僅可以保存為PDF,還可以保存為DOCX,DOC和RTF。
在我們深入研究這種新方法的內部工作方式之前,讓我們先來看一個實際的例子。以下PHP 5代碼說明了PDF生成,其中模板template.docx [46.7 KB]中的合并字段軟件,被許可方和公司用PHP中的標量數據填充。生成的文檔document.pdf [104.7 KB]已創建并寫入磁盤。
$ 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一起提供。雖然在撰寫本文時,沒有正式發布日期,但預計將于2009年第四季度發布1.10。同時,您可以檢查標準孵化器 SVN存儲庫中的組件。
LiveDocx是一種基于SOAP的文檔生成服務,基于市場領先的文字處理組件TX Text Control .NET。LiveDocx允許在任何支持SOAP的編程語言中填充文字處理模板。生成的文檔可以保存為任何支持的格式。但是,本文主要介紹如何在PHP 5中使用LiveDocx。
LiveDocx的Zend Framework實現的組件位于標準Zend Framework分發文件中的/ Zend / Service / LiveDocx /。可以將LiveDocx直接與PHP 5 SoapClient一起使用,不使用Zend Framework,也可以使用第三方庫NuSOAP。NuSOAP方法甚至允許在PHP 4中使用LiveDocx。然而,本文主要關注PHP 5中的官方Zend Framework組件。
LiveDocx的關鍵點是將生成格式良好,可打印的文字處理文檔所需的工作量減少到最低限度。對于最終用戶,創建任何支持的文件格式所涉及的邏輯是相同的。例如,無論您是想要PDF還是RTF文件,代碼(一個參數除外)都是相同的。
LiveDocx的核心開發人員還希望確保模板的生成盡可能簡單,在最終用戶已經非常熟悉的環境中。因此,您可以在Word或Open Office中創建模板。
在整篇文章中,我們引用術語模板和文檔。了解兩者之間的區別非常重要。
模板:術語模板用于指代輸入文件,包含格式和文本字段。模板可以采用以下任何一種文件格式:
DOCX - Office Open XML格式
DOC - Microsoft?WordDOC格式
RTF - 富文本格式
TXD - TXTextControl?格式
模板可以本地存儲在客戶端計算機(發起SOAP請求的計算機上)上,也可以遠程存儲在后端服務器上。決定使用哪一個取決于您正在開發的應用程序類型。
如果在本地存儲模板,則必須將模板與應在每個請求上填充的數據一起傳輸。如果模板在每個請求中保持不變,則此方法效率非常低。最好將模板上傳到后端服務器一次,然后在所有后續請求中引用它。這樣,只有應填充的數據才會從客戶端傳輸到后端服務器。使用LiveDocx的大多數應用程序屬于此類別。
另一方面,如果您有一個不斷變化的模板,或者您允許最終用戶上傳模板的應用程序,您可以考慮在本地存儲模板并在每個請求時傳輸它們。這種方法顯然較慢,因為每個請求都包含模板本身,以及填充它的數據。
文檔:術語文檔用于指生成的輸出文件,其中包含模板文件,填充數據 - 即完成的文檔。文檔可以使用以下任何一種文件格式保存:
DOCX - Office Open XML格式
DOC - Microsoft?WordDOC格式
HTML - XHTML 1.0過渡格式
RTF - 富文本格式
PDF - Acrobat?便攜式文檔格式
TXD - TX文本控制格式
TXT - ANSI純文本
除了上述文字處理文件格式外,文檔還可以保存為以下圖像文件格式:
BMP - 位圖圖像格式
GIF - 圖形交換格式
JPG - 聯合圖像專家組格式
PNG - 便攜式網絡圖形格式
TIFF - 標記圖像文件格式
WMF - Windows元文件格式
在本節中,我們將從頭開始查看使用LiveDocx創建文檔的整個過程。
任何LiveDocx項目的第一步都是創建模板。為此,您可以使用Open Office或Microsoft?Word。出于本文的目的,我們將使用Microsoft?Word2007.有關使用Open Office的說明,請查看LiveDocx博客。
在Microsoft?Word2007中插入合并字段首先在Microsoft?Word2007中創建一個新文件,然后將模板文件另存為template.docx。
然后,您可以開始撰寫模板,使用“ 字段”對話框插入文本,圖形和合并字段,如右圖所示。
一段時間后,您將擁有一個模板,其中包含圖像,文本和許多合并字段。合并字段由{MERGEFIELD name}表示,并將在下一步中填充標量數據。Microsoft?Word2007中模板的以下屏幕截圖說明了模板的外觀:
完成后保存模板template.docx [/ img] [46 KB]。
現在我們有了模板文件,下一步就是用數據填充它。在下面的示例中,我們將向模板分配標量數據類型(在本例中為字符串)。
$ 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 );
對于許多應用程序,特別是那些使用PDF文件進行存檔的應用程序,您可能希望設置PDF文件的元數據。您可以通過使用應嵌入PDF文件的元數據指定關聯數組來執行此操作。在()setDocumentProperties方法前必須調用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]將寫入磁盤,現在可以在您喜歡的PDF閱讀器中打開,例如Ubuntu中隨附的文檔查看器:
除了在前一個示例中分配給模板的標量數據類型之外,還可以分配復合數據類型,例如關聯數組。考慮模板template.doc [20.5 KB]和生成的文檔document.pdf [77.6 KB]。特別是,請看一下模板的以下部分(點擊放大):
Microsoft?Word和Microsoft?Word中的書簽之間的模板部分在最終文檔中重復,以生成表的行。以下關聯數組的一個子數組用于每一行。
使用以下PHP 5代碼,我們將使用電話連接數據的關聯數組填充模板。為清楚起見,此示例僅顯示分配關聯數組的部分。LiveDocx的實例化以及文檔創建和可檢索的過程與前面的示例相同,并且已被省略:
//實例化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' ), 數組('connection_number' => '+ 11(0)222 333 444' ,'connection_duration' => '00:01:04' ,'費用' => '1.15' )); $ phpLiveDocx - > assign ('connection' ,$ billConnections ); //創建和檢索文檔
生成的文檔包含下表,其中包含分配的關聯數組中的數據(單擊以放大):
除了上面列出的LiveDocx支持的文字處理文件格式之外,您還可以將生成的文檔另存為一個或多個圖像文件。為此,Zend_Service_LiveDocx_MailMerge提供方法getAllBitmaps()和getBitmaps():
//實例化LiveDocx //獲取所有位圖//(zoomFactor,format)$ bitmaps = $ phpLiveDocx - > getAllBitmaps (100 ,'png' );
同樣,可以檢索特定范圍內頁面的圖像:
//獲取在規定的范圍內的位圖只是//(fromPage,toPage,zoomFactor,格式)$位圖= $ phpLiveDocx - > getBitmaps (2 ,2 ,100 ,'PNG' );
注意zoomFactor參數。這是一個百分比值,在10%到400%的范圍內。這些方法非常適合于生成所創建文檔的縮略圖圖像,例如,作為預覽在瀏覽器中顯示。
通過迭代$ bitmaps數組,可以將實際的圖像文件寫入磁盤。數組中每個記錄有一頁二進制數據:
//寫入磁盤//(每個記錄一頁)foreach ($ bitmaps as $ pageNumber => $ bitmapData ){ $ filename = sprintf ('documentPage%d.png' ,$ pageNumber ); file_put_contents ($ filename ,$ bitmapData ); printf ('將%d個字節寫入磁盤為%s。%s' ,filesize ($ filename ),$ filename ,PHP_EOL ); }
Zend框架中提供的構成LiveDocx的PHP 5實現的代碼在新BSD許可下發布,因此可以根據許可條款在大多數項目中進行部署,修改和重新分發。但是,實際的LiveDocx SOAP服務器是專有軟件。可以通過三種方式在自己的應用程序中部署SOAP服務。
免費公共服務器
對于絕大多數應用程序,開發人員選擇這種方法。Zend Framework組件中引用的默認LiveDocx服務器是免費的公共服務器。它可以完全免費用于您自己的應用程序。注冊 LiveDocx帳戶。
高級托管服務器
如果您的應用程序每小時生成數千個文檔,您可以考慮支付少量月費來訪問您自己的個人LiveDocx服務器。與領先的托管服務提供商合作,您可以租用這樣的高級托管服務器。
本地許可服務器
如果您的應用程序在一小時內生成的文檔超過一萬個,您可以考慮在本地網絡中安裝LiveDocx服務器。在本地千兆網絡中直接訪問是迄今為止部署LiveDocx的最快方式。
以上是“如何使用LiveDocx和Zend Framework生成基于模板的文檔”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。