溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何使用LiveDocx和Zend Framework生成基于模板的文檔

發(fā)布時(shí)間:2021-11-30 17:27:16 來源:億速云 閱讀:134 作者:小新 欄目:編程語言

小編給大家分享一下如何使用LiveDocx和Zend Framework生成基于模板的文檔,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

使用PHP生成打印良好的格式良好的PDF文檔并非易事。傳統(tǒng)上,使用PHP生成PDF有兩種主要方法。如果有足夠的時(shí)間和耐心,兩者都可以完成工作,但仍然有很多不足之處:

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),每個(gè)幾何形狀和圖形。這不僅是一個(gè)非常耗時(shí)的解決方案,而且非常脆弱:每當(dāng)圖形設(shè)計(jì)師更改文檔的布局時(shí),程序員必須重新編寫他或她的程序代碼。

一種全新的方法

在本文中,作者提出了一種全新的第三種方法。它依賴于在WYSIWYG環(huán)境中創(chuàng)建的模板,例如Microsoft?Word或Open Office,然后使用PHP填充數(shù)據(jù)。生成的文檔不僅可以保存為PDF,還可以保存為DOCX,DOC和RTF。

在我們深入研究這種新方法的內(nèi)部工作方式之前,讓我們先來看一個(gè)實(shí)際的例子。以下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一起提供。雖然在撰寫本文時(shí),沒有正式發(fā)布日期,但預(yù)計(jì)將于2009年第四季度發(fā)布1.10。同時(shí),您可以檢查標(biāo)準(zhǔn)孵化器 SVN存儲庫中的組件。

介紹LiveDocx

LiveDocx是一種基于SOAP的文檔生成服務(wù),基于市場領(lǐng)先的文字處理組件TX Text Control .NET。LiveDocx允許在任何支持SOAP的編程語言中填充文字處理模板。生成的文檔可以保存為任何支持的格式。但是,本文主要介紹如何在PHP 5中使用LiveDocx。

LiveDocx的Zend Framework實(shí)現(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)鍵點(diǎn)是將生成格式良好,可打印的文字處理文檔所需的工作量減少到最低限度。對于最終用戶,創(chuàng)建任何支持的文件格式所涉及的邏輯是相同的。例如,無論您是想要PDF還是RTF文件,代碼(一個(gè)參數(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?格式

模板可以本地存儲在客戶端計(jì)算機(jī)(發(fā)起SOAP請求的計(jì)算機(jī)上)上,也可以遠(yuǎn)程存儲在后端服務(wù)器上。決定使用哪一個(gè)取決于您正在開發(fā)的應(yīng)用程序類型。

如果在本地存儲模板,則必須將模板與應(yīng)在每個(gè)請求上填充的數(shù)據(jù)一起傳輸。如果模板在每個(gè)請求中保持不變,則此方法效率非常低。最好將模板上傳到后端服務(wù)器一次,然后在所有后續(xù)請求中引用它。這樣,只有應(yīng)填充的數(shù)據(jù)才會從客戶端傳輸?shù)胶蠖朔?wù)器。使用LiveDocx的大多數(shù)應(yīng)用程序?qū)儆诖祟悇e。

