XXXXXXXXXXXXXX
XXXXXXXXXXXXXX

Reputation: 155

Get Notepad Number of Pages before Print

I'm trying to get the number of pages notepad before print,

I'm setting the notepad to wordwrap=true, FontSize=12, MarginRight=750, MarginLeft=750, MarginTop=1000, MarginBottom=1000,

Greater than 70 is the number of column for page is equal to 1 and 51 is the number of line when page is equal to 1 also.

It's working But some mistakes on the formula I have, some notepad pages gets Ok, but some are not.

I hope someone could correct the code what I have.

Or is there any proper code to get this done even if notepad settings are changed, if there is no proper way of getting the notepad pages, at-least someone could correct the code I have.

Thanks.

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

Upvotes: 2

Views: 1802

Answers (2)

matzone
matzone

Reputation: 5719

You can use this ..

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

Upvotes: 1

tinstaafl
tinstaafl

Reputation: 6948

Here's a simple wrapper class for printing text in .net. It's written in C# but ifairly straight forward. It includes calculations for measuring each page. You might be able to use this:

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);
        }
    }
}

Upvotes: 1

Related Questions