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

基于WPF实现打印机连接与打印功能

一、项目配置

  1. 创建WPF项目

    dotnet new wpf -n WpfPrinterDemo
    cd WpfPrinterDemo
    
  2. 添加必要引用

    • System.Printing(用于打印机管理)
    • System.Windows.Controls(界面控件)

二、界面设计 (MainWindow.xaml)

<Window x:Class="WpfPrinterDemo.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="打印机Demo" Height="450" Width="800"><Grid><!-- 打印预览区域 --><ScrollViewer VerticalScrollBarVisibility="Auto" Margin="10"><FlowDocument x:Name="PrintDocument" PagePadding="20"FontFamily="Arial"FontSize="14"><Paragraph><Run Text="WPF打印机测试文档"/><LineBreak/><Bold>当前时间:</Bold><TextBlock Text="{Binding Source={x:Static sys:DateTime.Now}, StringFormat='yyyy-MM-dd HH:mm:ss'}"/></Paragraph></FlowDocument></ScrollViewer><!-- 控制按钮 --><StackPanel VerticalAlignment="Bottom" HorizontalAlignment="Center" Orientation="Horizontal" Margin="10"><Button Content="打印预览" Width="120" Margin="5" Click="PreviewPrint"/><Button Content="直接打印" Width="120" Margin="5" Click="DirectPrint"/><Button Content="选择打印机" Width="120" Margin="5" Click="SelectPrinter"/></StackPanel></Grid>
</Window>

三、核心代码实现 (MainWindow.xaml.cs)

using System;
using System.Printing;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;namespace WpfPrinterDemo
{public partial class MainWindow : Window{private PrintDialog _printDialog;private PrintQueue _selectedPrinter;public MainWindow(){InitializeComponent();InitializePrinter();}// 初始化打印机连接private void InitializePrinter(){_printDialog = new PrintDialog();_printDialog.PrintTicket.PageOrientation = PageOrientation.Portrait;_printDialog.PrintTicket.PageMediaSize = PageMediaSize.A4;}// 打印预览private void PreviewPrint(object sender, RoutedEventArgs e){if (_printDialog.ShowDialog() == true){_printDialog.PrintDocument(PrintDocument.DocumentPaginator, "WPF打印预览");}}// 直接打印private void DirectPrint(object sender, RoutedEventArgs e){try{if (_selectedPrinter == null)throw new Exception("请先选择打印机");var writer = PrintQueue.CreateXpsDocumentWriter(_selectedPrinter);writer.Write(PrintDocument);MessageBox.Show("打印任务已发送");}catch (Exception ex){MessageBox.Show($"打印失败: {ex.Message}");}}// 选择打印机private void SelectPrinter(object sender, RoutedEventArgs e){var printServer = new PrintServer();var printers = printServer.GetPrintQueues();var dialog = new PrintDialog();dialog.PrintQueue = printers.FirstOrDefault(p => p.Name.Contains("HP LaserJet")); // 示例选择HP打印机_selectedPrinter = dialog.PrintQueue;}}
}

四、关键功能说明

1. 打印设置配置

// 设置打印参数
_printDialog.PrintTicket.PageOrientation = PageOrientation.Landscape; // 横向打印
_printDialog.PrintTicket.PageMediaSize = PageMediaSize.A5; // 纸张尺寸
_printDialog.PrintTicket.CopyCount = 2; // 打印份数

2. 打印内容生成

// 动态添加内容
var paragraph = new Paragraph();
paragraph.Inlines.Add(new Run("动态添加的文本内容"));
PrintDocument.Blocks.Add(paragraph);

3. 打印机管理

// 获取所有打印机
var printers = new PrintServer().GetPrintQueues();// 筛选特定打印机
var targetPrinter = printers.FirstOrDefault(p => p.Name.Contains("Zebra"));

参考代码 wpf连接打印机实例demo www.youwenfan.com/contentcnj/59183.html

五、高级功能扩展

1. 打印预览增强

// 添加页眉页脚
PrintDocument.Header = new HeaderFooter {HeaderTemplate = (DataTemplate)XamlReader.Load(@"<DataTemplate><TextBlock Text='机密文档' FontSize='16' HorizontalAlignment='Center'/></DataTemplate>")
};

2. 图像打印支持

// 添加图片到打印内容
var image = new Image {Source = new BitmapImage(new Uri("logo.png", UriKind.Relative)),Width = 200,Height = 100
};
PrintDocument.Blocks.Add(new Paragraph(image));

3. 打印队列监控

// 监听打印状态
var printJob = _selectedPrinter.AddJob("TestJob");
printJob.Start();
printJob.End();

六、部署注意事项

  1. 权限配置

    • 需要System.Printing程序集引用

    • App.manifest中添加:

      <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      
  2. 打印机驱动

    • 确保目标打印机已安装正确驱动
    • 测试环境推荐使用HP LaserJet系列
  3. 异常处理

    try
    {// 打印操作
    }
    catch (PrintSystemException ex)
    {Debug.WriteLine($"打印系统错误: {ex.Message}");
    }
    catch (IOException ex)
    {Debug.WriteLine($"I/O错误: {ex.Message}");
    }
    

七、测试用例

测试场景 预期结果
点击"打印预览" 弹出预览窗口显示正确内容
选择不存在打印机 弹出错误提示
连续打印10份 生成10个独立打印任务
打印特殊字符 正确显示Unicode字符

八、扩展应用场景

  1. 标签打印系统

    // Zebra打印机ZPL指令
    string zplCode = "^XA^FO50,50^A0N,25,25^FDHello World^FS^XZ";
    using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(zplCode)))
    {_selectedPrinter.AddJob("LabelJob", stream, true);
    }
    
  2. 多联单据打印

    // 设置多份副本
    _printDialog.PrintTicket.CopyCount = 3;
    _printDialog.PrintTicket.Duplexing = Duplexing.OneSided;
    
