打印前获取记事本页数

时间:2013-06-02 11:05:26

标签: vb.net streamreader notepad

我正在尝试在打印前获取记事本的页数,

我将记事本设为wordwrap=true, FontSize=12, MarginRight=750, MarginLeft=750, MarginTop=1000, MarginBottom=1000,

大于70页面的列数等于1 and 51是页面等于1时的行数。

它正在工作但是我的公式有些错误,一些记事本页面变好了,但有些不是。

我希望有人可以纠正我所拥有的代码。

或者是否有任何正确的代码可以完成这项工作,即使记事本设置已更改,如果没有正确的方式获取记事本页面,至少有人可以更正我的代码。

感谢。

Private Function GetNotepadNumPage(ByVal filename as string) as Integer    
Dim sr As New StreamReader(filename)
        Dim line As String = sr.ReadLine
        Dim CharL(9999) As Integer
        Dim pCount As Integer = 0
        Dim pLine As Integer = 0
        Do While Not sr.EndOfStream
            line = sr.ReadLine()
            CharL(pLine) = line.Length
            pLine += 1
            If pLine = 51 Then
                pCount += 1
                For i As Integer = 0 To pLine
                    If CharL(i) > 70 Then
                        pCount += 1
                        Exit For
                    End If
                Next
                pLine = 0
            End If
        Loop
        sr.Close()

        If (pLine <> 0) Then
            pCount += 1
            For i As Integer = 0 To pLine
                If CharL(i) > 70 Then
                    pCount += 1
                    Exit For
                End If
            Next
        End If

        pagecount = pCount
Return pagecount
End Function

2 个答案:

答案 0 :(得分:1)

这是一个用于在.net中打印文本的简单包装类。它是用C#编写的,但如果直截了当的话。它包括用于测量每页的计算。你或许可以使用它:

using System;
using System.Drawing;
using System.Drawing.Printing;
namespace PrintDocClass
{
    public class PrintDoc
    {
        private PrintDocument pd1 = new PrintDocument();
        private Font _pdfont = new Font("Microsoft Sans Serif", 8.25f);
        private string _PrintString = "";
        private string _Name = "";
        private bool _Landscape = false;
        public PrintDoc(string PrintString, bool Landscape = false)
        {
            _PrintString = PrintString;
            _Landscape = Landscape;
        }
        public PrintDoc(string PrintString, string DocName, bool Landscape = false)
        {
            _PrintString = PrintString;
            _Name = DocName;
            _Landscape = Landscape;
        }
        public PrintDoc(string PrintString, string DocName, Font PrintFont, bool Landscape = false)
        {
            _PrintString = PrintString;
            _Name = DocName;
            _pdfont = PrintFont;
            _Landscape = Landscape;
        }
        public void Print()
        {
            pd1.DefaultPageSettings.Landscape = _Landscape;
            pd1.PrintPage += new PrintPageEventHandler(pd1_PrintPage);
            if (_Name != "")
                _PrintString = _Name + "\n\n" + _PrintString;
            pd1.Print();
        }
        private void pd1_PrintPage(object sender, PrintPageEventArgs e)
        {
            int charactersOnPage = 0;
            int linesPerPage = 0;
            // Sets the value of charactersOnPage to the number of characters
            // of stringToPrint that will fit within the bounds of the page.
            e.Graphics.MeasureString(_PrintString, _pdfont,
            e.MarginBounds.Size, StringFormat.GenericTypographic,
            out charactersOnPage, out linesPerPage);
            // Draws the string within the bounds of the page
            e.Graphics.DrawString(_PrintString, _pdfont, Brushes.Black,
            e.MarginBounds, StringFormat.GenericTypographic);
            // Remove the portion of the string that has been printed.
            _PrintString = _PrintString.Substring(charactersOnPage);
            // Check to see if more pages are to be printed.
            e.HasMorePages = (_PrintString.Length > 0);
        }
    }
}

答案 1 :(得分:1)

你可以使用它..

Private Function GetNotepadNumPage(ByVal filename As String) As Integer
        Dim sr As New StreamReader(filename)
        Dim sLine As String
        Dim sBuff As String
        Dim nPage As Integer = 0
        Dim nLine As Integer = 0
        Dim n As Integer

        Do While Not sr.EndOfStream
            sLine = sr.ReadLine()

            sBuff = sBuff & sLine

            If sBuff.Length > 70 Then
                n = sBuff.Length \ 70
                nLine += n
                sBuff = Mid(sBuff, 70 * n + 1)
                'MsgBox(sBuff)
            End If

            If nLine > 51 Then
                nPage += 1
                nLine = nLine - 51
            End If
        Loop
        'probably sBuff not empty
        If sBuff.Length > 0 Then
            nLine += 1
            If nLine = 1 Or nPage = 0 Then nPage += 1
        End If

        Return nPage
    End Function
End Class