【问题标题】:Is it possible to schedule the printer to print page by page是否可以安排打印机逐页打印
【发布时间】:2019-11-01 11:28:00
【问题描述】:

我有一个 A3 大小的打印文档,其中包含客户提供的图像,它将通过计算填满文档(有时一次可能有超过 300 个图像被计算到 printDocument)。我现在面临的问题是,当它被发送到打印机时,文档太大而打印机内存无法处理。有没有办法让打印机在发送后立即打印页面而不是整个文档?我的同事建议将这些页面分成不同的文档。这可能吗?

我已经浏览了文档,但 printDocument 或 printerController 似乎无法与打印机对话以在收到后立即开始打印页面。

在我的测试运行中,我将 360 幅图像填充到 28 页中,并且文档假脱机数据高达 2.71GB Screenshot of the print queue

private void PrintPageEventHandler(object sender, PrintPageEventArgs e)
{
    //set some settings
    //loop until the page has been filled up by images
    while(counter < maxImageAllowedPerPage)
    {
        e.Graphics.DrawImage(image, currentPoint.X + posX, currentPoint.Y + 
             posY, newWidth, newHeight);
    }

    e.Graphics.Dispose();
    e.HasMorePages = (PrintedImageCount != TotalImageCount);
}

【问题讨论】:

  • 您超出了打印缓冲区大小。您可以通过直接写入打印机 IP 地址来绕过缓冲区。
  • 是的,我同意你同事的观点,它看起来不像是一个多页的文档,它有很多页,所以每次“页面”已满时创建一个新文档很有意义(另外你可以保存这些以供以后打印)。您现在正在创建一个文档,但如果您需要进一步帮助,请添加一些打印代码。
  • @jdweng 您如何处理打印机不会改变任何事情,打印机仍然需要缓冲整个文档,因为它必须将其转换为其本机命令/逻辑。
  • 因为我以前做过很多次。您所做的是添加一台新打印机,但不要选择用作打印服务器的 PC 名称,而是使用打印机设置中的选项来使用打印机的 IP 地址。
  • @cjb110 我已经添加了在 PrntPageEventHandler 不确定是否足够时生成文档的方式

标签: c# printdocument


【解决方案1】:

好的,基于 Microsoft docs 的 PrintDocument,您应该只需要移动循环。

类似

while(counter < maxImageAllowedPerPage)
{
    PrintDocument pd = new PrintDocument();
    pd.PrintPage += new PrintPageEventHandler(this.PrintPageEventHandler);
    pd.Print();
}

不确定您如何确定要打印哪个image,但您也需要在此循环中执行此操作,可能在最终的Print() 之前,因为这将触发事件处理程序。可能您需要两个“图像”集合、完整的图像集合和为每个页面填充的集合,因此您将在上面的循环中填充第二个集合,并且 PrintPage EV 将从该集合中读取。

哦,HasMorePages 现在永远都是假的。

【讨论】:

  • 嗨,感谢您的解决方案是的,我重新编写了代码,使其看起来类似于哈哈,我现在唯一担心的是打印队列溢出,但我总是可以添加一个 Thread.sleep( ) 以确保之前的打印作业已完成。感谢您的解决方案:D
【解决方案2】:

我最终得到了类似于@cjb110 的答案

//initialize the print docuemnts with all settings required
var printDocument = new PrintDocument();
printDocument.PrintedImageCount = 0;
printDocument.TotalImageCount = 150;

while(printDocument.PrintedImageCount != printDocument.TotalImageCount){
    printDocument.Print();
}

截至目前,打印机能够根据我的测试打印 30 个文档发送到打印机而不会​​崩溃,我的客户将自行监控打印机可以接受多少文档,直到它崩溃以查看是否我需要实施限制以防止一次发送太多文档。

感谢所有提出不同类型解决方案的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 2018-04-18
    • 2010-11-06
    相关资源
    最近更新 更多