【发布时间】: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