同步 pdf 打印和标准打印
本文关键字:打印 标准 同步 pdf | 更新日期: 2023-09-27 18:01:00
我需要打印一个PDF文件,一个标准打印,一个标准打印,其他PDF文件,其他标准打印,等等。但是,当我发送到打印机时,纸张是混合的。
我希望:
PDF
PrintPage
PDF
PrintPage
PDF
PrintPage
但是,我得到了(例如(:
PDF
PDF
PrintPage
PrintPage
PrintPage
PDF
我使用以下代码来实现任务:
while( ... ) {
ProcessStartInfo starter = new ProcessStartInfo("path to acrobt32.exe", "/t mypdf001.pdf");
starter.CreateNoWindow = true;
starter.RedirectStandardOutput = true;
starter.UseShellExecute = false;
Process process = new Process();
process.StartInfo = starter;
process.Start();
PrintDocument pd = new PrintDocument();
pd.DocumentName = "Work";
pd.PrintPage += new PrintPageEventHandler(pd_PrintPageHandler);
pd.Print();
}
欢迎任何帮助。谢谢。
我无法从这个小示例中完全理解这个问题,但我的猜测是pd.Print()
方法是异步的。
您希望使打印同步。最好的方法是将代码包装在一个函数中,并从我假设在打印页面时调用的pd_PrintPageHandler
调用该函数。
一个简单的例子来说明我的意思,
function printPage(pdfFilePath)
{
ProcessStartInfo starter = new ProcessStartInfo("path to acrobt32.exe", pdfFilePath);
starter.CreateNoWindow = true;
starter.RedirectStandardOutput = true;
starter.UseShellExecute = false;
Process process = new Process();
process.StartInfo = starter;
process.Start();
PrintDocument pd = new PrintDocument();
pd.DocumentName = "Work";
pd.PrintPage += new PrintPageEventHandler(pd_PrintPageHandler);
pd.Print();
}
在 pd_PrintPageHandler
方法中,使用下一个 PDF 文件调用此printPage
函数。
ProcessStartInfo 异步运行。 因此,您启动了 1 个或多个 acrobat32 前任,每个前任都需要时间来加载和运行其打印功能。 与此同时,您的 PrintDocument 类正在运行它自己的一组打印过程...... 因此,所有文档都以不可预测的顺序显示。
看到这个:异步进程启动并等待它完成
和这个: http://blogs.msdn.com/b/csharpfaq/archive/2004/06/01/146375.aspx
你需要开始杂技演员,等待它完成。 然后启动您的打印文档(无论那是什么(并等待它完成。 冲洗并重复。
打印文档看起来也是异步的...由于事件处理程序调用,但这很难确定。
由于您使用的是外部进程来打印 PDF,因此等待该进程退出以保持打印操作同步可能会有所帮助。
即在调用异步之后:
process.Start();
添加对process.WaitForExit();
的调用以保持事情按顺序运行。
您可能确实需要对 PrintDocument 执行相同的操作。 在这种情况下,您应该能够只阻止线程,直到触发 OnEndPrint 事件:例