如何设置默认打印机

8

如何将PrintDocument.PrinterSettings.PrinterName设置为默认打印机?

我不是在谈论如何在操作系统中设置默认打印机,而是在谈论如何设置PrintDocument对象以便它可以打印到默认打印机。


可能是重复的问题:如何在C#中设置Windows默认打印机? - Doc Brown
2
@Doc Brown:我不认为这是重复的。你链接的问题是关于设置整个操作系统的默认打印机。这个问题 似乎 是关于将应用程序设置为打印到系统的默认打印机。@Craig:你能说一下你实际在问什么吗? - Cody Gray
@Cody:我不喜欢那些让我猜测提问者意图的问题。 - Doc Brown
@文档:同意,但那是另一种关闭选项。;-) - Cody Gray
@Matt:Matt,没有人告诉我如何将PrintDocument对象设置回默认打印机,所以我无法回答。我不想创建一个新的PrintDocument对象。 - CJ7
显示剩余3条评论
6个回答

13
如果我理解正确,你想要能够重置打印机名称为默认打印机(1)而不重新创建PrintDocument 并且(2) 在可能已经将其设置为其他内容后或者(3) 当默认打印机自创建PrintDocument以来可能已更改时(所以不能仅依赖于初始构造后目标实例提供的默认值进行缓存)
在这种情况下,搜索"C#获取默认打印机名称"会显示stackoverflow上的以下精彩帖子: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对象。 - CJ7
@Craigj,我非常明确地表明我不是在创建另一个PrintDocument对象。这就是为什么我将其命名为“existingPrintDocumentInstance”,请用您现有的PrintDocument实例替换它。 - BenSwayne
@CraigJ 你是否重新检查了所提供的答案?你的评论表明你并没有完全理解我代码示例中发生的事情。如果这不能满足你的需求,你需要编辑并进一步澄清你的要求。 - BenSwayne

5

它会自动初始化为默认打印机。不需要进行任何操作。


2
如果您将它设置为另一台打印机,然后想要切回默认打印机呢? - Craig Johnston
无论如何,它仍会初始化为默认打印机。使用PrintDialog选择打印机。 - Hans Passant
2
这并没有回答问题。 - Craig Johnston
2
我想知道如何将PrintDocument.PrinterSettings.PrinterName设置回默认打印机。 - Craig Johnston

2
GetDefaultPrinter() 

{ PrinterSettings settings = new PrinterSettings(); 

foreach (string printer in PrinterSettings.InstalledPrinters) 

{ settings.PrinterName = printer; 

if (settings.IsDefaultPrinter) 

return printer; 

} 

return string.Empty; 

}

我曾使用类似以下代码来查找默认打印机的名称,但后来在MSDN文档中发现了这样一句话:“当您将PrinterName属性显式设置为null以外的字符串值时,IsDefaultPrinter始终返回false。” 因此,尽管它现在似乎也能正常工作,但上述代码很快就会变得不正确。 - Peter

0

如果我错了,请纠正我,但您想要获取默认打印机的名称,然后将PrintDocument.PrinterSettings.PrinterName设置为此名称。

当您使用PrintDocument.PrinterSettings.PrinterName时,默认情况下会使用默认打印机。


PrintDocument.PrinterSettings.PrinterName可以在程序中更改。如何将其设置回默认打印机? - CJ7
一种方法是创建下面显示的方法并调用它。使用System.Drawing.Printing; string GetDefaultPrinter() { PrinterSettings settings = new PrinterSettings(); foreach (string printer in PrinterSettings.InstalledPrinters) { settings.PrinterName = printer; if (settings.IsDefaultPrinter) return printer; } return string.Empty; } - Nollaig
@Marijn - 这条评论是给谁的? - Nollaig
@CraigJ - 最有效的选项是使用PrinterSettings获取默认打印机名称。如果您不想这样做,还可以在创建PrintDocument时保存默认打印机,并在需要时稍后使用它。 - Nollaig
@nollaig 那条评论是给你的 :) - Marijn

0

如果您在对象上没有设置任何内容,那么默认情况下您将会落在默认打印机上。这是您正在寻找的官方来源:MSDN 链接到 PrintDocument 类

请注意上面示例中写的句子:"以下代码示例将文件 C:\My Documents\MyFile.txt 打印在默认打印机上。"

希望对您有所帮助。


如果我更改打印机为其他设备,那么如何将其设置回默认打印机? - CJ7
我觉得你可能对默认打印机产生了混淆。只有操作系统可以控制你的默认打印机(可以在“控制面板->打印机设置”中查看)。即使在打印文档时切换打印机,你实际上并没有更改默认打印机。因此,下次你需要打印文档时,仍然会使用默认打印机进行打印。 - Rahul
如果您需要将文档发送到特定的打印机(这是一个糟糕的设计决策),您可以循环遍历已安装的打印机并保存要用于打印的打印机对象。 - Rahul

0

我假设您已在操作系统层面上设置了默认打印机。当您从代码中发起打印时,默认情况下会将其发送到默认打印机。您不必显式地进行设置。

对于每个打印请求,都会发生这种情况。也就是说,如果您已将打印设置为另一个打印机,现在想要返回默认打印机,只需删除显式设置即可,它将再次回到默认打印机。

希望对您有所帮助。


你能解释一下“只需删除显式设置”吗? - Craig Johnston
我的意思是不要明确设置它...重新创建一个新的PrintDocument,不要在其中设置设置... - sajoshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接