첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ 페이지 링크를 갖는 HTML 페이지 파일 생성하기

----------------------------------------------------------------------------------------------------


TestProject.zip


Program.cs

 

 

using System;

using System.Collections.Generic;

using System.IO;

using System.Text;

 

namespace TestProject

{

    /// <summary>

    /// 프로그램

    /// </summary>

    class Program

    {

        //////////////////////////////////////////////////////////////////////////////////////////////////// Method

        ////////////////////////////////////////////////////////////////////////////////////////// Static

        //////////////////////////////////////////////////////////////////////////////// Private

 

        #region 전체 페이지 카운트 구하기 - GetTotalPageCount(itemCount, pageItemCount)

 

        /// <summary>

        /// 전체 페이지 카운트 구하기

        /// </summary>

        /// <param name="itemCount">항목 카운트</param>

        /// <param name="pageItemCount">페이지당 항목 카운트</param>

        /// <returns>전체 페이지 카운트</returns>

        private static int GetTotalPageCount(int itemCount, int pageItemCount)

        {

            return (int)Math.Ceiling((double)itemCount / (double)pageItemCount);

        }

 

        #endregion

        #region 항목 시작 인덱스 구하기 - GetItemStartIndex(totalPageCount, pageItemCount, pageIndex)

 

        /// <summary>

        /// 항목 시작 인덱스 구하기

        /// </summary>

        /// <param name="totalPageCount">전체 페이지 카운트</param>

        /// <param name="pageItemCount">페이지당 항목 카운트</param>

        /// <param name="pageIndex">페이지 인덱스</param>

        /// <returns>항목 시작 인덱스</returns>

        private static int GetItemStartIndex(int totalPageCount, int pageItemCount, int pageIndex)

        {

            if(pageIndex < 0 || pageIndex >= totalPageCount)

            {

                return -1;

            }

 

            int itemStartIndex = pageIndex * pageItemCount;

 

            return itemStartIndex;

        }

 

        #endregion

        #region 항목 종료 인덱스 구하기 - GetItemEndIndex(itemCount, pageItemCount, itemStartIndex)

 

        /// <summary>

        /// 항목 종료 인덱스 구하기

        /// </summary>

        /// <param name="itemCount">항목 카운트</param>

        /// <param name="pageItemCount">페이지당 항목 카운트</param>

        /// <param name="itemStartIndex">항목 시작 인덱스</param>

        /// <returns>항목 종료 인덱스</returns>

        private static int GetItemEndIndex(int itemCount, int pageItemCount, int itemStartIndex)

        {

            int itemEndIndex = Math.Min(itemCount - 1, itemStartIndex + pageItemCount - 1);

 

            return itemEndIndex;

        }

 

        #endregion

        #region HTML 페이지 파일명 구하기 - GetHTMLPageFileName(pageNumber)

 

        /// <summary>

        /// HTML 페이지 파일명 구하기

        /// </summary>

        /// <param name="pageNumber">페이지 번호</param>

        /// <returns>HTML 페이지 파일명</returns>

        /// <remarks>페이지 번호 : 1부터 시작한다.</remarks>

        private static string GetHTMLPageFileName(int pageNumber)

        {

            return string.Format("page{0}.html", pageNumber);

        }

 

        #endregion

        #region 페이지 링크 HTML 구하기 - GetPageLinkHTML(totalPageCount, pageRange, currentPage)

 

        /// <summary>

        /// 페이지 링크 HTML 구하기

        /// </summary>

        /// <param name="totalPageCount">전체 페이지 카운트</param>

        /// <param name="pageRange">페이지 범위</param>

        /// <param name="currentPage">현재 페이지</param>

        /// <returns>페이지 링크 HTML</returns>

        /// <remarks>현재 페이지 : 1부터 시작한다.</remarks>

        private static string GetPageLinkHTML(int totalPageCount, int pageRange, int currentPage)

