我正在尝试在打印前获取记事本的页数,
我将记事本设为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
答案 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