在WPF中,打印功能的实现可以通过多种方式达成,下面为你详细介绍几种常见的实现方法。
方法一:使用PrintDialog
进行打印
这种方法会弹出打印对话框,用户可以在对话框中设置打印参数。
实现思路
- 创建
PrintDialog
实例。 - 显示打印对话框,获取用户的打印设置。
- 若用户点击“确定”,则执行打印操作。
示例代码
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;namespace WpfPrintExample
{public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private void PrintButton_Click(object sender, RoutedEventArgs e){// 创建 PrintDialog 实例PrintDialog printDialog = new PrintDialog();// 显示打印对话框if (printDialog.ShowDialog() == true){// 创建 FixedDocument 用于存储要打印的内容FixedDocument fixedDoc = new FixedDocument();// 创建一个 FixedPage 作为打印页面FixedPage fixedPage = new FixedPage();// 创建一个 TextBlock 用于显示要打印的文本TextBlock textBlock = new TextBlock();textBlock.Text = "这是要打印的内容。";fixedPage.Children.Add(textBlock);// 创建一个 PageContent 并将 FixedPage 添加到其中PageContent pageContent = new PageContent();((IAddChild)pageContent).AddChild(fixedPage);// 将 PageContent 添加到 FixedDocument 中fixedDoc.Pages.Add(pageContent);// 执行打印操作printDialog.PrintDocument(fixedDoc.DocumentPaginator, "打印任务名称");}}}
}
<Window x:Class="WpfPrintExample.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="350" Width="525"><Grid><Button Content="打印" HorizontalAlignment="Left" Margin="222,162,0,0" VerticalAlignment="Top" Width="75" Click="PrintButton_Click"/></Grid>
</Window>
代码解释
- C#代码:
- 创建
PrintDialog
实例并显示对话框。 - 若用户点击“确定”,则创建
FixedDocument
和FixedPage
,将需要打印的内容添加到FixedPage
上。 - 最后调用
PrintDialog
的PrintDocument
方法执行打印操作。
- 创建
- XAML代码:
- 创建一个按钮,点击按钮时触发
PrintButton_Click
事件。
- 创建一个按钮,点击按钮时触发
方法二:无对话框直接打印
此方法无需弹出打印对话框,会直接使用默认打印机进行打印。
实现思路
- 获取默认打印机的
PrintQueue
。 - 创建
XpsDocumentWriter
并将文档内容写入。
示例代码
using System.Printing;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;namespace WpfPrintExample
{public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private void PrintWithoutDialogButton_Click(object sender, RoutedEventArgs e){// 获取本地打印服务器LocalPrintServer printServer = new LocalPrintServer();// 获取默认打印机的打印队列PrintQueue printQueue = printServer.DefaultPrintQueue;using (printQueue){// 创建 XpsDocumentWriter 用于写入打印内容XpsDocumentWriter writer = PrintQueue.CreateXpsDocumentWriter(printQueue);// 创建 FixedDocument 用于存储要打印的内容FixedDocument fixedDoc = new FixedDocument();// 创建一个 FixedPage 作为打印页面FixedPage fixedPage = new FixedPage();// 创建一个 TextBlock 用于显示要打印的文本TextBlock textBlock = new TextBlock();textBlock.Text = "这是要打印的内容。";fixedPage.Children.Add(textBlock);// 创建一个 PageContent 并将 FixedPage 添加到其中PageContent pageContent = new PageContent();((IAddChild)pageContent).AddChild(fixedPage);// 将 PageContent 添加到 FixedDocument 中fixedDoc.Pages.Add(pageContent);// 执行打印操作writer.Write(fixedDoc);}}}
}
<Window x:Class="WpfPrintExample.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="MainWindow" Height="350" Width="525"><Grid><Button Content="无对话框打印" HorizontalAlignment="Left" Margin="222,200,0,0" VerticalAlignment="Top" Width="120" Click="PrintWithoutDialogButton_Click"/></Grid>
</Window>
代码解释
- C#代码:
- 获取本地打印服务器和默认打印机的
PrintQueue
。 - 创建
XpsDocumentWriter
,将文档内容写入其中进行打印。
- 获取本地打印服务器和默认打印机的
- XAML代码:
- 创建一个按钮,点击按钮时触发
PrintWithoutDialogButton_Click
事件。
- 创建一个按钮,点击按钮时触发
以上两种方法可以满足不同场景下的打印需求,你可以根据实际情况进行选择。