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个组件:
1. TfrxReportServer 是一个服务器组件,一个报表服务器和一个二合一HTTP服务器。它最重要的字段是ConfigFileName,其中必须指定带有设置的xml文件的路径。
您可以在此文件中指定许多设置,这些只是其中最重要的:
- 服务器设置本身,例如端口和等待时间;
- FR引擎的设置,例如禁用脚本执行;
- 庞大的导出设置;
- 缓存设置,例如缓存文件的生存期,缓存存储的位置,或者您可以将其完全禁用;
- 记录系统设置;
- 数据库连接设置。
您可以在此处详细了解所有设置。
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版本,它将根据您的需要进行改进。如有任何错误,请务必写信给我们以寻求支持。
还想要更多吗?您可以点击阅读【FastReport 报表2020最新资源盘点】,查找需要的教程资源。让人兴奋的是FastReport .NET正在慧都网火热销售中!在线订购惠享超低折扣。>>查看价格详情
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:FastReport控件中文网 [https://www.fastreportcn.com/]
本文地址:https://www.fastreportcn.com/post/2930.html