Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# PDF打印以随机顺序进行_C#_.net_Pdf_Printing - Fatal编程技术网

C# PDF打印以随机顺序进行

C# PDF打印以随机顺序进行,c#,.net,pdf,printing,C#,.net,Pdf,Printing,我正在使用FoxitReader(PDF阅读器)并传递命令行参数以按语法打印PDF。我理解,我们无法通过命令行指定从 我正在开发一个win forms桌面应用程序,为了打印多份PDF文档,我使用以下代码 string foxitReaderInstalledPath = GetFoxitReaderInstalledPath(); while (noOfCopies > 0) { Process process = new System.Diagnostics.Process(); pro

我正在使用FoxitReader(PDF阅读器)并传递命令行参数以按语法打印PDF。我理解,我们无法通过命令行指定从

我正在开发一个win forms桌面应用程序,为了打印多份PDF文档,我使用以下代码

string foxitReaderInstalledPath = GetFoxitReaderInstalledPath();
while (noOfCopies > 0)
{
Process process = new System.Diagnostics.Process();
process.EnableRaisingEvents = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.FileName = foxitReaderInstalledPath;
string arguments = String.Format(@"-t ""{0}"" ""{1}""", this.Path, printerName);
process.StartInfo.Arguments = arguments;
process.Start();
process.WaitForExit();
noOfCopies = noOfCopies - 1;
}
当多个用户向同一台打印机提供打印的多份副本时,会发生此问题。问题是打印的文档会按照打印顺序混淆。有人请告诉我如何避免这个问题吗


非常感谢。

您无法避免此客户端

如果你真的想避免这种情况,用户使用的“客户端”应用程序只需将文件连同所有相关参数发送到某个“集中式服务器进程”。。。这种“集中处理”然后可以“序列化”打印,使其以正确的顺序进行

但是,如果您要打印的打印机可以从用户系统访问,那么用户仍可能向打印机发送一些东西(如图像或word文档…),这些东西将被打印出来,并稍微扰乱了订单

我认为如果你描述一下你的目标是什么,那会更有意义。。。也许有更好的方法来解决这一切。。。您正在实现打印服务器吗

编辑-根据评论:

将PDF文件的位置放在网络共享上。。。并在提供共享的同一台机器上运行打印代码。。。理想情况下,打印机直接连接到该机器。。。这应该提供足够的性能,因为它只是一个访问打印机的中央应用程序,所以应该可以正常工作

我强烈建议使用PDF库或Acrobat阅读器,以便打印时可以使用NumberOfCopy的参数

编辑2-根据注释:

一些PDF库:


问题在于FoxIt不支持“打印多份”,因此OP必须通过提交同一作业的多份副本来伪造。如果唯一进行打印的程序是这个程序,则可以实现互斥,以便一次只能打印一个副本。如果有人同时进入Excel并打印,这显然不会有帮助。您可以尝试的另一件事是使用打印后台处理程序API设置每个作业的
NextJobId
,以便它们连续运行。(你需要打印管理员权限才能重新排序作业。)@Raymond我不明白你的评论。。。如果你关注OPs问题中的链接,你可以看到他在另一次讨论中接受了我的答案,即Foxit不支持通过命令行参数进行多个副本。。。这导致了循环。。。因为他写的是“多用户”——你建议的“互斥”必须是局域网范围的。。。我的回答提供了一个“可能的解决方案”/“序列化打印”(Excel打印用户除外)通过一个集中的过程…我想我们是一致的。这样一个互斥器会让你成为一台交叉机器,它有它自己的问题。@Yahia再次感谢Yahia为你解答的问题。我们有一个集中部署的应用程序,它以前进行打印。它速度很慢,性能很差。所以我们用客户端打印来代替它。1.用户将从各种应用程序中打印,PDF将生成并存储在用户特定的位置。我的应用程序将选择文件并开始打印。是否有一种方法可以实现对应用程序的更改以解决此问题。谢谢,使用Acrobat Reader,我发现我们无法指定打印时的份数。有什么好的PDF库建议吗?打印机是网络打印机(TCP/IP)吗?@Mark,是的,它是网络打印机。多个用户将同时或在不同的时间向它提供打印输出。我编写了一个应用程序,该应用程序以随机顺序打印来自同一文档的页面。我的工作是单独打印每一页,这样他们就可以按正确的顺序打印。我认为这与包被送到打印机的方式有关。