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.rhkb.cn/news/6588.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】预处理详解

他们想要逃避工作的压迫&#xff0c;却又被功绩社会深植的价值观绑架。 预定义符号 1. C语言设置了⼀些预定义符号&#xff0c;可以直接使用&#xff0c;预定义符号也是在预处理期间处理的。 1 __FILE__ //进⾏编译的源⽂件 2 __LINE__ //⽂件当前的⾏号 3 __DATE__ //⽂件被编…

探秘差分数组:算法星河中闪耀的区间掌控之星

本篇鸡汤&#xff1a;夜深人静&#xff0c;正是你追梦的时刻。熬过这段孤独&#xff0c;未来会因你而闪亮&#xff01; 探索新知&#xff0c;点亮智慧&#xff01;关注我&#xff0c;一起成长&#xff0c;点赞收藏不迷路&#xff01; 欢迎拜访&…

Ubuntu环境 nginx 源码 编译安装

ubuntu 终端 使用 wget 下载源码 sudo wget http://nginx.org/download/nginx-1.24.0.tar.gz解压刚下载的源码压缩包 nginx-1.24.0.tar.gz sudo tar -zxvf nginx-1.24.0.tar.gz 解压完成 产生 nginx-1.24.0 目录 进入该目录 cd ./nginx-1.24.0 目录下有一个可执行文件 con…

linux如何修改密码,要在CentOS 7系统中修改密码

要在CentOS 7系统中修改密码&#xff0c;你可以按照以下步骤操作&#xff1a; 步骤 1: 登录到系统 在登录提示符 localhost login: 后输入你的用户名。输入密码并按回车键。 步骤 2: 修改密码 登录后&#xff0c;使用 passwd 命令来修改密码&#xff1a; passwd 系统会提…

C# volatile 使用详解

总目录 前言 在多线程编程中&#xff0c;确保线程之间的正确同步和可见性是一个关键挑战。C# 提供了多种机制来处理这些挑战&#xff0c;其中之一就是 volatile 关键字。它用于指示编译器和运行时环境不要对特定变量进行某些优化&#xff0c;以保证该变量的读写操作是线程安全…

[Unity 热更方案] 使用Addressable进行打包管理, 使用AssetBundle进行包的加载管理.70%跟练

在正常的开发过程中我们经常遇到一些关于热更的方案,有一些已有的方案供我们选择,但是实机情况往往不尽如人意,各有优缺点. 现在我们同样有一个热更的需求,但是要求打包简单,加载过程可查,防止出现一些资源和流程的问题. 下面介绍我在项目中使用的方案. 打包方面使用Addressabl…

Flink运行时架构

一、系统架构 1&#xff09;作业管理器&#xff08;JobManager&#xff09; JobManager是一个Flink集群中任务管理和调度的核心&#xff0c;是控制应用执行的主进程。也就是说&#xff0c;每个应用都应该被唯一的JobManager所控制执行。 JobManger又包含3个不同的组件。 &am…

在 Windows 11 中为 SMB 3.x 文件共享协议提供 RDMA 支持

注&#xff1a;机翻&#xff0c;未校。 Enable SMB Direct in Windows 11 在 Windows 11 中启用 SMB Direct Provides RDMA support for the SMB 3.x file sharing protocol 为 SMB 3.x 文件共享协议提供 RDMA 支持 Vigneshwaran Vijayakumar November 3, 2024 Last Updat…

用AI生成PPT,办公效率提升新方式

用AI生成PPT&#xff0c;办公效率提升新方式&#xff01;在快节奏的时代&#xff0c;如何优雅应对高效办公的挑战&#xff1f; 或许你也有这样的经历&#xff1a;开会前临时被要求制作PPT&#xff0c;一阵头大&#xff0c;却只能硬着头皮上。科技的发展为我们带来了更智能的解…

单片机-STM32 IIC通信(OLED屏幕)(十一)

一、屏幕的分类 1、LED屏幕&#xff1a; 由无数个发光的LED灯珠按照一定的顺序排列而成&#xff0c;当需要显示内容的时候&#xff0c;点亮相关的LED灯即可&#xff0c;市场占有率很高&#xff0c;主要是用于户外&#xff0c;广告屏幕&#xff0c;成本低。 LED屏是一种用发光…