        {

            StringBuilder stringBuilder = new StringBuilder();

 

            if(totalPageCount == 0)

            {

                return string.Empty;

            }

 

            stringBuilder.AppendLine("<table cellpadding=\"0\" cellspacing=\"0\" border=\"0\">");

            stringBuilder.AppendLine("<tr>");

            stringBuilder.AppendLine("<td>");

 

            int rangeCount = currentPage / pageRange;

 

            if(currentPage % pageRange == 0)

            {

                rangeCount = currentPage / pageRange - 1;

            }

 

            #region 첫번째 페이지 링크를 추가한다.

 

            int firstPage = currentPage - pageRange;

 

            if(firstPage > 0)

            {

                stringBuilder.AppendFormat("<a href=\"{0}\">첫번째 페이지</a>", GetHTMLPageFileName(1));

                stringBuilder.AppendLine();

            }

            else

            {

                //stringBuilder.AppendLine("첫번째 페이지");

            }

 

            #endregion

            #region 이전 페이지 링크를 추가한다.

 

            if(currentPage > pageRange)

            {

                int pageNumber;

 

                if(currentPage % pageRange == 0)

                {

                    pageNumber = currentPage - pageRange;

                }

                else

                {

                    pageNumber = currentPage - currentPage % pageRange;

                }

 

                stringBuilder.AppendFormat("<a href=\"{0}\">이전 페이지</a>", GetHTMLPageFileName(pageNumber));

                stringBuilder.AppendLine();

            }

            else

            {

                //stringBuilder.AppendLine("이전 페이지");

            }

 

            #endregion

            #region 페이지 링크를 추가한다.

 

            for(int pageNumber = rangeCount * pageRange + 1; pageNumber < (rangeCount + 1) * pageRange + 1; pageNumber++)

            {

                string fontStartHTML = "<font size=\"2\">";

                string fontEndHTML   = "</font>";

 

                if(pageNumber == currentPage)

                {

                    fontStartHTML = "<font size=\"2\"><b>";

                    fontEndHTML   = "</b></font>";

                }

 

                stringBuilder.AppendFormat("{0}<a href=\"{1}\">{2}</a>{3}",

                    fontStartHTML, GetHTMLPageFileName(pageNumber), pageNumber, fontEndHTML);

                stringBuilder.AppendLine();

 

                if(pageNumber == totalPageCount)

                {

                    break;

                }

            }

 

            #endregion

            #region 다음 페이지 링크를 추가한다.

 

            if(totalPageCount > (rangeCount + 1) * pageRange)

            {

                stringBuilder.AppendFormat("<a href=\"{0}\">다음 페이지</a>",

                    GetHTMLPageFileName((rangeCount + 1) * pageRange + 1));

                stringBuilder.AppendLine();

            }

            else

            {

                //stringBuilder.AppendLine("다음 페이지");

            }

 

            #endregion

            #region 마지막 페이지 링크를 추가한다.

 

            int endPage = currentPage + pageRange;

 

            if(endPage < totalPageCount)

            {

                stringBuilder.AppendFormat("<a href=\"{0}\">마지막 페이지</a>", totalPageCount);

                stringBuilder.AppendLine();

            }

            else

            {

                //stringBuilder.AppendLine("마지막 페이지");

            }

 

            #endregion

 

            stringBuilder.AppendLine("</td>");

            stringBuilder.AppendLine("</tr>");

            stringBuilder.AppendLine("</table>");

 

            return stringBuilder.ToString();

        }

 

        #endregion

        #region HTML 페이지 구하기 - GetHTMLPage(itemHorizontalCount, itemWidth, itemHeight, totalPageCount,

                                                 pageIndex, itemStartIndex, itemEndIndex)

 

        /// <summary>

        /// HTML 페이지 구하기

        /// </summary>

        /// <param name="itemHorizontalCount">항목 수평 카운트</param>

        /// <param name="itemWidth">항목 너비</param>

        /// <param name="itemHeight">항목 높이</param>

        /// <param name="totalPageCount">전체 페이지 카운트</param>

        /// <param name="pageIndex">페이지 인덱스</param>

        /// <param name="itemStartIndex">항목 시작 인덱스</param>

        /// <param name="itemEndIndex">항목 종료 인덱스</param>

        /// <returns>HTML 페이지</returns>

        private static string GetHTMLPage(int itemHorizontalCount, int itemWidth, int itemHeight, int totalPageCount,

                                          int pageIndex, int itemStartIndex, int itemEndIndex)

        {

            StringBuilder stringBuilder = new StringBuilder();

 

            stringBuilder.AppendLine("<html>");

            stringBuilder.AppendLine("<head>");

            stringBuilder.AppendLine("<meta charset=\"utf-8\">");

            stringBuilder.AppendLine("<head>");

            stringBuilder.AppendLine("<body>");

            stringBuilder.AppendFormat("<h1>Page : {0}</h1>", pageIndex +1);

            stringBuilder.AppendLine();

            stringBuilder.AppendLine("<table>");

            stringBuilder.AppendLine("<tr>");

 

            int count = itemEndIndex - itemStartIndex + 1;

 

            for(int i = 0; i < count; i++)

            {

                stringBuilder.AppendFormat("<td>Item {0}</td>", itemStartIndex + i + 1);

                stringBuilder.AppendLine();

 

                if(i > 0 && (i + 1) % itemHorizontalCount == 0)

                {

                    stringBuilder.AppendLine("</tr>");

                    stringBuilder.AppendLine("<tr>");

                }

            }

 

            stringBuilder.AppendLine("</tr>");

            stringBuilder.AppendLine("</table>");

            stringBuilder.AppendLine("<p></p>");

 

            string pageLinkHTML = GetPageLinkHTML(totalPageCount, 10, pageIndex + 1);

 

            stringBuilder.AppendLine(pageLinkHTML);

 

            stringBuilder.AppendLine("</body>");

            stringBuilder.AppendLine("</html>");

 

            string htmlPage = stringBuilder.ToString();

 

            return htmlPage;

        }

 

        #endregion

        #region HTML 페이지 리스트 구하기 - GetHTMLPageList(itemCount, itemHorizontalCount, pageItemCount,

                                                            itemWidth, itemHeight)

 

        /// <summary>

        /// HTML 페이지 리스트 구하기

        /// </summary>

        /// <param name="itemCount">항목 카운트</param>

        /// <param name="itemHorizontalCount">항목 수평 카운트</param>

        /// <param name="pageItemCount">페이지당 항목 카운트</param>

        /// <param name="itemWidth">항목 너비</param>

        /// <param name="itemHeight">항목 높이</param>

        /// <returns>HTML 페이지 리스트</returns>

        private static List<string> GetHTMLPageList(int itemCount, int itemHorizontalCount, int pageItemCount,

                                                    int itemWidth, int itemHeight)

        {

            int totalPageCount = GetTotalPageCount(itemCount, pageItemCount);

 

            List<string> list = new List<string>();

 

            for(int pageIndex = 0; pageIndex < totalPageCount; pageIndex++)

            {

                int    itemStartIndex = GetItemStartIndex(totalPageCount, pageItemCount, pageIndex);

                int    itemEndIndex   = GetItemEndIndex(itemCount, pageItemCount, itemStartIndex);

                string htmlPage       = GetHTMLPage(itemHorizontalCount, itemWidth, itemHeight, totalPageCount,

                                                    pageIndex, itemStartIndex, itemEndIndex);

 

                list.Add(htmlPage);

            }

 

            return list;

        }

 

        #endregion

 

        #region 프로그램 시작하기 - Main()

 

        /// <summary>

        /// 프로그램 시작하기

        /// </summary>

        private static void Main()

        {

            #region 저장 디렉토리가 없는 경우 생성한다.

 

            string saveDirectory = "c:\\temp";

 

            if(!Directory.Exists(saveDirectory))

            {

                Directory.CreateDirectory(saveDirectory);

            }

 

            #endregion

 

            // 536건의 항목들을 페이지당 100건씩 나눠서 HTML 페이지 파일을 생성한다.

            // HTML 페이지에서 항목들을 한 줄에 4건씩 표시한다.

            // 생성된 페이지는 [첫번째 페이지][이전 페이지][페이지 번호...][다음 페이지][마지막 페이지] 링크를 갖는다.

            // 항목 너비와 높이는 HTML 문서 생성시 참조될 수 있으나 예제에서는 참조하지 않았다.

            int itemCount           = 536;

            int pageItemCount       = 100;

            int itemHorizontalCount = 4;

            int itemWidth           = 200;

            int itemHeight          = 200;

 

            List<string> htmlPageList = GetHTMLPageList(itemCount, itemHorizontalCount, pageItemCount, itemWidth, itemHeight);

 

            for(int i = 0; i < htmlPageList.Count; i++)

            {

                string htmlPageFileName = GetHTMLPageFileName(i + 1);

 

                File.WriteAllText(Path.Combine(saveDirectory, htmlPageFileName), htmlPageList[i]);

            }

        }

 

        #endregion

    }

}

 

----------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요