usingSystem;usingSystem.Collections.Generic;usingSystem.Globalization;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Documents;usingSystem.Windows.Media;namespacePrintTime
{///
///RichTextBox长度自动增长 扩展类///
public static classFlowDocumentExtensions
{private static IEnumerableGetRunsAndParagraphs(FlowDocument doc)
{for (TextPointer position =doc.ContentStart;
position!= null && position.CompareTo(doc.ContentEnd) <= 0;
position=position.GetNextContextPosition(LogicalDirection.Forward))
{if (position.GetPointerContext(LogicalDirection.Forward) ==TextPointerContext.ElementEnd)
{
Run run= position.Parent asRun;if (run != null)
{yield returnrun;
}else{
Paragraph para= position.Parent asParagraph;if (para != null)
{yield returnpara;
}
}
}
}
}public static FormattedText GetFormattedText(thisFlowDocument doc)
{if (doc == null)
{throw new ArgumentNullException("doc");
}//doc.PagePadding = new System.Windows.Thickness(0, 0, 0, 0);//设置文本的边距
FormattedText output = newFormattedText(
GetText(doc),
CultureInfo.CurrentCulture,
doc.FlowDirection,newTypeface(doc.FontFamily, doc.FontStyle, doc.FontWeight, doc.FontStretch),
doc.FontSize,
doc.Foreground);int offset = 0;foreach (TextElement el inGetRunsAndParagraphs(doc))
{
Run run= el asRun;if (run != null)
{int count =run.Text.Length;
output.SetFontFamily(run.FontFamily, offset, count);
output.SetFontStyle(run.FontStyle, offset, count);
output.SetFontWeight(run.FontWeight, offset, count);
output.SetFontSize(run.FontSize, offset, count);
output.SetForegroundBrush(run.Foreground, offset, count);
output.SetFontStretch(run.FontStretch, offset, count);
output.SetTextDecorations(run.TextDecorations, offset, count);
offset+=count;
}else{
offset+=Environment.NewLine.Length;
}
}returnoutput;
}private static stringGetText(FlowDocument doc)
{
StringBuilder sb= newStringBuilder();foreach (TextElement el inGetRunsAndParagraphs(doc))
{
Run run= el asRun;
sb.Append(run== null ?Environment.NewLine : run.Text);
}returnsb.ToString();
}
}
}