Печать

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Печать

Сообщение areh » 01.06.2003 (Вс) 16:27

Я вот тут сижу пытаюсь разобраться с печатью, но что-то как-то не совсем получаеться. Начнем с того в чем я разобрался:

Код: Выделить всё
Imports System.Drawing

...

Dim PrintDoc As Printing.PrintDocument = New Printing.PrintDocument()

PrintDoc.DocumentName = "Тут какая-нить фигня"

AddHandler PrintDoc.PrintPage, AddressOf PrintPage
AddHandler PrintDoc.BeginPrint, AddressOf BeginPrint
AddHandler PrintDoc.EndPrint, AddressOf EndPrint

PrintDoc.Print()


Далее три процедуры с определенным типом параметров, кот. были указаны выше

Код: Выделить всё
Sub PrintPage(ByVal sender As Object, ByVal e As Printing.PrintPageEventArgs)

        Dim fnt As Font = New Font("Times New Roman Cyr", 10, FontStyle.Regular)
        Dim fh As Integer = fnt.Height


        For i = 1 To 3
            e.Graphics.DrawString("Какой-нить текст", fnt, Brushes.Black, 5, 5 + (i - 1) * fh)
        Next

        e.HasMorePages = False

    End Sub

Sub BeginPrint(ByVal sender As Object, ByVal e As  Printing.PrintEventArgs)
        MsgBox("Ну, начали печатать!")
End Sub

Sub EndPrint(ByVal sender As Object, ByVal e As Printing.PrintEventArgs)
        MsgBox("Типа печать закончена")
End Sub


Это то, с чем я разобрался, но вот мне интересно, как можно печатать на нестандартных форматах, и ещё, печатать, текст вертикально?

Заранее всем признателен

CREATOR
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 26.03.2003 (Ср) 12:32

Сообщение CREATOR » 02.06.2003 (Пн) 6:28

:arrow: Вроде и сам всё уже написал ... :lol:
Код: Выделить всё
Sub PrintPage(ByVal sender As Object, ByVal e As Printing.PrintPageEventArgs)
' Графический дескрипт e.Graphics и можешь рисовать всё что угодно
End Sub



Ну а насчет
как можно печатать на нестандартных форматах


Так - e.PageSettings

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Сообщение areh » 02.06.2003 (Пн) 11:53

Я просто не совсем понимаю, как можно оринтацию текста поменять... а по поводу PageSettings я ввроде сам догодался, я даже вот до чего догадался:

e.PageSettings.PaperSize.Height = 4.85
e.PageSettings.PaperSize.Width = 2.95

это типа в инчах, т.е. в дюймах, но вот он только ругаеться, что нельзя так делать пока не установлен Kind.Custom, но вот где его установить я не догадался, если не сложно объясни плиzzzzzzzzzz

CREATOR
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 26.03.2003 (Ср) 12:32

Сообщение CREATOR » 03.06.2003 (Вт) 4:08

