說句老實話,我是個不大習慣寫博的主,而且本次寫博目的是想過來發個小廣告,哈哈,都是園子裡的兄弟不要拿磚頭扔我
園子裡的兄弟時間都是很寶貴的.為了大家消消火,少讓大家過來扔磚頭.所以就把最近項目裡碰到的一個長文章自動分頁的問題跟大家分享下.說起長文章分頁也是屬於老生常談了,網上搜下可以找到一籮筐。目前網上流傳的代碼大多是基於對文章中字符的多少來進行,這種方法對於圖片等這些標記就束手無策了。
由於目前文章上傳大多采用HTML編輯器,使得裡面參雜的HTML代碼嚴重影響到場文章分頁的效果。我現在想說的是一種基於文章行數預測為思路的一種分頁方式.操作過程也很簡單.
大家都是寫程序的,費話少說,看代碼
1 //======================================================
2
3 // 50M 雙線空間 + 10M數據庫 + 50M郵箱 18元/年
4 // 100M 雙線空間 + 50M數據庫 + 100M郵箱 28元/年
5 // 200M 雙線空間 + 50M數據庫 + 100M郵箱 38元/年
6 // 特價主機,有需要的M我 QQ:70975363
7
8 //======================================================
9
10 private static List<string> HtmlLineTest(ref string content, int pageid, string url)
11 {
12 //文章分段數組
13 List<string> segs = new List<string>();
14 int segmax = 30; // 計劃每一面的行數
15 int linewords = 50;
16 int segmin = 0;
17
18 string s;
19
20 //int pageheight = 25;
21 int line = 0;
22 對含有HTML代碼的文章進行整理#region 對含有HTML代碼的文章進行整理
23 content = Regex.Replace(content, "<p[^<>]*>", "", RegexOptions.IgnoreCase);
24 content = Regex.Replace(content, "<div[^<>]*>", "", RegexOptions.IgnoreCase);
25 content = Regex.Replace(content, "</p>", "<br />", RegexOptions.IgnoreCase);
26 content = Regex.Replace(content, "</div>", "", RegexOptions.IgnoreCase);
27 #endregion
28 MatchCollection mcc = Regex.Matches(content, "<br */*>|<img[^<>]+>", RegexOptions.IgnoreCase);
29 int idx = 0;
30 StringBuilder __article = new StringBuilder();
31 foreach (Match m in mcc)
32 {
33 if (m.Value.StartsWith("<br", StringComparison.OrdinalIgnoreCase))
34 {
35 s = content.Substring(idx, m.Index - idx);
36 if (!s.StartsWith(" "))
37 __article.Append(" ");
38 __article.Append(s);
39 idx = m.Index + m.Value.Length;
40 int lth = s.Length / linewords;
41 if (s.Length % linewords < linewords/2)
42 lth++;
43 line += lth == 0 ? 1 : lth;
44 segmin += lth == 0 ? 1 : lth;
45 __article.Append("<br />");
46 if (segmax <= segmin)
47 {
48 segs.Add(__article.ToString());
49 _string.Remove(0, __article.Length);
50 segmin = 0;
51 }
52 }
53 else if (m.Value.StartsWith("<img", StringComparison.OrdinalIgnoreCase))
54 {
55 int pos = m.Value.IndexOf("height");
56 if (pos > -1)
57 {
58
59 string ms = m.Value.Substring(pos + 6);
60 pos = int.Parse(Regex.Match(ms, "\\d+").Value);
61 line += pos / 25;
62 segmin += pos / 25;
63 }
64 else
65 {
66 // 圖片沒有發現表示高度的屬性
67 line += 400 / 25;
68 segmin += 400 / 25;
69 }
70 idx = m.Index + m.Value.Length;
71 __article.Append(m.Value);
72 __article.Append("<br />");
73 if (segmax <= segmin)
74 {
75 segs.Add(_string.ToString());
76 __article.Remove(0, _string.Length);
77 segmin = 0;
78 }
79 }
80 }
81 if(__article.Length>0)
82 segs.Add(_string.ToString());
83 if (mcc.Count == 0)
84 segs.Add(content);
85 return segs;
86 }