程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 基於行數預測的長文章分頁

基於行數預測的長文章分頁

編輯:關於ASP.NET

說句老實話,我是個不大習慣寫博的主,而且本次寫博目的是想過來發個小廣告,哈哈,都是園子裡的兄弟不要拿磚頭扔我

園子裡的兄弟時間都是很寶貴的.為了大家消消火,少讓大家過來扔磚頭.所以就把最近項目裡碰到的一個長文章自動分頁的問題跟大家分享下.說起長文章分頁也是屬於老生常談了,網上搜下可以找到一籮筐。目前網上流傳的代碼大多是基於對文章中字符的多少來進行,這種方法對於圖片等這些標記就束手無策了。

由於目前文章上傳大多采用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        }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved