2016-09-06 3 views
0

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.

Detailed view of the error is here

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) 

Répondre

0

J'ai résoudre le problème.

J'ai changé le code ci-dessous:

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() 

comme

Dim bByte() As Byte = File.ReadAllBytes("C:\Temp\test2.xps") 

et le problème a été résolu.

+0

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. –