[vb.NET]printen van VIPP files

Pagina: 1
Acties:

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20:26
Hoi,
1st of all, ben een n00b op het gebied van vb.net. Maar goed, door zoeken, vallen en opstaan en proberen ben ik imho toch al een aardig eind op weg.

Wat?
Ik ben bezig met een applicatietje te maken die het volgende doet:

- het in de gaten houden van een bepaalde directory.
- zodra er op de printbutton geclickt wordt, moeten alle files IN die directory naar een bepaalde printer verzonden worden.

De files die in zo'n directory komen zijn VIPP files. Dat is een soort PostScript taal gemaakt door Xerox. Maar doet er denk ik verder niet toe. Wat doet zo'n VIPP file? Zodra die naar onze RIP wordt gestuurd wordt de inhoud van zo'n file niet gezien als een textfile maar als een mini postscript file, wat dus geparsed wordt door onze RIP.

Voorbeeld van een VIPP file:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
%!
XGF
%%Title: mastertemplate.dbm
MM SETUNIT
PORT
98 68 SETPAGESIZE
(//) 4 SETFTSW
/mmo8 /Frutiger-Bold 8 INDEXFONT
/mmo5 /Frutiger-Roman 5.5 INDEXFONT
/mmo6 /Frutiger-Roman 6.5 INDEXFONT
/gr /GREEN INDEXCOLOR
/zw /BLACK INDEXCOLOR
0 68 MOVETO
(backsnijtekens.tif) 1 0 ICALL
mmo8
gr
48 54 MOVETO
(Voornaam en AchterNaam) SHR
48 50.8 MOVETO
gr
() SHR
mmo5
zw
50 54 MOVETO
(functie) SHL
50 50.8 MOVETO
() SHL
mmo6
48 24 MOVETO
1.4 SETLSP
(Bedrijf) SHR
NL
(PostBus) SHR
NL
(Woonplaats) SHR
NL
(The Netherlands) SHR
50 24 MOVETO
1.4 SETLSP
(e) SHL NL
(m) SHL NL
(t) SHL NL
(f) SHL NL
(www.bedrijf.nl) SHL
53 24 MOVETO
1.4 SETLSP
(voornaam@bedrijf.nl) SHL NL
(+31 (0)6 12345678) SHL NL
(+31 (0)20 111 111) SHL NL
(+31 (0)20 111 222) SHL NL
PAGEBRK
%%EOF


Al deze inhoud wordt nu dus gewoon als plaintext gestuurd. Dit moet dus blijkbaar in een bepaald format gestuurd worden (ik denk postscript?) om netjes door de RIP geparsed te worden.

Vraag
Hoe kan ik zoiets aansturen? Dus niet als plaintext sturen, maar als Postscript versturen.

Ik gebruik de volgende code om te printen (gewoon een example geript ergens):
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
  Private Sub PrintButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PrintButton.Click
        'Dim pd As New PrintDocument
        Dim settings As New DataSet
        Dim PrinterNaam As String
        Dim file As String
        settings.ReadXml("instellingen.xml")
        Try
            streamToPrint = New StreamReader("c:\pdfconvert\test.dbf")
            Try
                printFont = New Font("Arial", 10)
                Dim pd As PrintDocument = New PrintDocument
                PrinterNaam = (settings.Tables("Instellingen").Rows(0)("printer"))
                pd.PrinterSettings.PrinterName = PrinterNaam
                AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage
                pd.Print()
            Finally
                streamToPrint.Close()
            End Try

        Catch ex As Exception
            MessageBox.Show("Er is iets fout gegaan met het printen! - " + ex.Message)
        End Try
    End Sub

    'De Print Handler!!!!!
    '==============================================
    Private Sub pd_PrintPage(ByVal sender As Object, ByVal ev As System.Drawing.Printing.PrintPageEventArgs)

        Dim lpp As Single = 0
        Dim yPos As Single = 0
        Dim count As Integer = 0
        Dim leftMargin As Single = ev.MarginBounds.Left
        Dim topMargin As Single = ev.MarginBounds.Top
        Dim line As String
        lpp = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics)
        line = streamToPrint.ReadLine()
        While (count < lpp And line <> Nothing)
            yPos = topMargin + (count * printFont.GetHeight(ev.Graphics))
            ev.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, _
                                    yPos, New StringFormat)
            count = count + 1
            If (count < lpp) Then
                line = streamToPrint.ReadLine()
            End If
        End While
        If (line <> Nothing) Then
            ev.HasMorePages = True
        Else
            ev.HasMorePages = False
        End If
    End Sub


In een vorige applicatie van ons deden we dit op de volgende manier (dit weet ik, omdat ik de source nagelopen heb :))

Visual Basic:
1
2
Dim PrintActie
PrintActie = Shell("cmd /C lpr.exe -S CSX2000 -J KlantBestelling -P SRA3DUP " & Bestand.Path & "\" & Bestand.FileName, vbHide)

Maar dit werkt om de een of andere vreemde manier niet meer.....
Als iemand weet hoe dit aan de praat te krijgen is, ben ik ook geholpen. Maar het liefste zou ik uiteraard helemaal vanuit vb.NET willen printen.

Dus, iemand een idee?

ps: sorry voor de layout :)

[ Voor 3% gewijzigd door TeeDee op 24-01-2003 15:05 ]

Heart..pumps blood.Has nothing to do with emotion! Bored