0

ポップアップでキャンバスをPDFドキュメントに保存する必要があるような要件のアプリケーションがあります。そのために、画像データをpdfに変換するためにサードパーティのツールを使用しました。

今、私はこれをどのように行っていますか:

  1. まず、キャンバス データを UI から JSON 形式でサーバーに送信し、そこでそれを MemoryStream に変換する Web メソッドを作成しました。

  2. MemoryStream を pdf ドキュメントに変換するサーバー ボタン クリック イベントを呼び出します。正常に作成されています。

しかし、次のコードを使用してそれを返したとき:

        HttpContext.Current.Response.Buffer = true;
        HttpContext.Current.Response.ClearContent();
        HttpContext.Current.Response.ClearHeaders();
        // inform the browser about the binary data format
        HttpContext.Current.Response.AddHeader("Content-Type", "application/pdf");

        // let the browser know how to open the PDF document
        HttpContext.Current.Response.AddHeader("Content-Disposition",
          String.Format("{0}; filename=HtmlToPdf.pdf;size={1}", "attachment",           pdfBuffer.Length.ToString()));
     HttpContext.Current.Response.BinaryWrite(pdfBuffer);
  //HttpContext.Current.Response.End();
HttpContext.Current.ApplicationInstance.CompleteRequest();

それは私に次の例外を与えます:

[FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters. ]
   System.Convert.FromBase64String(String s) +0
   System.Web.UI.ObjectStateFormatter.Deserialize(String inputString) +77
   System.Web.UI.ObjectStateFormatter.System.Web.UI.IStateFormatter.Deserialize(String serializedState) +4
   System.Web.UI.Util.DeserializeWithAssert(IStateFormatter formatter, String serializedState) +37
   System.Web.UI.HiddenFieldPageStatePersister.Load() +147

[ViewStateException: Invalid viewstate. 
    Client IP: ::1
    Port: 
    Referer: http://[mysite]/Report.aspx
    Path: /Report.aspx
    User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
    ViewState: /wEPDwUJNTc2MDY1MzA3D2QWAgIDD2QWBGYPZBYEZg9kFgxmD2QWAgIBDxYCHglpbm5lcmh0bWwFrgk8c2VsZWN0IGNsYXNzPSdzZWxlY3QnIElEPSAnZGltZW5zaW9uU2VsZWN0JyBvbkNoYW5nZT0nRXhwYW5kQWNjb3JkaW9uKHRoaXMsbGJsVGV4dCknPiA8b3B0Z3JvdXAgbGFiZWw9J1RpbWUnIGlkPSdUX1lfRGltZW5zaW9uXzEnPiA8b3B0aW9uIGlkID0nWScgdmFsdWUgPScwXzJfMV8xX0lOX1RpbWUnPlllYXJseTwvb3B0aW9uPiA8b3B0aW9uIGlkID0nTScgdmFsdWUgPScwXzJfMV8xX0lOX1RpbWUnPk1vbnRobHk8L29wdGlvbj4gPG9wdGlvbiBpZCA9J0QnIHZhbHVlID0nMF8yXzFfMV9JTl9UaW1lJz5EYWlseTwvb3B0aW9uPiA8b3B0aW9uIGlkID0nSCcgdmFsdWUgPScwXzJfMV8xX0lOX1RpbWUnPkhvdXJseTwvb3B0aW9uPiA8L29wdGdyb3VwPiA8b3B0Z3JvdXAgbGFiZWw9J0dlb2dyYXBoeScgaWQ9J0dfWV9EaW1lbnNpb25fMic...

ここで何が欠けているのか教えてください。

4

1 に答える 1

0

この少しの例外はかなり役に立ちます:

[FormatException: 入力は有効な Base-64 文字列ではありません。これは、base 64 以外の文字、3 つ以上の埋め込み文字、または埋め込み文字の間に空白以外の文字が含まれているためです。]

この方法で試してください:

Response.AddHeader("Content-Disposition", "attachment; filename=" + FileName );
Response.AddHeader( "Content-Length", strFileSize );
Response.ContentType = "application/pdf" ;
于 2013-10-25T13:02:31.863 に答える