是否可以安排打印机逐页打印
Is it possible to schedule the printer to print page by page
我有一个 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);
}
好的,基于 Microsoft docs for PrintDocument,您应该只需要移动循环。
所以像
while(counter < maxImageAllowedPerPage)
{
PrintDocument pd = new PrintDocument();
pd.PrintPage += new PrintPageEventHandler(this.PrintPageEventHandler);
pd.Print();
}
不确定您如何确定要打印哪个 image
,但您也需要在这个循环中执行此操作,可能在最终的 Print()
之前,因为这将触发事件处理程序。可能您需要两个 collection 的 'images',完整的 collection 图片,以及为每个页面填充的 collection,因此您将填充第二个collection 在上面的循环中,PrintPage EV 将从 collection.
中读取
哦,现在 HasMorePages 将始终为 false。
我得到了类似于@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 份文档被发送到打印机而不会崩溃,我的客户将自行监控打印机在崩溃之前可以接受多少文档看看我是否需要实施限制以防止一次发送太多文档。
感谢所有提出不同解决方案的人。
我有一个 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);
}
好的,基于 Microsoft docs for PrintDocument,您应该只需要移动循环。
所以像
while(counter < maxImageAllowedPerPage)
{
PrintDocument pd = new PrintDocument();
pd.PrintPage += new PrintPageEventHandler(this.PrintPageEventHandler);
pd.Print();
}
不确定您如何确定要打印哪个 image
,但您也需要在这个循环中执行此操作,可能在最终的 Print()
之前,因为这将触发事件处理程序。可能您需要两个 collection 的 'images',完整的 collection 图片,以及为每个页面填充的 collection,因此您将填充第二个collection 在上面的循环中,PrintPage EV 将从 collection.
哦,现在 HasMorePages 将始终为 false。
我得到了类似于@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 份文档被发送到打印机而不会崩溃,我的客户将自行监控打印机在崩溃之前可以接受多少文档看看我是否需要实施限制以防止一次发送太多文档。
感谢所有提出不同解决方案的人。