2015-05-02 2 views
0

Я создал и сохранил .txt-файл, и теперь я прав, чтобы его распечатать. Файл может быть достаточно большим, если потребуется несколько страниц. Вот мой код:Как печатать текстовые файлы?

'Print file 
Dim docName As String = name1 & " " & name2 & ".txt" 
Dim docPath As String = "Z:\\Completed\" 
printDocument1.DocumentName = docName 
Dim stream As New FileStream(docPath & docName, FileMode.Open) 
Try 
    Dim reader As New StreamReader(stream) 
    Try 
     stringToPrint = reader.ReadToEnd() 
    Finally 
     reader.Dispose() 
    End Try 
Finally 
    stream.Dispose() 
End Try 
printDocument1.Print() 


Private Sub printDocument1_PrintPage(ByVal sender As Object, _ 
    ByVal e As PrintPageEventArgs) 

    Dim charactersOnPage As Integer = 0 
    Dim linesPerPage As Integer = 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(stringToPrint, Me.Font, e.MarginBounds.Size, _ 
     StringFormat.GenericTypographic, charactersOnPage, linesPerPage) 

    ' Draws the string within the bounds of the page 
    e.Graphics.DrawString(stringToPrint, Me.Font, Brushes.Black, _ 
     e.MarginBounds, StringFormat.GenericTypographic) 

    ' Remove the portion of the string that has been printed. 
    stringToPrint = stringToPrint.Substring(charactersOnPage) 

    ' Check to see if more pages are to be printed. 
    e.HasMorePages = stringToPrint.Length > 0 

End Sub 

Моя проблема заключается в том, что он печатает пустую страницу каждый раз. Выполняя код, я вижу, что «docName» и «docPath» установлены правильно.

Пример:

DOCNAME = Test 1.TXT

DocPath = Z: \ Завершенного \

+0

You» re используя 'printDocument1.Print()', но вы загружаете свой файл в переменную 'stringToPrint'. Кроме того, ваш второй фрагмент кода кажется несвязанным, так как он никогда не называется (из того, что вы показали). –

+0

@JustinRyan Я понял, что 'printDocument1.Print()' вызвал второй фрагмент, который затем напечатал то, что было в 'stringToPrint'. Пройдя через мой код, я вижу, что второй фрагмент никогда не вызывается, но я не уверен, как это сделать. Как я могу напечатать то, что находится в 'stringToPrint'? Кроме того, является ли второй фрагмент ненужным для печати многостраничного документа? –

ответ

0

MSDN example очень неясный (пример кода даже не показывает), но вы необходимо вручную добавить обработчик события PrintPage. Добавьте эту строку после того, как вы заявляете printDocument1, но перед вызовом printDocument1.Print():

AddHandler printDocument1.PrintPage, AddressOf printDocument1_PrintPage 

В качестве альтернативы, вы можете изменить свое объявление Sub для:

Private Sub printDocument1_PrintPage(ByVal sender As Object, _ 
ByVal e As PrintPageEventArgs) Handles printDocument1.PrintPage 

Редактировать: Для того, чтобы использовать этот метод, вы должны объявить printDocument1 используя WithEvents ключевое слово, что-то вроде этого:

Dim WithEvents printDocument1 As ... 
+0

Я получил следующую ошибку, изменяющую объявление подклассы: «Предложение Handles требует переменную WithEvents, определенную в содержащем типе или одном из его базовых типов». Первый кусок кода, который вы предлагали, отлично работает! –

+0

@MikeMetzger Извините. Я уточнил ответ, чтобы уточнить. –

Смежные вопросы