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