You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinForm转WPF时遇PrintDocument未找到错误,求按钮打印字符串方案

嘿,这个问题我太熟了!你遇到的The type or namespace name 'PrintDocument' could not be found错误,本质是因为PrintDocument是Windows Forms专属的打印组件,WPF有一套完全独立的打印系统,压根没包含这个类,所以编译器找不到它。

下面我直接给你解决方法——实现按钮点击打印一段字符串的完整方案,分步骤来:

1. 先搞懂WPF的打印逻辑

WPF的打印核心是基于文档对象(比如FlowDocument)和PrintDialog控件:

  • PrintDialog:负责弹出系统打印对话框,让用户选择打印机、设置参数
  • FlowDocument:用来编排要打印的内容,支持文本格式、换行、边距等设置
2. 完整代码实现

第一步:XAML里加打印按钮

先在你的WPF窗口XAML中添加一个按钮,绑定点击事件:

<Window x:Class="YourProjectName.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="打印测试" Height="200" Width="300">
    <Grid>
        <Button Content="打印字符串" Click="PrintBtn_Click" 
                HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Grid>
</Window>

第二步:后台C#代码实现打印逻辑

在窗口的后台代码里写PrintBtn_Click事件处理方法,这是核心:

using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;

namespace YourProjectName
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void PrintBtn_Click(object sender, RoutedEventArgs e)
        {
            // 你要打印的字符串内容
            string contentToPrint = "这是我要打印的测试文本!\n第二行内容\n第三行自定义内容";

            // 创建WPF流式文档,用来承载打印内容
            FlowDocument printDoc = new FlowDocument();
            // 设置页面尺寸(8.5x11英寸,96是WPF默认DPI)
            printDoc.PageWidth = 8.5 * 96;
            printDoc.PageHeight = 11 * 96;
            // 设置页边距
            printDoc.PagePadding = new Thickness(60);

            // 将字符串添加到文档中,还可以设置字体、字号
            Paragraph printPara = new Paragraph(new Run(contentToPrint))
            {
                FontSize = 14,
                LineHeight = 1.5,
                FontFamily = new System.Windows.Media.FontFamily("微软雅黑")
            };
            printDoc.Blocks.Add(printPara);

            // 弹出打印对话框
            PrintDialog printDialog = new PrintDialog();
            // 如果用户点击了"打印"按钮
            if (printDialog.ShowDialog() == true)
            {
                // 执行打印操作,第二个参数是打印任务的名称(会显示在打印机队列里)
                printDialog.PrintDocument(((IDocumentPaginatorSource)printDoc).DocumentPaginator, "WPF打印任务");
            }
        }
    }
}
3. 额外说明
  • 不需要额外添加任何程序集引用,这些类(PrintDialog、FlowDocument)都是WPF核心库自带的,默认项目已经包含
  • 如果不需要复杂格式,也可以简化代码,但用FlowDocument的方式最灵活,后续要加格式(比如加粗、换行)也很方便
  • 测试的时候记得确保你的电脑有可用的打印机(虚拟打印机也行)

内容的提问来源于stack exchange,提问作者lewis4u

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:34:32