如何解决WPF RichTexBox 打印正在创建意外的换行符
在我的 WPF 应用程序的 RichTextBox
中,以下打印方法会产生意外的换行符。 问题:我在这里可能遗漏了什么,我们如何解决这个问题?
例如,当我在 RichTextBox (RTB) 中输入以下文本时,RTB 看起来如图 1 所示。但是当我调用以下两个打印方法时,第一个不会创建意外的换行符,但是第二种方法确实会产生意外的换行符:
MainWindow.xaml
<StackPanel>
<RichTextBox Name="richTB" />
<Button Click="PrintCommand1">Print RTB Content</Button>
<Button Click="PrintCommand2">Print RTB Content</Button>
</StackPanel>
方法一
private void PrintCommand1(Object sender,RoutedEventArgs args)
{
PrintDialog pd = new PrintDialog();
if ((pd.ShowDialog() == true))
{
pd.PrintVisual(richTB as Visual,"printing as visual");
}
}
方法二
private void PrintCommand2(Object sender,RoutedEventArgs args)
{
PrintDialog pd = new PrintDialog();
if ((pd.ShowDialog() == true))
{
pd.PrintDocument((((IDocumentPaginatorSource)richTB.Document).DocumentPaginator),"printing as paginator");
}
}
我输入的文字 [注意:只有一个换行符]
This is a test for testing purpose only. Another test: x6. Let us do some background and foreground colors.
This is a new line with formatting,as well.
带有上述文本的 RichTexBox 的快照
使用方法 1 的“打印到 PDF”(在 Windows 10 上)的快照 [正确打印并有一个真正的换行符]
使用方法 2 的“打印到 PDF”(在 Windows 10 上)的快照 [打印错误并出现意外换行]
解决方法
由于 DocumentPaginator
类采用 FlowDocument
的上下文并将其拆分为多个页面以获得所需的结果,因此应在打印前配置一些 FlowDocument
参数:
private void PrintCommand2(Object sender,RoutedEventArgs args)
{
var pd = new PrintDialog();
if (pd.ShowDialog() == true)
{
FlowDocument doc = richTB.Document;
// Save all settings that will be configured for printing.
double pageHeight = doc.PageHeight;
double pageWidth = doc.PageWidth;
double columnGap = doc.ColumnGap;
double columnWidth = doc.ColumnWidth;
// Make the FlowDocument page match the printed page.
doc.PageHeight = pd.PrintableAreaHeight;
doc.PageWidth = pd.PrintableAreaWidth;
doc.ColumnGap = 5;
// Set the minimum desired width of the column in the System.Windows.Documents.FlowDocument.
doc.ColumnWidth = doc.PageWidth - doc.ColumnGap - doc.PagePadding.Left - doc.PagePadding.Right;
pd.PrintDocument(((IDocumentPaginatorSource)doc).DocumentPaginator,"A Flow Document");
// Reapply the old settings.
doc.PageHeight = pageHeight;
doc.PageWidth = pageWidth;
doc.ColumnGap = columnGap;
doc.ColumnWidth = columnWidth;
}
}
关于 Matthew MacDonald 这种流式文档内容打印方式和他的书中描述的更高级技术Pro WPF 4.5 in C# Windows Presentation Foundation in .NET 4.5 (第 29 章)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。