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事件。

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

相关推荐
Wang's Blog13 小时前
AI Agent白手起家60: 多智能体架构解析与 LangGraph 入门
人工智能·架构·wpf
.Peter17 小时前
.NET/WPF 程序在部分 Windows 电脑无法保存用户环境变量:使用 DPAPI 实现安全兼容
windows·信息安全·c#·.net·wpf·环境变量·dpapi
dalong102 天前
WPF:3D型材模型
3d·wpf
一念春风2 天前
文件透明加密(C、C#)
c语言·c#·wpf
yanaiding3 天前
C# WPF 独立开发看图工具 PixSight 经验介绍(二)—— 水印模块开发实录
图像处理·c#·wpf·个人开发
我是苏苏6 天前
WPF开发01:基础控件及常用模板篇
开发语言·c#·html·wpf
dalong106 天前
WPF:3D顶点共享与法线设置对光照效果的影响
3d·wpf
柔蘭7 天前
WPF中的CommunityToolkit.Mvvm框架
wpf
aGdF8E3gQ8 天前
【Application Insights】采样率对Function App日志收集的影响和解决方法
python·flask·wpf
程序员-Benothing8 天前
如何实现高并发系统订单30分钟自动关闭?
开发语言·c#·wpf