【问题标题】:Programmatically print to a virtual printer (XPS)以编程方式打印到虚拟打印机 (XPS)
【发布时间】:2013-04-29 11:56:33
【问题描述】:

我将使用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() 函数时,Microsoft OneNote 程序会打开并显示我的打印表单,同时PrintPreviewDialog 控件会打开一个包含我的预览的新表单。

我将进行静默打印,因此不会打开任何打印机程序(例如设置为我的默认打印机的 OneNote)或没有打开物理打印机(我认为如果我的用户连接了物理打印机,页面将实际打印出来!这正是我想要的)。我只想显示打印预览而不进行任何打印,有什么方法可以打印到 XPS(虚拟打印机文件?)或任何其他不执行实际打印的方式?

【问题讨论】:

  • 好吧,我已经测试过了,但是当我删除 doc.print 时,这意味着什么都没有打印,所以没有预览可用,是吗?如何显示我的预览?

标签: c# winforms printing print-preview


【解决方案1】:

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

更新:

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

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

您可能必须尝试各种设置才能得到您想要的。

【讨论】:

    【解决方案2】:

    我无法添加 cmets,因此是一个答案。 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();
    

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

    不过,如果您想创建一个不带打印按钮的打印预览对话框,请查看此主题Disabling "print" button in .net print preview dialog

    这是你要找的吗?

    【讨论】:

    • 这仅在当前选择 XPS 打印机时才有效
    猜你喜欢
    • 2017-12-31
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 2012-11-01
    • 2021-02-11
    • 2014-05-07
    相关资源
    最近更新 更多