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

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

相关推荐
Java Fans5 小时前
在WPF项目中集成Python:Python.NET深度实战指南
python·.net·wpf
布伦鸽13 小时前
C# WPF 左右布局实现学习笔记(1)
笔记·学习·c#·wpf
code bean2 天前
【WPF】WPF 项目实战:构建一个可增删、排序的光源类型管理界面(含源码)
wpf
沉到海底去吧Go2 天前
【图片识别改名】如何批量将图片按图片上文字重命名?自动批量识别图片文字并命名,基于图片文字内容改名,WPF和京东ocr识别的解决方案
ocr·wpf·图片识别改名·图片识别重命名·图片内容改名
lph19722 天前
自定义事件wpf
wpf
code bean2 天前
【WPF】从普通 ItemsControl 到支持筛选的 ItemsControl:深入掌握 CollectionViewSource 用法
wpf
碎碎念的安静2 天前
WPF可拖拽ListView
c#·wpf
界面开发小八哥3 天前
界面组件DevExpress WPF中文教程:Grid - 如何识别行和卡片?
.net·wpf·界面控件·devexpress·ui开发
TwilightLemon4 天前
WPF 使用CompositionTarget.Rendering实现平滑流畅滚动的ScrollViewer,支持滚轮、触控板、触摸屏和笔
wpf
Vae_Mars6 天前
WPF中自定义消息弹窗
wpf