2017-05-18 34 views
0

我使用的代碼,這將使用網絡打印機打印文檔:使用C#Socket類和失去一個Word文件格式

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
socket.NoDelay = true; 

IPAddress ip = IPAddress.Parse(ip); 
IPEndPoint ipEndPoint = new IPEndPoint(ip, someport); 
socket.Connect(ipEndPoint); 


socket.Send(_byteArray); 
socket.Close(); 

該代碼工作,但我失去的格式,在我的Word文件。

字節數組來自哪裏?

我使用Syncfusion庫(相關代碼片段):

... someMethod(){ 

WordDocument word = new WordDocument(); 
//... some code 
word.Save(myMemoryStream, FormatType.Docx); 
_byteArray=myMemoryStream.ToArray(); //Comment on Syncfusion-library: "Writes the stream contents to a byte array, regardless of the System.IO.MemoryStream.Position" 

word.Close(); 
} 

我能做些什麼嗎?

+0

使用TCP時,您不會丟失數據,這個問題可能與您如何獲取數據以及如何在接收端解釋它並未顯示給我們有關。 –

+1

你確定byteArray包含word文檔,而不僅僅是文本? – BugFinder

+0

如果你丟失了格式,那麼流默認爲Ascii編碼而不是UTF8編碼。它不會在您發佈的代碼中發生。 TCP不會修改數據。 – jdweng

回答

2

我懷疑,您的生產環境中可能沒有安裝字體(在Word文檔中使用)。如果是這樣,請在生產環境中安裝所有使用的字體以解決報告的問題。

如果您不修改任何Word文檔內容,那麼您可以嘗試下面的代碼。

// Open Word document using FileStream. 
FileStream fileStream = new FileStream("input.docx", FileMode.Open); 
// Copy file stream to MemoryStream. 
MemoryStream memoryStream = new MemoryStream(); 
fileStream.CopyTo(memoryStream); 
// Gets byte array from memory stream of file. 
byte[] temp = memoryStream.ToArray(); 

如果你面臨着同樣的問題的手段,那麼輸入文檔中常用的字體可能不會安裝在生產環境中的話,安裝所有常用的字體來解決此問題。

如果您在此方法中未遇到報告的問題,請分享您的代碼以及來自您的末端的輸入和生成的Word文檔以進一步驗證。