2014-03-14 5 views
0

Я искал способ вызвать функцию javascript из файла default.aspx.cs ... после прочтения некоторых вопросов здесь я обнаружил этот подход (Call JavaScript function from C#) Однако мне нужно использовать возвращаемое значение из функции javascript в моем .net-коде.вызов функции javascript и использование возвращаемого результата в .net-коде

Мне нужно захватить пользователей на холсте и сохранить их в изображении и добавить это изображение в файл pdf.

Вот функция JS:

getSignatureImage: function() { 
    var tmpCanvas = document.createElement('canvas') 
     , tmpContext = null 
     , data = null 

     tmpCanvas.style.position = 'absolute' 
     tmpCanvas.style.top = '-999em' 
     tmpCanvas.width = element.width 
     tmpCanvas.height = element.height 
     document.body.appendChild(tmpCanvas) 

     if (!tmpCanvas.getContext && FlashCanvas) 
      FlashCanvas.initElement(tmpCanvas) 

      tmpContext = tmpCanvas.getContext('2d') 


      tmpContext.fillStyle = settings.bgColour 
      tmpContext.fillRect(0, 0, element.width, element.height) 
      tmpContext.lineWidth = settings.penWidth 
      tmpContext.strokeStyle = settings.penColour 

      drawSignature(output, tmpContext) 
      data = tmpCanvas.toDataURL.apply(tmpCanvas, arguments) 

      document.body.removeChild(tmpCanvas) 
      tmpCanvas = null 

      return data 
     } 

Вот PDF генерирующий код в моем Default.aspx.cs:

 document.SetMargins(20f, 20f, 85f, 20f); 
     long milliseconds2 = DateTime.Now.Ticks/TimeSpan.TicksPerMillisecond; 
     //Document document = new Document(); 
     var output = new FileStream(Server.MapPath("~/PDFs/Test-File-" + milliseconds2 + ".pdf"), FileMode.Create); 
     pdfUrlLink = "Test-File-" + milliseconds2 + ".pdf"; 
     var writer = PdfWriter.GetInstance(document, output); 

     // the image we're using for the page header  
     iTextSharp.text.Image imageHeader = iTextSharp.text.Image.GetInstance(Request.MapPath(
     "~/Images/pdfHeader.jpg" 
     )); 

     // instantiate the custom PdfPageEventHelper 
     MyPageEventHandler ex = new MyPageEventHandler() 
     { 

      ImageHeader = imageHeader 
     }; 
     // and add it to the PdfWriter 
     writer.PageEvent = ex; 
     document.Open(); 
     createContent(); 
     document.Close(); 
     submitEmail(); 
      } 
    } 

Это модифицированный код от других вопросов интеграции как мир вместе:

 string SignData = null; 
     Page page = HttpContext.Current.CurrentHandler as Page; 
     page.ClientScript.RegisterStartupScript(typeof(Page), "Test", "<script type='text/javascript'>" + SignData +"=getSignatureImage();</script>"); 

Это не сработает ... Любая помощь или ввод будет оценен!

ответ

2

Вы не хотите, чтобы вызвать функцию яваскрипта из кода C#. То, что вы хотите сделать, это опубликовать данные из вашей функции javascript в своем веб-приложении, чтобы ваш код C# мог справиться с этим.

Клиентский HTML-код, на котором будет холст, будет иметь кнопку, которая при нажатии вызывает ваш javascript, чтобы получить dataUrl с холста и помещает его в поле формы - как скрытый ввод или что-то еще - и затем отправляет форму.

Ваш код C# вытащил значение из коллекции Request.Form. Значение - это кодированное изображение Base64, поэтому вам нужно будет преобразовать его в растровое изображение, а затем использовать его в вашем PDF-файле.

Вот быстрая скрипка, который демонстрирует: http://jsfiddle.net/LSRYG/

function submitImage(){ 
    var url = document.getElementById('canv').toDataURL(); 
    //this will show you the image data but you won't actually want to do this. It's just for the demo 
    alert(url); 
    //put it in the hidden imput and submit the form. 
    document.getElementById('canvImg').value = url; 

    document.getElementById('theform').submit(); 
} 

Я уверен, что вы можете узнать, как преобразовать строку dataURL к изображению в ваших C# код.

+0

Эта функция очень хорошая. Проблема в том, что мне нужно использовать функцию .net вместо функции javascript в этом проекте, иначе она не сможет использовать другие плагины. – BigGirl1017

+0

.net и javascript совершенно разные и независимы друг от друга.Вы все еще можете получить то, что хотите. То, как я понимаю ваш вопрос, состоит в том, что пользователь собирается нарисовать картинку или что-то на холсте в браузере, и вы хотите поместить эту фотографию в PDF, которую вы передаете пользователю, не так ли? Функция javascript получает изображение и отправляет его в .net-код. Ваш .net-код займет изображение и вложит его в PDF, чтобы вы все еще могли использовать ваши плагины на стороне .net. – Matthew

+0

Да, это именно то, что нужно сделать здесь. поэтому эта функция помещает изображение в id canvImg, которые доступны в C# и могут использоваться для импорта. это решило проблему прохождения ценности через. Благодаря!!! – BigGirl1017

0

Что вы нашли, так это то, как вы можете запустить браузер, чтобы запустить Javascript на загрузке страницы в приложении ASP.NET.

Я думаю, что вы ищете Javascript-компилятор в .NET. Быстрый google привел меня по этой ссылке: Embedding JavaScript engine into .NET

0

Вы можете изменить любой элемент управления, чтобы вернуть сообщение обратно, чтобы запустить javascript? Затем вы можете просто вызвать __dopostback с getSignatureImage() в качестве аргумента события и выяснить его там.

В принципе есть что-то с onclick="SendEmail();" с function SendEmail{ _doPostBack([controlClientID], getSignatureImage()); } затем на вашем PageLoad/ifpostback проверить __EVENTTARGET (первые) == пары независимо идентификатор клиента, и если он совпадает, делать обработку __EVENTARGUMENT (вторые пары), который будет ваш getSignatureImage() приводит к

либо что либо сделать WebMethod или услугу, чтобы отправить письмо с getSignatureImage() результаты

Смежные вопросы