1.976 messaggi dal 27 luglio 2005
Contributi
salve a tutti,
salve a tutti,
qualche anno fa scrissi un'applicazione WPF (basata su Visual Basic 2012) che includeva alcune stampe utilizzando le funzionalita' standard WPF tramite printdialogs/paginators/
tutto funzionava correttamente e non ci ho piu' guardato sino a qualche giorno fa quando ho dovuto modificare alcune cose, ed ovviamente ho testato anche la stampa (che non era stata modificata)...

adesso le funzionalita' di stampa falliscono, ma non nel codice del "paginator", ma nell'accesso alle proprieta'/metodi degli oggetti PrintTicket/Que con l'eccezione
"PrintTicket provider failed to convert PrintTicket to DEVMODE. Win32 error: The parameter is incorrect. "

cosa ancora piu' strana, non fallisce sempre, ed in maniera diversa con differenti stampanti...
con la stampante virtuale "PDF Creator", fallisce con alcune proprieta', mentre fallisce con altre di differenti stampanti...
for instance, PDF Creator virtual printer:
1) myQue.DefaultPrintTicket = myTicket = OK
2) myQue.CurrentJobSettings.Description = "some title" = OK con alcune, FALLISCE con altre

ma 2) fallisce solamente la prima volta che viene chiamata, cosi' ho "risolto" con un loop e un piccolo "sleep", e la seconda o terza volta riesce ad impostare... la schifezza ottenuta e':

Dim myTicket As System.Printing.PrintTicket = New System.Printing.PrintTicket()
Dim myQue As System.Printing.PrintQueue = Nothing 

Dim dlg As New PrintDialog
.....

myTicket = dlg.PrintTicket                
myQue = dlg.PrintQueue
....

' per verificare che le proprieta' interessanti
' siano state impostate
Dim ticketIsSet(1) As Boolean

For iLoop As Integer = 1 To 5
    'it can fail with DEVMODE = NULL
    Try
        If Not ticketIsSet(0) Then
            myQue.DefaultPrintTicket = myTicket
            ticketIsSet(0) = True
        End If

        If Not ticketIsSet(1) Then
            myQue.CurrentJobSettings.Description = Me.Title
            ticketIsSet(1) = True
        End If
    Catch ex As Exception
        Errors.Add(ex.Message)
        System.Threading.Thread.CurrentThread.Sleep(1000)
    End Try
    If ticketIsSet(0) AndAlso ticketIsSet(1) Then Exit For
Next
If Errors.Count Then
    ' necessario solo il PrintTicket... :( 
    If ticketIsSet(0) Then Errors.Clear()
End If


diciamo che "cosi' e' sufficiente"... ma solo parzialmente... infatti il Paginator viene poi usato (con successo) per popolare un System.Windows.Controls.DocumentViewer... la finestra che ospita questo documentviewer potra' poi stampare effettivamente laddove richiesto...
e qui, di nuovo, con risultati diversi a seconda della stampante, sollevando eccezione "PrintTicket provider failed to convert PrintTicket to DEVMODE. Win32 error: The parameter is incorrect. " .

con la stampante virtuale di PDF Creator funziona, mentre fallisce con altre...

ho provato lo stesso "trucchetto" di cui sopra con un loop,
Dim Errors As New Specialized.StringCollection
Dim bDone As Boolean = False
For iLoop As Integer = 1 To 5
    Try
        Dim writer As System.Windows.Xps.XpsDocumentWriter = System.Printing.PrintQueue.CreateXpsDocumentWriter(m_printQueue)
        writer.Write(Me.docViewer.Document.DocumentPaginator, Me.m_printTicket)
        writer = Nothing
        bDone = True
    Catch ex As Exception
        Errors.Add(ex.Message)
        System.Threading.Thread.CurrentThread.Sleep(1000)
    End Try
    If bDone Then Exit For
Next
If bDone Then Errors.Clear()
If Errors.Count <> 0 Then BasShowErrors(Errors, Me, False)


ma qui NON risolvo il problema e su alcune stampanti fallisce
writer.Write(Me.docViewer.Document.DocumentPaginator, Me.m_printTicket)
con l'eccezione "PrintTicket provider failed to convert PrintTicket to DEVMODE. Win32 error: The parameter is incorrect. "...

ovviamente le stampanti che qui falliscono non hanno alcun problema, e le uso tranquillamente da Word, Excel, etc, come anche dagli altri progetti (NON basati su WPF) projects... e questo non succedeva al tempo dello sviluppo iniziale di questa applicazione WPF...

la mia situazione softare corrente::
Win7 Ultimate sp 1
SQL 2014 Dev Edition (irrilevante)
Visual Studio 2012 Ultimate Version 11.0.61219.00 Update 5
Microsoft .NET Framework version 4.6.01055

ho anche provato a "riparare" il NET Framework con NetFramwork Repair Tool (https://www.microsoft.com/en-us/download/details.aspx?id=30135) ma putroppo senza successo...

ogni suggerimento e' ben accetto :)
TIA
--
asql

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.