2016-09-19 70 views
1

我正在成功繪製HTML5畫布並將畫布保存到服務器上的PNG文件。然後我使用iTextsharp將PNG打印成PDF。 所有這些都很好,但這是我的問題。asp.net將PNG寫入磁盤後的代碼問題 - iTextSharp和PDFStamper

我的代碼在屏幕上顯示PNG,當我不想顯示它時。 然後我必須讓用戶按下後退按鈕來查看PDF列表。 當發生這種情況時一切正常,但我不想PNG。 但是,如果關閉了PNG的內容類型代碼,所以PNG不顯示,則不會使用生成的最後一個PDF填充PDF列表,並且代碼會在先前的Canvas簽名中重新執行第二次。這比看到PNG和按下後退按鈕更糟糕。

設置「response.end」在我的代碼情況下不起作用。因爲我必須使用Base64 PNG代碼填充隱藏的表單變量並運行一些jquery。

你可以請我建議一些我可以做的不顯示PNG,但顯示更新列表的屏幕?我使用asp.net vb我不擅長asp.net,但我正在學習。

' take the canvas signature and write it to the Build folder path as a PNG 
' the txtPNG hidden form field has the png base64 
Dim base64 As String = txtPNG.Text 
base64 = base64.Replace("data:image/png;base64,", "") 
Dim bytes As Byte() = Convert.FromBase64String(base64) 
Response.Buffer = True 
Response.Clear() 
Response.ClearContent() 

System.IO.File.WriteAllBytes(strBuildFilePath & "\" & strFilenameToSave & ".png", bytes) 
Response.ContentType = "image/png" 
Response.Cache.SetCacheability(HttpCacheability.NoCache) 
Response.BinaryWrite(bytes) 

'do not use Response.end() or code doesn't work to generate the PDF etc. 

這是我使用四處移動PNG /畫布圖像的jQuery部分:

 $(function() { 
      $("#btnSaveASP").on('click', function(e) { 
       e.preventDefault(); 
       var canvas = document.getElementById('cnvSignatureSketch'); 
       var imgData = canvas.toDataURL(); 
       //alert(imgData); 
       $("#<%=imgASP.ClientID %>") 
      .attr("src", imgData) 
       $("#<%=txtPNG.ClientID %>") 
      .attr("value", imgData) 

       //now click another button, btnexport, via jquery 
       //so user doesn't need to click two buttons 
       $("#<%=btnExport.ClientID %>").click(); 
      }); 
     }); 

回答

0

好了,沒有答案。我想到了。

一個很好的老式Response.redirect在WriteAllBytes後工作