ASP.NET Core 6.0 如何处理丢失的 Startup.cs 文件

介绍 .NET 6.0 已经发布&#xff0c;ASP.NET Core 6.0 也已发布。其中有不少变化让很多人感到困惑。例如&#xff0c;“谁动了我的奶酪”&#xff0c;它在哪里Startup.cs&#xff1f;在这篇文章中&#xff0c;我将深入研究这个问题&#xff0c;看看它移动到了哪里以及其他变化。…

【嵌入式开发】stm32 st-link 烧录

使用 ST-Link 烧录 STM32 的程序可以通过多种工具实现&#xff0c;例如 STM32CubeProgrammer、Keil、IAR、以及 OpenOCD。以下是通用的步骤说明&#xff1a; 准备工作 硬件准备 确保 ST-Link 调试器与 STM32 芯片引脚正确连接&#xff1a; SWDIO (SWD 数据线) 接至 STM32 的 SW…

仿 RabbitMQ 的消息队列3(实战项目)

七. 消息存储设计 上一篇博客已经将消息统计文件的读写代码实现了&#xff0c;下一步我们将实现创建队列文件和目录。 实现创建队列文件和目录 初始化 0\t0 这样的初始值. //创建队列对应的文件和目录&#xff1a;public void createQueueFile(String queueName) throws IO…

【STM32HAL-----GPIO】

1. 什么是GPIO&#xff1f;&#xff08;了解&#xff09; 2. STM32 GPIO简介 2.1. GPIO特点 2.2. GPIO电气特性 2.3. GPIO引脚分布图 IO引脚分布特点&#xff1a;按组存在、组数视芯片而定、每组最多16个IO引脚。 3. IO端口基本结构介绍 4. GPIO八种工作模式 4.1. 输入浮空 特…

Midjourney基础-常用修饰词+权重的用法大全

用好修饰词很关键 Midjourney要用除了掌握好提示词的写法&#xff0c;按照上一篇《做Midjourney最好图文教程-提示词公式以及高级参数讲解》画面主体 场景氛围 主体行为 构图方式 艺术风格 图像质量。 要画出有质感的内容我们必须要掌握好“修饰词”&#xff0c;这些修饰…

二叉树和堆

树概念及结构&#xff08;了解&#xff09; 树的概念&#xff08;看看就行&#xff09; 树是一种 非线性 的数据结构&#xff0c;它是由 n &#xff08; n>0 &#xff09;个有限结点组成一个具有层次关系的集合。 把它叫做树是因 为它看起来像一棵倒挂的树&#xff0c;也就是…

C语言 指针_野指针 指针运算

野指针&#xff1a; 概念&#xff1a;野指针就是指针指向的位置是不可知的&#xff08;随机的、不正确的、没有明确限制的&#xff09; 指针非法访问&#xff1a; int main() {int* p;//p没有初始化&#xff0c;就意味着没有明确的指向//一个局部变量不初始化&#xff0c;放…

腾讯 Hunyuan3D-2: 高分辨率3D 资产生成

腾讯 Hunyuan3D-2&#xff1a;高分辨率 3D 资产生成的突破 前言 在当今数字化时代&#xff0c;3D 资产生成技术正变得越来越重要。无论是游戏开发、影视制作还是虚拟现实领域&#xff0c;高质量的 3D 模型和纹理都是创造沉浸式体验的关键。然而&#xff0c;传统的 3D 资产制作…

Java如何实现反转义

Java如何实现反转义 前提 最近做的一个需求&#xff0c;是热搜词增加换一批的功能。功能做完自测后&#xff0c;交给了测试伙伴&#xff0c;但是测试第二天后就提了一个bug&#xff0c;出现了未知词 levis。第一眼看着像公司售卖的一个品牌-李维斯。然后再扒前人写的代码&…

Java 高级工程师面试高频题:JVM+Redis+ 并发 + 算法 + 框架

前言 在过 2 个月即将进入 3 月了&#xff0c;然而面对今年的大环境而言&#xff0c;跳槽成功的难度比往年高了很多&#xff0c;很明显的感受就是&#xff1a;对于今年的 java 开发朋友跳槽面试&#xff0c;无论一面还是二面&#xff0c;都开始考验一个 Java 程序员的技术功底…