Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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# 4.0 不间断地打印多个作业c#_C# 4.0_Printing_Printdocument - Fatal编程技术网

C# 4.0 不间断地打印多个作业c#

C# 4.0 不间断地打印多个作业c#,c#-4.0,printing,printdocument,C# 4.0,Printing,Printdocument,有没有一种方法可以连续打印多个作业,而不让另一个用户在其间发送打印作业?(有点像“只要我的打印作业还没有完成,就不要把令牌给其他用户”) 这是一个共享打印机,许多用户都可以访问它,而我打印的是一个大文档,所以需要一些时间; 我使用了不止一个作业,因为它的页面不能从同一个纸盘打印,所以我必须在代码中切换纸张源 救命啊!先谢谢你 p.S.我正在使用.Net的PrintDocument对象据我所知,您不需要通过保持作业打开并发送PJL或其他不弹出页面的命令来使打印机保持忙碌。另一种选择是将作业连接到一

有没有一种方法可以连续打印多个作业,而不让另一个用户在其间发送打印作业?(有点像“只要我的打印作业还没有完成,就不要把令牌给其他用户”)

这是一个共享打印机,许多用户都可以访问它,而我打印的是一个大文档,所以需要一些时间; 我使用了不止一个作业,因为它的页面不能从同一个纸盘打印,所以我必须在代码中切换纸张源

救命啊!先谢谢你


p.S.我正在使用.Net的PrintDocument对象

据我所知,您不需要通过保持作业打开并发送PJL或其他不弹出页面的命令来使打印机保持忙碌。另一种选择是将作业连接到一个大作业中。我想您也可以通过编程暂停共享打印队列,并使用直接IP打印端口或其他方式直接发送数据。最终没有一个完美的解决方案

  • 不使用多个作业,我可以在打印时更改每个页面的设置(修改PrintPageEventHandler)、链接和代码示例:

    private void PrintPage(object sender, PrintPageEventArgs ev)
    {
        using (Metafile pageImage = new Metafile(streamList[currentPageIndex]))
        {
            // If it's the first page
            if (currentPageIndex == 0)
            {
                // Use a certain tray
                ev.PageSettings.PaperSource = PaperTrayPage1;
            }
            // For the rest of the document
            else
            {
                // Use another tray
                ev.PageSettings.PaperSource = PaperTrayRest;
            }
    
            currentPageIndex++;
    
            ev.Graphics.DrawImage(pageImage, ev.PageBounds);
            ev.HasMorePages = (currentPageIndex < streamList.Count);
        }
    }
    
    private void打印页(对象发送方,PrintPageEventArgs ev)
    {
    使用(图元文件pageImage=新图元文件(streamList[currentPageIndex]))
    {
    //如果是第一页
    如果(currentPageIndex==0)
    {
    //使用某个托盘
    ev.PageSettings.PaperSource=PaperTrayPage1;
    }
    //对于文档的其余部分
    其他的
    {
    //使用另一个托盘
    ev.PageSettings.PaperSource=PaperTrayRest;
    }
    currentPageIndex++;
    ev.Graphics.DrawImage(页面图像,ev.PageBounds);
    ev.HasMorePages=(currentPageIndex
  • 例如,可以组合多个作业(PrintDocument对象)


  • 感谢您的回复,但是是否可以将具有不同页面设置和打印机设置的作业连接起来?是的,一个“文件”可以是10个不同postscript和/或PCL等打印作业的连接。由于每个作业都有一个开始和结束,通常包含一个打印机重置,因此设备会将其作为单独的作业进行处理。关键是要确保这些重置存在,尤其是在PCL和Postscript之间切换语言时(例如)。我建议在每项工作之间加入一些PJL。