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