c #: экспорт SWF-объекта как изображения в Word - PullRequest
0 голосов
/ 28 марта 2010

на моей веб-странице Asp.net (C # на бэкенде) я использую Repeater, элементы которого состоят из заголовка и диаграммы Flex (встроенный файл .swf). Я пытаюсь экспортировать содержимое повторителя в документ Word. Моя проблема - преобразовать SWF-файлы в изображения и передать их в документ Word.

У объекта swf есть открытая функция, которая возвращает собственное представление byteArray (открытая функция grabScreen (): ByteArray), но я не знаю, как вызвать его напрямую из c #. У меня есть доступ к файлам mxml, поэтому я могу вносить изменения в файлы swf, если это необходимо.

Код показан ниже, и ваша помощь приветствуется:)

.aspx

<asp:Button ID="Button1" runat="server" text="export to Word" onclick="print2"/>

<asp:Repeater ID="rptrQuestions" runat="server"   OnItemDataBound="rptrQuestions_ItemDataBound" >
...
<ItemTemplate>
<tr>  
<td>  
<div align="center">
  <asp:Label class="text" Text='<%#DataBinder.Eval(Container.DataItem, "Question_title")%>' runat="server" ID="lbl_title" NAME="lbl_title"/>
<br>
</div>
</td>
</tr>
<tr><td>


  <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="result_survey"  width="100%" height="100%" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
       <param name="movie" value="result_survey.swf" />
       <param name="quality" value="high" />
       <param name="bgcolor" value="#ffffff" />
       <param name="allowScriptAccess" value="sameDomain" />
       <param name="flashvars" value='<%#DataBinder.Eval(Container.DataItem, "rank_order")%>' />  
       <embed src="result_survey.swf?rankOrder='<%#DataBinder.Eval(Container.DataItem, "rank_order")%>' quality="high" bgcolor="#ffffff" width="100%" height="100%"
         name="result_survey" align="middle" play="true" loop="false"  allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer">
        </embed>
     </object>


</td></tr>
</ItemTemplate>
</asp:Repeater> 

с #

protected void print2(object sender, EventArgs e)
{
    HttpContext.Current.Response.Clear();
    HttpContext.Current.Response.Charset = "";
    HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF7;
    HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    HttpContext.Current.Response.ContentType = "application/msword";
    HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + "Report.doc");
    EnableViewState = false;
    System.IO.StringWriter sw = new System.IO.StringWriter();
    HtmlTextWriter htw = new HtmlTextWriter(sw);
    // Here I render the Repeater
    foreach (RepeaterItem row in rptrQuestions.Items)
    {
        row.RenderControl(htw);
    }
    StringBuilder sb1 = new StringBuilder();
    sb1 = sb1.Append("<table>" + sw.ToString() + "</table>");
    HttpContext.Current.Response.Write(sb1.ToString());
    HttpContext.Current.Response.Flush();
    HttpContext.Current.Response.End();
}

.mxml

//##################################################
// grabScreen  (return image representation of the SWF movie (snapshot)
//######################################################
public function grabScreen() : ByteArray
{
return ImageSnapshot.captureImage( boxMain, 0, new   PNGEncoder()  ).data();
}

1 Ответ

0 голосов
/ 28 марта 2010

Ваш Flash передает данные в значение JavaScript. Затем этот JavaScript может выполнить AJAX-вызов кода ASP.Net, отправив байты изображения, а затем ваш код C # может обработать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...