当前位置: 首页 > article >正文

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

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


http://www.kler.cn/a/517409.html

相关文章:

  • Kubernetes可视化界面
  • Kafka生产者ACK参数与同步复制
  • 浏览器hid 和蓝牙bluetooth技术区别
  • 【贪心算法】洛谷P1106 - 删数问题
  • Ubuntu Server连接wifi
  • 谈谈对JavaScript 中的事件冒泡(Event Bubbling)和事件捕获(Event Capturing)的理解
  • LPDDR4 precharge和selfresh 详解
  • .NET9增强OpenAPI规范,不再内置swagger
  • 经典卷积网络算法-VGG16
  • SpringAI基于Ollama调用通义千问
  • Web3 的核心理念:去中心化如何重塑互联网
  • 不只是mini-react第二节:实现最简fiber
  • 状态模式
  • OpenAI模块重构
  • 43 继承
  • 【统计的思想】假设检验(二)
  • 对神经网络基础的理解
  • MATLAB支持的概率分布
  • Hive 知识点八股文记录 ——(三)区别和原理
  • Unity自学之旅05
  • mysql-023.增删查改进阶-表的设计,查询进阶
  • (算法竞赛)DFS深搜4——迷宫第一条路问题解析与代码实现
  • 2025数学建模美赛|赛题评析|难度对比|选题建议
  • SpringBoot开发(二)Spring Boot项目构建、Bootstrap基础知识
  • Linux主机密钥验证失败的解决方法
  • YOLOv5训练自己的数据及rknn部署