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
相关产品推荐
相关产品推荐

