WPF 打印功能实现

在WPF中,打印功能的实现可以通过多种方式达成,下面为你详细介绍几种常见的实现方法。

方法一:使用PrintDialog进行打印

这种方法会弹出打印对话框,用户可以在对话框中设置打印参数。

实现思路
  1. 创建PrintDialog实例。
  2. 显示打印对话框,获取用户的打印设置。
  3. 若用户点击"确定",则执行打印操作。
示例代码
复制代码
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实例并显示对话框。
    • 若用户点击"确定",则创建FixedDocumentFixedPage,将需要打印的内容添加到FixedPage上。
    • 最后调用PrintDialogPrintDocument方法执行打印操作。
  • XAML代码
    • 创建一个按钮,点击按钮时触发PrintButton_Click事件。

方法二:无对话框直接打印

此方法无需弹出打印对话框,会直接使用默认打印机进行打印。

实现思路
  1. 获取默认打印机的PrintQueue
  2. 创建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事件。

以上两种方法可以满足不同场景下的打印需求,你可以根据实际情况进行选择。

相关推荐
Macbethad6 小时前
工业设备数据记录程序技术方案
wpf·信息与通信
zzyzxb19 小时前
WPF 中隧道事件和冒泡事件
wpf
闲人编程19 小时前
API限流、鉴权与监控
分布式·python·wpf·限流·集群·令牌·codecapsule
TA远方21 小时前
【WPF】桌面程序使用谷歌浏览器内核CefSharp控件详解
wpf·浏览器·chromium·控件·cefsharp·cefsharp.wpf
Macbethad1 天前
工业设备数据采集主站程序技术方案
wpf
关关长语2 天前
HandyControl 3.5.x 版本 ListViewItem不显示问题
windows·wpf
Macbethad2 天前
工业设备维护程序技术方案
wpf
Macbethad2 天前
工业设备配方管理系统技术方案
wpf
喵叔哟2 天前
7.日志系统深入
wpf
清风徐来Groot2 天前
WPF布局之Grid
wpf