翻譯|行業(yè)資訊|編輯:楊鵬連|2020-12-22 13:11:29.063|閱讀 553 次
概述:今天,我們很高興地宣布在Beta測試中發(fā)布了Lazarus的客戶端-服務(wù)器組件。它們可以用于創(chuàng)建和自定義用于遠(yuǎn)程報告生成和導(dǎo)出的服務(wù)器,而程序和Web瀏覽器可以充當(dāng)客戶端。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
FastReport VCL是用于Delphi,C ++ Builder,RAD Studio和Lazarus的報告和文檔創(chuàng)建VCL庫。它提供了可視化模板設(shè)計器,可以訪問最受歡迎的數(shù)據(jù)源,報告引擎,預(yù)覽,將過濾器導(dǎo)出為30多種格式,并可以部署到云,Web,電子郵件和打印中。
近日,F(xiàn)astReport VCL更新至v6.9,在新版本中,在PDF導(dǎo)出中增加了對以下對象的交互式表單支持:文本,復(fù)選框和圖片。能夠通過InteractiveFormsFontSubset屬性將所需的字形僅包含在交互式形式中。同時修復(fù)了多個Bug問題。歡迎下載體驗。(點擊下方按鈕下載)
直到最近,可以說用Lazarus編寫的應(yīng)用程序通過Web生成報告的任務(wù)還是很有創(chuàng)造力的。今天,我們很高興地宣布在Beta測試中發(fā)布了Lazarus的客戶端-服務(wù)器組件。它們可以用于創(chuàng)建和自定義用于遠(yuǎn)程報告生成和導(dǎo)出的服務(wù)器,而程序和Web瀏覽器可以充當(dāng)客戶端。
VCL FastReport中的客戶端-服務(wù)器組件在很早以前就已實現(xiàn),但是在此之前,它們尚未適應(yīng)Lazarus,僅在Rad Studio Delphi和C ++ Builder中運(yùn)行。
這篇文章不僅對從未使用過它們的人有用,而且對于想要將其FR服務(wù)器遷移到Linux的人也很有用,因為它誠實地描述了所有優(yōu)點和缺點。我們還發(fā)現(xiàn)了Lazarus本身的問題,并找到了解決之道。
現(xiàn)在,讓我們繼續(xù)討論該問題的技術(shù)方面。
用于在Lazarus中進(jìn)行報告的客戶端服務(wù)器組件
Lazarus中的客戶端服務(wù)器組件可在以下兩種操作系統(tǒng)下使用:Windows和Linux(僅GTK2)。它們在“ fr6CS_lazarus.lpk ”程序包中實現(xiàn),其依賴項指定了導(dǎo)出程序包,因此必須在安裝之前安裝“ Source / ExportPack ”文件夾中的導(dǎo)出程序包。
安裝客戶端/服務(wù)器組件包之后,將有一個名為“ FastReport 6.0 Client / Server”的新選項卡,您將在其中找到4個組件:
您可以在此文件中指定許多設(shè)置,這些只是其中最重要的:
您可以在此處詳細(xì)了解所有設(shè)置。
2. TfrxServerConnection是一個客戶端組件,其中包含用于遠(yuǎn)程連接到TfrxReportServer的信息,例如:主機(jī),端口,錯誤嘗試次數(shù),超時等。
3. TfrxReportClient,一個客戶端組件,類似于TfrxReport,執(zhí)行服務(wù)器,并顯示在客戶機(jī)上的報告請求。它使用此TfrxServerConnection組件來獲取有關(guān)服務(wù)器的信息。它可以從服務(wù)器接收構(gòu)建的報告,并在內(nèi)部(在客戶端計算機(jī)上)顯示或?qū)С鲈搱蟾妗?/span>
4. TfrxHTTPClient是一個客戶端組件,旨在通過HTTP協(xié)議接收任意文件。例如,它可以請求已經(jīng)從服務(wù)器導(dǎo)出的報告。
我們還提供3個演示應(yīng)用程序:
1臺服務(wù)器-立即與報告和數(shù)據(jù)庫一起使用;
2個客戶-簡單且“高級”。
作為“高級”客戶端,您可以通過按“開始”按鈕來執(zhí)行承載多線程測試:
我們還想提醒您,客戶端可以是普通的瀏覽器,并且可以為Web客戶端配置自己的喜好,而演示服務(wù)器已經(jīng)為Web客戶端配置了。
“瓶頸” GTK2
Lazarus是跨平臺的開源IDE。但是不幸的是,這桶“蜂蜜”中也有“一勺焦油”。我們將從最不愉快的地方開始,即Linux服務(wù)器。
GTK2具有一個非常不愉快的屬性:單線程。
這意味著即使2個程序?qū)⒃谝粋€無窮循環(huán)中在其BitMap上繪制圖形,GTK2也會將所有內(nèi)容縮小到1個流。因此,總的來說,這兩個程序所繪制的數(shù)字少于一個程序所繪制的數(shù)字,因為部分時間將花費(fèi)在同步上。
但是在這種情況下,同步是在沒有我們參與的情況下進(jìn)行的。
現(xiàn)在以一個程序在多個流中繪制圖形的情況為例(每個流都有其自己的本地BitMap)。在這種情況下,您將必須在代碼中創(chuàng)建一個鎖定系統(tǒng),因為我們記得該庫的單個線程。但是這些不應(yīng)該是普通的關(guān)鍵部分,而應(yīng)該是GTK2級別的全局關(guān)鍵部分。當(dāng)其中一個線程進(jìn)入此關(guān)鍵功能時,即使基本形式也將掛起,直到它退出。
帶圖片的多線程只能通過找到一個獨(dú)立于GTK2的相似繪圖組件(例如,帶有圖片的示例)來組織,在我們的情況下,另一個組件不合適。
因此,某些服務(wù)器操作被限制為1個流。
尤其是由于此功能,最好不要使用對話,因為只要一位客戶回答對話,其他客戶的報告構(gòu)建就會暫停。
可能會出現(xiàn)問題:“為什么您甚至需要單線程服務(wù)器?” 并且您會部分正確,因為這類似于道路上的“瓶頸”問題,在該道路上,總道路通行能力等于最狹窄地方的道路通行能力。
但是您只會部分地正確。僅將3個大型操作縮小為一種流程:上載報告,構(gòu)建和導(dǎo)出。接收和傳輸是并行進(jìn)行的,并且由于已構(gòu)建報告的緩存系統(tǒng),在某些情況下,您無需再次構(gòu)建它們。
而且,再加上功能強(qiáng)大的服務(wù)器,將使此問題不那么明顯。這僅對于Linux(GTK2)也是一個問題,因為Windows中不存在此問題,并且隨著Lazarus中GTK3的發(fā)布(該版本已經(jīng)支持多線程),它將完全消失。
其余的問題比這個問題小很多倍,甚至很小。
還剩下什么
一小部分功能是在移植過程中刪除的,即CGI和授權(quán)系統(tǒng)。我們能否盡快實施它們?nèi)Q于客戶對它們的實際要求。
導(dǎo)出到Lazarus的HTML仍然很不完善,可以并且應(yīng)該使用Web客戶端,因為它很方便,但是報表不能完美顯示。
但是,您可以設(shè)置系統(tǒng),以使Web客戶端接收的報告不是以HTML格式導(dǎo)出,而是以PDF格式導(dǎo)出。畢竟,大多數(shù)現(xiàn)代瀏覽器都可以完美顯示PDF文件。我們已經(jīng)很好地實現(xiàn)了這種導(dǎo)出格式,您可以自己查看。
更正了Lazarus消息隊列2.0.10中的錯誤
對于那些想要在Linux中使用我們的新組件的人來說,值得一提的是:在阻止消息隊列時,我們遇到了一個錯誤,無法繞過它。我們能夠聯(lián)系Lazarus的程序員,他們已經(jīng)解決了這個問題,在下一版的Lazarus中,所有功能都可以穩(wěn)定運(yùn)行。目前,在2.0.10及更高版本中,此錯誤必須在本地修復(fù)。不需要花費(fèi)很多精力或時間,您要做的就是將3行添加到Lazarus文件之一并重建它:
1.打開拉扎勒斯所在的文件夾(在Ubuntu,例如 “/usr/share/lazarus/2.0.10”)
2.打開文件 ?/ LCL /接口/ GTK2 / gtk2msgqueue.pp 在它。
3.查找過程: 過程TGtkMessageQueue.Lock;
4.在此過程中,找到以下行: g_main_context_acquire(FMainContext);
此代碼無視g_main_context_acquire函數(shù)可能失敗的事實。
因此,將其替換為:
repeat until g_main_context_acquire(FMainContext);也就是說,我們將循環(huán)調(diào)用g_main_context_acquire直到它返回True(成功完成)。
我們邀請您試用我們用于Lazarus的新組件,但我們想提醒您,這是一個beta版本,它將根據(jù)您的需要進(jìn)行改進(jìn)。如有任何錯誤,請務(wù)必寫信給我們以尋求支持。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: