/// <summary> /// 產生輸出的點字資料。 /// </summary> /// <returns></returns> private StringBuilder GenerateOutputData() { int lineCnt = 0; int pageNum = 0; // 程式內部處理的頁碼 BrailleLine brLine; StringBuilder sb = new StringBuilder(); int realLinesPerPage = m_PrintOptions.LinesPerPage; if (m_PrintOptions.PrintPageFoot) // 如需列印頁碼,每頁可印列數便少一列。 { realLinesPerPage--; } // 計算起始列索引 int lineIdx = 0; if (!m_PrintOptions.AllPages) { lineIdx = CalcTextLineIndex(m_PrintOptions.FromPage - 1); } // 準備輸出至點字印表機的資料 while (lineIdx < m_BrDoc.LineCount) { brLine = m_BrDoc.Lines[lineIdx]; SetOrgPageNumber(brLine, (lineCnt % realLinesPerPage == 0)); // 設定起始/終止原書頁碼。 sb.Append(BrailleCharConverter.ToString(brLine)); sb.Append(NewLine); // 每一列後面附加一個換行符號。 lineCnt++; // 列印頁尾資訊:文件標題、原書頁碼、點字頁碼。 if (lineCnt % realLinesPerPage == 0) // 已經印滿一頁了? { if (m_PrintOptions.PrintPageFoot) // 是否要印頁尾? { pageNum++; sb.Append(GetBraillePageFoot(lineIdx, m_DisplayedPageNum, m_BeginOrgPageNumber, m_EndOrgPageNumber)); AddPageBreak(sb); } m_DisplayedPageNum++; // 每一頁開始列印時,都要把上一頁的終止原書頁碼指定給本頁的起始原書頁碼。 if (m_EndOrgPageNumber >= 0) { m_BeginOrgPageNumber = m_EndOrgPageNumber; } if (pageNum >= m_PrintOptions.ToPage) { break; } } lineIdx++; } // 補印頁碼 if (lineCnt % realLinesPerPage != 0) { pageNum++; if (m_PrintOptions.PrintPageFoot) { // 用空白列補滿剩餘的頁面 int n = realLinesPerPage - (lineCnt % realLinesPerPage); for (int i = 0; i < n; i++) { sb.Append(NewLine); } sb.Append(GetBraillePageFoot(lineIdx, m_DisplayedPageNum, m_BeginOrgPageNumber, m_EndOrgPageNumber)); AddPageBreak(sb); } m_DisplayedPageNum++; } if (m_PrintOptions.BrSendPageBreakAtEndOfDoc) { sb.Append(NewPage); } return(sb); }