J'ai un fichier xps. Lorsque je tente d'imprimer ce fichier directement, je peux le faire sans erreur avec mon code ci-dessous:VB.Net impression fichier xps "Fichier contient des données corrompues" erreur
Dim defaultPrintQueue = LocalPrintServer.GetDefaultPrintQueue
Dim xpsPrintJob As PrintSystemJobInfo = defaultPrintQueue.AddJob("test", "C:\Temp\test.xps", False)
Cependant, si je reçois ce fichier à partir d'un service Web comme un tableau d'octets et l'enregistrer comme un fichier xps Je ne peux pas l'imprimer.
Mon Sauvegardez vos codes de tableau d'octets sont ci-dessous:
FS = New IO.FileStream("C:\Temp\test.xps", FileMode.Create)
FS.Write(arrayByte, 0, arrayByte.Length)
FS.Close()
ou ce code:
File.WriteAllBytes("c:\Temp\test.xps", arrayByte)
Lorsque je tente d'imprimer test.xps, je me fais l'erreur:
An unhandled exception of type 'System.Printing.PrintJobException' occurred in System.Printing.dll
Additional information: An exception occurred while creating print job information. Check inner exception for details.
Est-ce que je peux gérer ce problème? Quelqu'un a-t-il une idée?
Par ailleurs, un service Web n'est pas nécessaire. S'il vous plaît voir mon code ci-dessous. Vous pouvez essayer ce fichier n'importe quel xps. Tout d'abord, j'assigner le fichier en tant que byte array Ensuite, je sauvegarde le tableau d'octets en tant que fichier xps.
Premier fichier XPS fonctionne mais deuxième ne fonctionne pas
Dim FS As FileStream
FS = File.Open("C:\Temp\test2.xps", FileMode.Open, FileAccess.Read)
Dim bByte(FS.Length) As Byte
FS.Read(bByte, 0, FS.Length)
FS.Close()
File.WriteAllBytes("c:\Temp\test2byte.xps", bByte)
Dim defaultPrintQueue = LocalPrintServer.GetDefaultPrintQueue
'This is working
Dim xpsPrintJob1 As PrintSystemJobInfo = defaultPrintQueue.AddJob("Test", "C:\Temp\test2.xps", False)
'This is not working
Dim xpsPrintJob2 As PrintSystemJobInfo = defaultPrintQueue.AddJob("Test", "C:\Temp\test2byte.xps", False)
Le problème d'origine a pu être 'Dim bByte (FS.Length) As Byte' alors qu'il devrait être' Dim bByte (FS.Length - 1) As Byte'. Les tableaux de VB sont déclarés avec leur dernier index plutôt que leur taille. –