You need to enable JavaScript to run this app. WPF中RichTextBox使用PrintDocument打印出现意外换行如何解决
优惠活动
大模型
产品
解决方案
定价
更多

WPF中RichTextBox使用PrintDocument打印出现意外换行如何解决

问题原因

方法2使用PrintDocument调用FlowDocument的自带分页器打印时,默认没有适配打印页面的可打印区域参数,RichTextBox关联的FlowDocument会沿用界面显示时的页面宽度、边距配置,和实际打印页面宽度不匹配,就会出现提前换行的异常。

方法1的PrintVisual是直接打印RichTextBox当前渲染的视觉元素,和屏幕显示效果完全一致,因此不会出现多余换行,但该方法无法支持长内容自动分页,且打印分辨率受限于屏幕分辨率,清晰度低于文档打印方案。

修复方案

修改方法2的代码,打印前临时将FlowDocument的页面参数和打印页面参数对齐,打印完成后可还原原有参数避免影响界面显示:

private void PrintCommand2(Object sender, RoutedEventArgs args)
{
    PrintDialog pd = new PrintDialog();
    if (pd.ShowDialog() == true)
    {
        var doc = richTB.Document as FlowDocument;
        // 保存原有配置,避免打印后影响界面显示
        var originalPageWidth = doc.PageWidth;
        var originalPagePadding = doc.PagePadding;

        // 将文档页面宽度设置为打印区域实际宽度,可根据需求调整边距避免额外换行
        doc.PageWidth = pd.PrintableAreaWidth;
        doc.PagePadding = new Thickness(20); // 按需调整边距数值,不需要边距可设为0

        // 执行打印
        pd.PrintDocument(((IDocumentPaginatorSource)doc).DocumentPaginator, "printing as paginator");

        // 还原原有配置
        doc.PageWidth = originalPageWidth;
        doc.PagePadding = originalPagePadding;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 16:06:05