另一方面,如果您有一個(gè)不斷變化的模板,或者您允許最終用戶上傳模板的應(yīng)用程序,您可以考慮在本地存儲模板并在每個(gè)請求時(shí)傳輸它們。這種方法顯然較慢,因?yàn)槊總€(gè)請求都包含模板本身,以及填充它的數(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元文件格式

使用LiveDocx

在本節(jié)中,我們將從頭開始查看使用LiveDocx創(chuàng)建文檔的整個(gè)過程。

在Microsoft?Word2007中創(chuàng)建模板

任何LiveDocx項(xiàng)目的第一步都是創(chuàng)建模板。為此,您可以使用Open Office或Microsoft?Word。出于本文的目的,我們將使用Microsoft?Word2007.有關(guān)使用Open Office的說明,請查看LiveDocx博客。

在Microsoft?Word2007中插入合并字段首先在Microsoft?Word2007中創(chuàng)建一個(gè)新文件,然后將模板文件另存為template.docx。

如何使用LiveDocx和Zend Framework生成基于模板的文檔

然后,您可以開始撰寫模板,使用“ 字段”對話框插入文本,圖形和合并字段,如右圖所示。

一段時(shí)間后,您將擁有一個(gè)模板,其中包含圖像,文本和許多合并字段。合并字段由{MERGEFIELD name}表示,并將在下一步中填充標(biāo)量數(shù)據(jù)。Microsoft?Word2007中模板的以下屏幕截圖說明了模板的外觀:

如何使用LiveDocx和Zend Framework生成基于模板的文檔

完成后保存模板template.docx [/ img] [46 KB]。

在LiveDocx中分配標(biāo)量數(shù)據(jù)類型

現(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文件進(jìn)行存檔的應(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中隨附的文檔查看器:

如何使用LiveDocx和Zend Framework生成基于模板的文檔

在LiveDocx中分配復(fù)合數(shù)據(jù)類型

除了在前一個(gè)示例中分配給模板的標(biāo)量數(shù)據(jù)類型之外,還可以分配復(fù)合數(shù)據(jù)類型,例如關(guān)聯(lián)數(shù)組。考慮模板template.doc [20.5 KB]和生成的文檔document.pdf [77.6 KB]。特別是,請看一下模板的以下部分(點(diǎn)擊放大):

如何使用LiveDocx和Zend Framework生成基于模板的文檔

如何使用LiveDocx和Zend Framework生成基于模板的文檔Microsoft?Word和如何使用LiveDocx和Zend Framework生成基于模板的文檔Microsoft?Word中的書簽之間的模板部分在最終文檔中重復(fù),以生成表的行。以下關(guān)聯(lián)數(shù)組的一個(gè)子數(shù)組用于每一行。

使用以下PHP 5代碼,我們將使用電話連接數(shù)據(jù)的關(guān)聯(lián)數(shù)組填充模板。為清楚起見,此示例僅顯示分配關(guān)聯(lián)數(shù)組的部分。LiveDocx的實(shí)例化以及文檔創(chuàng)建和可檢索的過程與前面的示例相同,并且已被省略:

//實(shí)例化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' 
,'費(fèi)用' 
= 
''1.15' 
),    數(shù)組('connection_number' 
=> 
'+ 11(0)222 333 444' 
,'connection_duration' 
=> 
'00:01:04' 
,'費(fèi)用' 
=> 
'1.15' 
)); 
$ phpLiveDocx 
- > 
assign 
('connection' 
,$ billConnections 
); 
//創(chuàng)建和檢索文檔

生成的文檔包含下表,其中包含分配的關(guān)聯(lián)數(shù)組中的數(shù)據(jù)(單擊以放大):

如何使用LiveDocx和Zend Framework生成基于模板的文檔

使用LiveDocx生成圖像文件

除了上面列出的LiveDocx支持的文字處理文件格式之外,您還可以將生成的文檔另存為一個(gè)或多個(gè)圖像文件。為此,Zend_Service_LiveDocx_MailMerge提供方法getAllBitmaps()getBitmaps()

//實(shí)例化LiveDocx 
//獲取所有位圖//(zoomFactor,format)$ bitmaps 
= 
$ phpLiveDocx 
- > 
getAllBitmaps 
(100 
,'png' 
);

同樣,可以檢索特定范圍內(nèi)頁面的圖像:

//獲取在規(guī)定的范圍內(nèi)的位圖只是//(fromPage,toPage,zoomFactor,格式)$位圖= 
$ phpLiveDocx 
- > 
getBitmaps 
(2 
,2 
,100 
,'PNG' 
);

注意zoomFactor參數(shù)。這是一個(gè)百分比值,在10%到400%的范圍內(nèi)。這些方法非常適合于生成所創(chuàng)建文檔的縮略圖圖像,例如,作為預(yù)覽在瀏覽器中顯示。

通過迭代$ bitmaps數(shù)組,可以將實(shí)際的圖像文件寫入磁盤。數(shù)組中每個(gè)記錄有一頁二進(jìn)制數(shù)據(jù):

//寫入磁盤//(每個(gè)記錄一頁)foreach 
($ bitmaps 
as 
$ pageNumber 
=> 
$ bitmapData 
){ 
    $ filename 
= 
sprintf 
('documentPage%d.png' 
,$ pageNumber 
); 
    file_put_contents 
($ filename 
,$ bitmapData 
); 
    printf 
('將%d個(gè)字節(jié)寫入磁盤為%s。%s' 
,filesize 
($ filename 
),$ filename 
,PHP_EOL 
); 
}
在您自己的應(yīng)用程序中部署LiveDocx

Zend框架中提供的構(gòu)成LiveDocx的PHP 5實(shí)現(xiàn)的代碼在新BSD許可下發(fā)布,因此可以根據(jù)許可條款在大多數(shù)項(xiàng)目中進(jìn)行部署,修改和重新分發(fā)。但是,實(shí)際的LiveDocx SOAP服務(wù)器是專有軟件??梢酝ㄟ^三種方式在自己的應(yīng)用程序中部署SOAP服務(wù)。

  1. 免費(fèi)公共服務(wù)器
    對于絕大多數(shù)應(yīng)用程序,開發(fā)人員選擇這種方法。Zend Framework組件中引用的默認(rèn)LiveDocx服務(wù)器是免費(fèi)的公共服務(wù)器。它可以完全免費(fèi)用于您自己的應(yīng)用程序。注冊 LiveDocx帳戶。

  2. 高級托管服務(wù)器
    如果您的應(yīng)用程序每小時(shí)生成數(shù)千個(gè)文檔,您可以考慮支付少量月費(fèi)來訪問您自己的個(gè)人LiveDocx服務(wù)器。與領(lǐng)先的托管服務(wù)提供商合作,您可以租用這樣的高級托管服務(wù)器。

  3. 本地許可服務(wù)器
    如果您的應(yīng)用程序在一小時(shí)內(nèi)生成的文檔超過一萬個(gè),您可以考慮在本地網(wǎng)絡(luò)中安裝LiveDocx服務(wù)器。在本地千兆網(wǎng)絡(luò)中直接訪問是迄今為止部署LiveDocx的最快方式。

以上是“如何使用LiveDocx和Zend Framework生成基于模板的文檔”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI