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

标签 php delphi printing ms-word delphi-xe

我正忙着用 PHP 为客户重写一个质押管理系统。它基本上将捐赠者、筹款人、文档和 promise 信息存储在数据库中。

提交每项 promise 后,我需要它打印两张发票以及用户可能选择的任何所需文件。

在正常情况下,我会使用 PHP(顺便说一句,它位于 Windows 的本地服务器上)来打开 Word、打开文档、替换变量、保存和打印。然而,当使用 PHP 时,人们无法看出该过程已经进行到什么程度。

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

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

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

最佳答案

考虑使用像 ActiveMQ 这样的消息队列, Apollo , HornetQRabbitMQ 。 Delphi 有(开源和商业)库,允许通过消息队列交换消息。

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

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

对于 PHP 端,有消息代理客户端库,它们使用名为 STOMP 的简单协议(protocol),这些开源消息代理支持该协议(protocol)。

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


附:操作系统中也已有一个消息队列系统:Microsoft Message Queuing (MSMQ)

关于php - 创建从 PHP 到 Delphi 的应用程序打印队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14556619/

相关文章:

php - 为什么一个系统中有很多php.ini文件?

javascript - 无法通过ajax提交数据

delphi - DScintilla,代码折叠对我不起作用

visual-studio - Silverlight打印中 "Dialogs must be user-initiated"安全异常的另一个技巧

Java打印问题

php - 我怎样才能把这封信从我所有的字符串中删除呢?

php - 什么是好的权限系统?

c# - 如何使用非托管导出 (Robert Giesecke) 将结构数组从 .NET 传递到 Delphi?

delphi - 嵌套通用记录

ios - PrinterToPrint 不显示打印作业进度对话框