2016-09-06 6 views
0

Ich habe eine XPS-Datei. Wenn ich versuche, diese Datei direkt zu drucken, ich kann es ohne Fehler mit meinem Code unten:VB.Net Drucken XPS-Datei "Datei enthält beschädigte Daten" Fehler

Dim defaultPrintQueue = LocalPrintServer.GetDefaultPrintQueue 

Dim xpsPrintJob As PrintSystemJobInfo = defaultPrintQueue.AddJob("test", "C:\Temp\test.xps", False) 

jedoch Wenn ich diese Datei von einem Webdienst als Byte-Array erhalten und es als eine XPS-Datei speichern Ich kann es nicht drucken.

Mein Byte-Array-Codes speichern sind unter:

FS = New IO.FileStream("C:\Temp\test.xps", FileMode.Create) 
         FS.Write(arrayByte, 0, arrayByte.Length) 
         FS.Close() 

oder dieser Code:

File.WriteAllBytes("c:\Temp\test.xps", arrayByte) 

Wenn ich versuche, test.xps zu drucken, erhalte ich die Fehlermeldung:

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

Kann ich mit diesem Problem umgehen? Hat jemand eine Idee?


Übrigens, es gibt keinen Webservice. Bitte beachten Sie meinen untenstehenden Code. Sie können diese beliebige XPS-Datei versuchen. Erstens assemme ich die Datei als Byte-Array Dann speichere ich das Byte-Array als XPS-Datei.

Erste XPS-Datei funktioniert, aber zweite funktioniert nicht

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) 

Antwort

0

Ich habe das Problem lösen.

Ich habe den Code unten geändert:

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

als

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

und das Problem ist gelöst.

+0

Das ursprüngliche Problem könnte "Dim bByte (FS.Length) As Byte" gewesen sein, wenn es "Dim bByte (FS.Length - 1) As Byte" sein sollte. Arrays in VB werden mit ihrem letzten Index und nicht mit ihrer Größe deklariert. –

Verwandte Themen