2012-06-21 26 views
1

我正在使用MVC3和iTextSharp。獲取當前HTML代碼並創建PDF

首先添加了一個Save和CreatePDF按鈕。使用PDF按鈕,我調用了一個Method,它返回所示WebPage的實際HTML代碼。

到目前爲止這麼好,現在我開始用iTextSharp生成PDF。我想知道,它是第一次嘗試,但在向iTextSharp添加MVC Grid Table之後,仍然會創建一個PDF,但會出現錯誤消息。

ERRORURI-Formate不受支持。

任何建議,以使其工作?

網格建立這樣的

 @Html.DataGridFor(m => m.ConfigurationArticleList, ItemContainerType.tr, 
     _S.H<ConfigurationArticle>(
     @<text>   
      <td class="ToDo"> 
       @item.ValidationMessageFor(m => m.ArtNr, "*") 
       @item.TextBoxFor(m => m.ArtNr) 
      </td> 
      <td class="ToDo"> 
       @item.ValidationMessageFor(m => m.Bezeichnung, "*") 
       @item.TextBoxFor(m => m.Bezeichnung) 
      </td> 
      <td class="ToDo"> 
       @item.ValidationMessageFor(m => m.Anzahl, "*") 
       @item.TextBoxFor(m => m.Anzahl) 
      </td> 
     </text> 
     ), 
     _S.H<ConfigurationArticle>(
     @<text>   
      <td class="ToDo"> 
       @item.ValidationMessageFor(m => m.ArtNr, "*") 
       @item.DisplayField(m => m.ArtNr) 
      </td> 
      <td class="editor-field"> 
       @item.ValidationMessageFor(m => m.Bezeichnung, "*") 
       @item.DisplayField(m => m.Bezeichnung) 
      </td> 
      <td class="ToDo"> 
       @item.ValidationMessageFor(m => m.Anzahl, "*") 
       @item.DisplayField(m => m.Anzahl) 
      </td> 
     </text> 

此外,文件路徑爲PDF還是硬編碼,任何想法得到SAVEFILE-對話框或其他什麼東西?

+0

'iTextSharp'不正式支持將HTML轉換爲PDF,並且某些功能根本不起作用。如果您希望支持所有HTML和CSS功能,則必須使用其他框架進行轉換。 –

+0

[This](http://www.codeproject.com/Articles/66948/Rendering-PDF-views-in-ASP-MVC-using-iTextSharp)或[this](http://stackoverflow.com/questions/ 6660093/html-to-pdf-asp-net-mvc)可以提供幫助。 –

回答

2

ABCpdf - 是一個很好的工具,可以做更多的工作。我們更喜歡它在我們的項目中,並且沒有問題。 ABCpdf

+0

它似乎是一個很好的選擇。還有「itext pdf」開源生成器工具,看起來更糟糕。 –

0

我建議您使用wkhtmltopdf而不是ITextSharp。它是一個使用Web Kit渲染引擎的開源可執行文件。它產生很好的pdf輸出。如果你想從一個MVC的Web站點上使用它,那麼你可以用下面的代碼運行:

var procStartInfo = new ProcessStartInfo("wkhtmltopdf.exe", "input.html output.pdf"); 
procStartInfo.RedirectStandardOutput = true; 
procStartInfo.UseShellExecute = false; 
procStartInfo.CreateNoWindow = true; 
Process proc = new Process(); 
proc.StartInfo = procStartInfo; 
proc.Start(); 

它會在您的服務器的文件系統上的輸出,但是你可以很容易地閱讀和寫入HTTP響應。

Response.ContentType = "Application/pdf"; 
Response.AddHeader("Content-Type", "application/pdf"); 
Response.AddHeader("Content-Disposition", "attachment; filename=output.pdf"); 
string filePath = "output.pdf"; 
Response.WriteFile(filePath); 
Response.End();