私はComponentOne(C1)Silverlight PDFビューアコントロールを使用しています。 "Stream"を受け入れる "LoadDocument"メソッドがあります。PDFビューアに読み込むために、PDFファイルのオリジナルソースのbyte []をMemoryStreamに変換しますか? (コンポーネント1)
クライアントアプリケーションからHTTPドキュメントを取得するコールを行っています。 このドキュメントは、サーバー側で、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);
edit潜在的な回避策として、私はファイルを ".pdf"拡張子の隔離されたストレージに保存しようとしました。次に、IsolatedStorageFileStreamを使用してLoadDocument()に送信します。 実際のエラーになりました。「PdfParserExceptionはユーザーコードによって処理されませんでした:無効なファイル形式(PDFヘッダーがありません)」
誰でもこのPDFヘッダーを確認できますか?
なぜそれをbase64でエンコードしていますか?それはただダウンロードサイズを膨らませますが、私はそれにいかなる利益も見られません。 – AnthonyWJones
既存のコードロジック。このAPIレイヤーを使用する既存のデプロイされたアプリケーションを壊す恐れがあるため、変更するのは嫌です。私は全く新しいAPIエントリポイントを作成することができます。 –
新しいものを作成し、古いものを非難してください。 – AnthonyWJones