:arrow: Посмотри нашёл в базе код ......
Код: Выделить всё
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            PrintPreviewDialog1.Document = PrintDocument1
            PageSetupDialog1.PageSettings = PrintDocument1.DefaultPageSettings
            PageSetupDialog1.ShowDialog()
            PrintDocument1.DefaultPageSettings = PageSetupDialog1.PageSettings
            PrintPreviewDialog1.ShowDialog()
        Catch exc As Exception
            MsgBox("Printing Operation Failed" & vbCrLf & _
                 exc.Message)
        End Try
    End Sub

    Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
        Dim R As Rectangle
        e.Graphics.TextRenderingHint = Drawing.Text.TextRenderingHint.AntiAlias
        Dim strWidth, strHeight As Integer
        Dim pFont As Font
        pFont = New Font("Comic Sans MS", 20)

        e.Graphics.DrawString("ORIGIN", pFont, Brushes.Black, 0, 0)
        pFont = New Font("Comic Sans MS", 28)

        ' X and Y are the coordinates on the page, where each caption
        ' will be printed. Their values are calculated for each orientation
        Dim X, Y As Integer
        ' The margin captions
        Dim TMarginCaption As String = "Top Margin String"
        Dim LMarginCaption As String = "Left Margin String"
        Dim RMarginCaption As String = "Right Margin String"
        Dim BMarginCaption As String = "Bottom Margin String"

        ' The four margins around the rectangle that encloses the printable are of the page
        Dim LMargin, RMargin, TMargin, BMargin As Integer
        With PrintDocument1.DefaultPageSettings.Margins
            LMargin = .Left
            RMargin = .Right
            TMargin = .Top
            BMargin = .Bottom
        End With

        ' The dimensions of the printable area of the page (PrintWidth, PrintHeight)
        ' and the dimensions of the page (PageWidth, PageHeight)
        Dim PrintWidth, PrintHeight As Integer
        Dim PageWidth, PageHeight As Integer
        With PrintDocument1.DefaultPageSettings.PaperSize
            PrintWidth = .Width - LMargin - RMargin
            PrintHeight = PrintDocument1.DefaultPageSettings.PaperSize.Height - TMargin - BMargin
            PageWidth = PrintDocument1.DefaultPageSettings.PaperSize.Width
            PageHeight = PrintDocument1.DefaultPageSettings.PaperSize.Height
        End With

        ' If the user has chosen landscape orientations, we must swap the
        ' width and height of the useful are of the page
        ' The margins need not be swapped
        If PrintDocument1.DefaultPageSettings.Landscape Then
            PrintWidth = PrintDocument1.DefaultPageSettings.PaperSize.Height - TMargin - BMargin
            PrintHeight = PrintDocument1.DefaultPageSettings.PaperSize.Width - RMargin - LMargin
            PageWidth = PrintDocument1.DefaultPageSettings.PaperSize.Height
            PageHeight = PrintDocument1.DefaultPageSettings.PaperSize.Width
        End If


        R = New Rectangle(LMargin, TMargin, PageWidth - LMargin - RMargin, PageHeight - BMargin - TMargin)
        e.Graphics.DrawRectangle(Pens.Black, R)

        ' TOP MARGIN CAPTION
        strWidth = e.Graphics.MeasureString(TMarginCaption, pFont).Width
        strHeight = e.Graphics.MeasureString(TMarginCaption, pFont).Height
        X = LMargin + (PrintWidth - strWidth) / 2
        Y = (TMargin - strHeight) / 2
        e.Graphics.TranslateTransform(X, Y)
        e.Graphics.DrawString(TMarginCaption, pFont, Brushes.Black, 0, 0)

        ' RIGHT MARGIN CAPTION
        strWidth = e.Graphics.MeasureString(RMarginCaption, pFont).Width
        strHeight = e.Graphics.MeasureString(RMarginCaption, pFont).Height
        X = PageWidth - (RMargin - strHeight) / 2
        Y = TMargin + (PrintHeight - strWidth) / 2  ' when we rotate by 90, width and height are swapped
        e.Graphics.ResetTransform()
        e.Graphics.TranslateTransform(X, Y)
        e.Graphics.RotateTransform(90)
        e.Graphics.DrawString(RMarginCaption, pFont, Brushes.Black, 0, 0)

        ' BOTTOM MARGIN CAPTION
        e.Graphics.ResetTransform()
        strWidth = e.Graphics.MeasureString(BMarginCaption, pFont).Width
        strHeight = e.Graphics.MeasureString(BMarginCaption, pFont).Height
        X = PageWidth - RMargin - (PrintWidth - strWidth) / 2
        Y = PageHeight - (BMargin - strHeight) / 2
        e.Graphics.TranslateTransform(X, Y)
        e.Graphics.RotateTransform(180)
        e.Graphics.DrawString(BMarginCaption, pFont, Brushes.Black, 0, 0)

        ' LEFT MARGIN CAPTION
        e.Graphics.ResetTransform()
        strWidth = e.Graphics.MeasureString(LMarginCaption, pFont).Width
        strHeight = e.Graphics.MeasureString(LMarginCaption, pFont).Height
        X = (LMargin - strHeight) / 2
        Y = TMargin + (PrintHeight + strWidth) / 2
        e.Graphics.TranslateTransform(X, Y)
        e.Graphics.RotateTransform(-90)
        e.Graphics.DrawString(LMarginCaption, pFont, Brushes.Black, 0, 0)
    End Sub


Может будет полезен, ...... а вообще покопай классы:
System.Drawing.Printing.PrintDocument
System.Windows.Forms.PrintPreviewDialog
System.Windows.Forms.PageSetupDialog

areh
Постоялец
Постоялец
 
Сообщения: 530
Зарегистрирован: 02.12.2002 (Пн) 12:28
Откуда: РОССИЯ, Салехард

Сообщение areh » 03.06.2003 (Вт) 20:01

Огромное тебе спасибо!

Всё отлично работает, и вроде даже со всей этой бедой разобрался


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 58

    TopList