http://www.zskr.cn/news/28563.html

相关文章:

  • 2025 年最新推荐编织袋源头厂家排行榜:聚焦全自动智能节能设备,助力企业选对优质厂商工业 / 数控 / 重型 / 多功能 / 自动编织袋设备推荐
  • 2025 年货架源头厂家最新推荐排行榜:仓储 / 重型 / 阁楼 / 穿梭式等各类货架优质企业甄选
  • 2025年正规的广州智能洗碗机,广州洗碗机设备厂家最新推荐榜
  • 2025年可靠的立式明装风机盘管直销制造
  • 2025年10月江苏机械设备EAC认证公司全景解析报告,基于专业测评的技术、性能及市场优势深度分析
  • 2025年热门的镁制硅晶防火风管,漂珠硅晶防火风管实力源头
  • 2025/10/23
  • 2025 年树脂排水沟厂家最新权威排行榜:U 形 / 线性 / 成品等多类型产品全覆盖,最新推荐优质企业助采购无忧
  • 【备忘】ORACLE 数据表插入记录后返回(自增长)主键的值
  • SIAKAD STEKOM登录页面存储型XSS漏洞分析
  • 07.Python法拍网数据
  • 06.Python操作Excel自动化开发
  • 详细介绍:AKS论文阅读
  • UU 跑腿使用通义灵码实现 AI 原生应用架构升级全解析:行动指南
  • 权威调研榜单:搅拌灌装机厂家TOP3榜单好评深度解析
  • 2025 年最新弹力丝机生产厂家推荐榜单:全面盘点国内优质品牌,为纺织企业提供精准选型参考荣腾弹力丝机/普来得弹力丝机/高速弹力丝机公司推荐
  • 2025年10月国内仪器类检测厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析
  • 2025发电机/发电机组出租厂家推荐新疆泓浩机电,专业维修保养服务
  • 本地部署低代码构建平台 Langflow 并实现外部访问
  • 2025 年电动门实力厂家最新推荐排行榜:聚焦智能创新与多场景适配,精选优质品牌助力选购电动悬浮门/电动大门/电动平移门/小区电动门公司推荐
  • 2025年10月全息投影沙盘生产厂家全景解析报告,基于专业测评的技术、性能及市场优势深度分析
  • 编译Duckdb机器学习插件QuackML - 详解
  • 数字音频作曲软件-钢琴窗-网格数量计算公式
  • 2025 深圳营销策划品牌最新推荐榜单:深耕多行业全案服务,权威评选助企业精准合作食品加工 / 物流 / 新能源营销策划推广公司推荐
  • 攻壳机动队 动画电影12部合集
  • 合成孔径雷达(SAR)成像仿真
  • 超越“系统性沉默”:“AI元人文”构想下的价值范式转换与游戏化探索
  • 通信协议(Http,websocket)
  • 轻松掌握:用 Python 的 pdfminer 将 PDF 内容保存为 Word 文档 - 详解
  • CodeForces-1183F Topforces Strikes Back