private void ParseRtfString(string rtf) { Regex regex; if (rtf.StartsWith(@"{\rtf1")) { regex = new Regex(@"\\[a-z]+\s."); } else { regex = new Regex(@"."); } MatchCollection matchs = regex.Matches(rtf); m_rtfFormatList.Clear(); RtfFormat.count = 0; RtfFormat.regularcount = 0; foreach (Match match in matchs) { RtfFormat format = new RtfFormat(); string str = match.ToString(); int split = str.IndexOf(" "); if (split == -1) { format.prefix = str.Substring(0, split + 1); } else { format.prefix = str.Substring(0, split); } format.content = str.Substring(split + 1, str.Length - split - 1); if (format.prefix == RtfEncoding.RtfNoSuperSub || format.prefix == string.Empty) { RtfFormat.regularcount++; } RtfFormat.count++; m_rtfFormatList.Add(format); } }
private void CalcRtfDrawingInfo(ArrayList rtfformats, Size size) { //ÊÊÓ¦ÐÔµ÷Õû»æ»×ÖÌå,ÒÔʹͼÏñËõ·ÅÖÁÔ¤¶©´óС¡£ AdjustDrawEnv(size); //¼ÆËãÊ××Ö·û»æ»Î»Öà float startx = (size.Width - RtfFormat.CalcRtfDrawingLen(m_font, m_superSubFont)) / 2; float starty = (size.Height - m_font.Size) / 2; //¼ÆËã¸÷×Ö·ûµÄ»æ»ÐÅÏ¢ for (int index = 0; index < m_rtfFormatList.Count; index++) { RtfFormat format = (RtfFormat)m_rtfFormatList[index]; switch (format.prefix) { case RtfEncoding.RtfSuper: format.font = m_superSubFont; format.px = startx; format.py = starty; break; case RtfEncoding.RtfSub: format.font = m_superSubFont; format.px = startx; format.py = starty + (m_font.Size - m_superSubFont.Size) + DrawPlus; break; default: format.font = m_font; format.px = startx; format.py = starty; break; } m_rtfFormatList[index] = format; //¼ÆËãÏÂÒ»·ûºÅλÖà startx += format.font.Size - DrawPlus; } }