我正在使用ComponentOne(C1)Silverlight PDF查看器控件。 它有一個「LoadDocument」方法,它接受一個「Stream」。將PDF文件原始源的byte []轉換爲MemoryStream以加載到PDF查看器中? (組件1)
我正在從我的客戶端應用程序進行HTTP獲取調用以獲取PDF文檔。 該文檔在服務器端已通過File.ReadAllBytes()流入,然後使用Convert.ToBase64String()轉換爲base64字符串。 這個字符串通過線返回到我的Silverlight應用程序,然後通過Convert.FromBase64String(val)反向轉換回字節數組。 然後我創建一個MemoryStream與該字節數組並傳遞「LoadDocument()」的內存流。
查看器不渲染任何東西。它顯示工具欄和滾動條,但內容爲空白,保存按鈕變灰,表示沒有文檔加載。 我知道文件是否跨越了文件,因爲客戶端上的字節數組大小與服務器端的字節數組預轉換匹配。
這裏是我的代碼(在時間/空間的興趣,我已經被截斷,除驗證等)
服務器端
string sendingToClient = Convert.ToBase64String(File.ReadAllBytes(filePath))
客戶方
byte[] image = null;
image = Convert.FromBase64String(stringFromServerCall);
MemoryStream stream = new MemoryStream(image);
docViewer.LoadDocument(stream);
編輯作爲潛在的解決方法,我試圖用「.pdf」擴展名將文件保存到獨立存儲中。然後我使用IsolatedStorageFileStream發送到LoadDocument()。 我來到一個實際的錯誤,它現在說「PdfParserException是未處理的用戶代碼:無效的文件格式(缺少pdf標題)」
任何人都可以在這個PDF標題?
你爲什麼用base64編碼它?這只是膨脹下載的大小,但我看不出任何好處。 – AnthonyWJones
現有的代碼邏輯。由於害怕破壞使用此API層的現有已部署應用程序,因此不願意進行更改。儘管我可以創建一個全新的API入口點。 –
創建一個新的並棄用舊的。 – AnthonyWJones