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

Ali*_*Net 5 c# printing print-preview winforms

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

PrintDocument doc = new PrintDocument();
doc.PrintPage += doc_PrintPage;
doc.Print();
printPreviewDialog1.Document = doc;
printPreviewDialog1.ShowDialog();
Run Code Online (Sandbox Code Playgroud)

这是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);
Run Code Online (Sandbox Code Playgroud)

doc.print()函数被调用时,微软的OneNote程序打开,显示我的印刷形式,并且还PrintPreviewDialog控制打开包含我的预览的新形式。

我将进行静默打印,这样就不会打开任何打印机程序(例如设置为默认打印机的OneNote)或没有打开物理打印机(我认为如果我的用户连接了物理打印机,则该页面实际上会被打印!完全不是我想要的)。我只想显示打印预览而不进行任何打印,是否可以通过任何方式将文件打印到XPS(虚拟打印机文件?),或者可以通过其他任何方式都不执行实际打印?

Pet*_*hie 2

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

更新:

在我的脑海中,类似下面的东西可能会起作用:

PrinterSettings printerSettings = new PrinterSettings();
printerSettings.PrinterName = "Microsoft XPS Document Writer";
doc.PrinterSettings = printerSettings;
Run Code Online (Sandbox Code Playgroud)

您可能需要尝试各种设置才能获得您想要的效果。