以编程方式打印到虚拟打印机(XPS)



我要用PrintDocument显示我的c# WinForms应用程序的一部分,它几乎完成了,但是我的打印机有一个问题。我使用以下代码来捕获我的表单图像,然后打印此图像,最后我使用PrintPreviewDialog来显示打印预览:

PrintDocument doc = new PrintDocument();
doc.PrintPage += doc_PrintPage;
doc.Print();
printPreviewDialog1.Document = doc;
printPreviewDialog1.ShowDialog();

,这是doc_PrintPage函数:

Bitmap bmp = new Bitmap(tabControl1.Width, tabControl1.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
tabControl1.DrawToBitmap(bmp, new Rectangle(0, 0, tabControl1.Width, tabControl1.Height));
e.Graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
e.Graphics.DrawImage((Image)bmp, 0, 0);

doc.print()函数被调用时,microsoftonenote程序打开并显示我打印的表单,PrintPreviewDialog控件也打开一个包含我预览的新表单。

我将有一个无声打印,所以没有打印机程序(像OneNote被设置为我的默认打印机)或没有物理打印机被打开(我认为如果我的用户有一个物理打印机附加,页面将被实际打印!这不是我想要的)。我只想显示打印预览而不进行任何打印,是否有任何方法可以打印到XPS(虚拟打印机文件?)或任何其他不执行实际打印的方法?

我不能添加评论,因此一个答案。如果你想确定的话,Peter Ritchie的建议是正确的,即打印输出不会在(虚拟)打印机中结束。

我已经检查了PrintPreviewDialog,这是我得到的工作:

PrintDocument doc = new PrintDocument();
doc.PrinterSettings.PrinterName = this.m_printingParameters.SelectedPrinterName;
doc.PrinterSettings.PrintFileName = Path.Combine(Path.GetTempPath(), "Temporary_result.xps");
doc.PrinterSettings.PrintToFile = true;
doc.PrintPage += doc_PrintPage;
PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog();
printPreviewDialog1.Document = doc;
printPreviewDialog1.ShowDialog();

如果用户点击打印图标,结果将被打印到放置在临时文件夹中的文件。只是为了确保你之后可以删除文件。

如果您想创建一个没有打印按钮的打印预览对话框,请选中此主题禁用"打印"。.net打印预览对话框中的按钮

这是你要找的吗?

您必须设置/更改PrintDocument.PrinterSettings以设置特定的打印机,否则Print将不知道需要特定的打印机,并提示用户确认默认打印机或选择另一个。

<标题>更新:

在我的脑海中,像下面这样的东西可能会奏效:

PrinterSettings printerSettings = new PrinterSettings();
printerSettings.PrinterName = "Microsoft XPS Document Writer";
doc.PrinterSettings = printerSettings;

你可能需要尝试不同的设置来得到你想要的。

相关内容

  • 没有找到相关文章

最新更新