Reputation: 155
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
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
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