如何设置为默认打印机
Posted
技术标签:
【中文标题】如何设置为默认打印机【英文标题】:how to set to default printer 【发布时间】:2011-07-07 01:34:15 【问题描述】:如何将PrintDocument.PrinterSettings.PrinterName
设置为默认打印机?
我不是在谈论在操作系统中设置默认打印机。相反,我说的是设置 PrintDocument 对象,以便它打印到默认打印机。
【问题讨论】:
How do I set the windows default printer in C#? 的可能重复项 @Doc Brown:我不认为这是重复的。您链接到的问题是关于为整个操作系统设置默认打印机。这个问题似乎是关于将应用程序设置为打印到系统的默认打印机。 @Craig:仔细权衡一下你的实际要求? @Cody:我不喜欢必须猜测 OP 可能意味着什么的问题。 @Doc:同意,但这是一个不同的关闭选项。 ;-) @Craig - 我相信你的问题得到了回答? - 请酌情标记答案 【参考方案1】:如果我的理解正确,您希望能够在不重新创建 PrintDocument 的情况下将 PrinterName 重置为默认打印机(1) 并且, (2) 在您可能已经将其设置为其他内容之后 或, (3) 自首次创建 PrintDocument 以来默认打印机可能已更改 strong> (所以你不能简单地依赖缓存初始构造后目标实例提供的默认值)。
在这种情况下,搜索“C# 获取默认打印机名称”会在 *** 上找到以下出色的帖子:What's the best way to get the default printer in .NET
以投票最多的答案中提供的示例为基础,并考虑到您已经拥有一个预先存在的PrintDocument
,其中包含一些您不想重新创建的设置;您可以创建PrinterSettings
类的新实例,仅用于复制默认打印机名称。
// Create a new instance of the PrinterSettings class, which
// we will only use to fetch the default printer name
System.Drawing.Printing.PrinterSettings newSettings = new System.Drawing.Printing.PrinterSettings();
// Copy the default printer name from our newSettings instance into our
// pre-existing PrintDocument instance without recreating the
// PrintDocument or the PrintDocument's PrinterSettings classes.
existingPrintDocumentInstance.PrinterSettings.PrinterName = newSettings.PrinterName;
您可以查看链接的帖子以了解 WMI 等替代技术,但我认为这对您来说是最简单、最干净的解决方案。
【讨论】:
谢谢,但我正在寻求一个不需要创建新 PrintDocument 对象的解决方案。 @Craigj 我非常明确地表明我不创建另一个 PrintDocument 对象。这就是我将其命名为“existingPrintDocumentInstance”的原因,请将其替换为您现有的 PrintDocument 实例。 @CraigJ 您是否重新检查了提供的答案?您的评论表明您不太了解我的代码示例中发生了什么。如果这不能满足您的需求,您需要编辑并进一步阐明您的要求。【参考方案2】:它会自动初始化为默认打印机。什么都不做。
【讨论】:
如果您将其设置为另一台打印机,然后又想回到默认打印机怎么办? 没关系,它仍然初始化为默认打印机。使用 PrintDialog 选择打印机。 这不能回答问题。 我想知道如何将 PrintDocument.PrinterSettings.PrinterName 设置回默认打印机。【参考方案3】:GetDefaultPrinter()
PrinterSettings settings = new PrinterSettings();
foreach (string printer in PrinterSettings.InstalledPrinters)
settings.PrinterName = printer;
if (settings.IsDefaultPrinter)
return printer;
return string.Empty;
【讨论】:
我使用类似这样的方法来查找默认打印机的名称,但后来我在 MSDN 文档中发现了这个注释:“当您将 PrinterName 属性显式设置为字符串值 other 时,IsDefaultPrinter 总是返回 false比零。”所以看起来上面的代码很快就会变得不正确,尽管它现在似乎也可以工作。【参考方案4】:我假设您已经在操作系统级别设置了默认打印机。当您从代码启动打印时,它默认转到默认打印机。您不必显式设置它。
每个打印请求都会发生这种情况。我的意思是,如果您已将打印设置为另一台打印机,现在您想使用默认打印机,只需删除显式设置,它将再次使用默认打印机。
HTH
【讨论】:
你能解释一下“只删除显式设置”吗? 我的意思是不要明确设置它..重新创建一个新的 PrintDocument 并且不要在那里设置设置...【参考方案5】:如果我错了,请纠正我,但您希望获取默认打印机的名称,然后将 PrintDocument.PrinterSettings.PrinterName
设置为此。
当您使用PrintDocument.PrinterSettings.PrinterName
时,默认使用默认打印机。
【讨论】:
PrintDocument.PrinterSettings.PrinterName 可以在程序中更改。如何将其设置回默认打印机? 一种方法是创建如下所示的方法并调用它。使用 System.Drawing.Printing;字符串 GetDefaultPrinter() PrinterSettings settings = new PrinterSettings(); foreach(PrinterSettings.InstalledPrinters 中的字符串打印机) settings.PrinterName = 打印机; if (settings.IsDefaultPrinter) 返回打印机; 返回字符串。空; @Marijn - 谁的评论。 @CraigJ - 最有效的选择是使用 PrinterSettings 获取默认打印机名称。如果您不想这样做,您还可以在最初创建 PrintDocument 时保存默认打印机,并在以后需要时使用它。 @nollaig 那条评论是给你的 :)【参考方案6】:默认情况下,如果您没有在对象上设置任何内容,您将登陆默认打印机。这是您要查找的官方来源:MSDN Link to PrintDocument Class
标记示例上方写的句子:“以下代码示例在默认打印机上打印名为 C:\My Documents\MyFile.txt 的文件。”
HTH
【讨论】:
如果我把打印机换成别的东西怎么办。如何将其设置回默认打印机? 我认为您对什么是默认打印机感到困惑。只有操作系统控制您的默认打印机(您可以从控制面板 -> 打印机设置查看的打印机)。即使您在打印文档时切换打印机,您实际上也不会更改默认打印机。因此,下次您需要打印文档时,您将再次使用文档的默认打印机。 如果您需要将文档发送到非常特定的打印机(错误的设计决定)。您可以遍历 InstalledPrinters 并保存要用于打印的打印机对象。以上是关于如何设置为默认打印机的主要内容,如果未能解决你的问题,请参考以下文章