创建从PHP到Delphi的应用程序打印队列

时间:2013-01-28 06:32:04

标签: php delphi printing ms-word delphi-xe

我正在忙着为PHP中的客户端重写承诺管理系统。它基本上将捐赠者,筹款人,文件和承诺信息存储在数据库中。

在提交每份承诺后,我需要打印两份发票,以及用户可以选择的任何所需文件。

在正常情况下,我会获得PHP(顺便说一下,它在Windows上的本地服务器上)打开Word,打开文档,替换变量,保存和打印。但是,在使用PHP时,我们无法看到该过程的进展情况。

所以,我想在Delphi XE中编写一个为我处理这个问题的应用程序,并通过自动打印队列在一个小弹出窗口中显示进度。成功将数据插入数据库后,PHP应用程序应运行Delphi应用程序,然后打印文档。 PHP只需要以JSON或CSV格式将所需信息发送到应用程序。

这里有问题的部分:我怎样才能将这些数据放入某种队列?我一直在考虑确保Delphi应用程序始终处于打开状态,并将文本文件用作队列(每个作业都有换行符),但我不知道如何以识别它的方式完全实现它它作为一个实时队列。例如,如果应用程序当前正在打印,如何让它看到另一个项目同时添加到队列中?

或者,也许有更好的方法来进行队列管理?

2 个答案:

答案 0 :(得分:2)

考虑使用ActiveMQApolloHornetQRabbitMQ等邮件队列。 Delphi的(开源和商业)库可用于允许通过消息队列交换消息。

PHP应用程序会将文档(文本或二进制数据)发送到消息队列,例如/queue/new_pledge。消息存储在(ActiveMQ / HornetQ / RabbitMQ)消息代理上,并等待Delphi客户端连接。如果Delphi应用程序连接,它会提取所有待处理的消息,类似于在邮件应用程序中读取新的电子邮件。 发件人和客户端不必同时运行(异步操作)。

此解决方案还支持负载平衡:如果收到的文档多于单个Delphi应用程序可处理的文档,则只需在更多计算机上启动其他实例。然后,队列中的消息将在所有Delphi应用程序之间分发。

对于PHP方面,有一些消息代理客户端库使用一个名为STOMP的简单协议,这些协议由这些开源消息代理支持。

(我是Delphi和Free Pascal的Habari Client STOMP库的作者,它支持五个不同的消息代理)


P.S。操作系统中还有一个消息队列系统:Microsoft Message Queuing (MSMQ)

答案 1 :(得分:0)

保持简单

使用json_encode()将信息从PHP发布到Indy httpserver Indy 10 Http Server sample

使用HTTP协议的优点而不是重新发明轮子。

使用此单个单元在Delphi http://sourceforge.net/projects/lkjson/

中读取JSON