2016-03-15 57 views
0

我有,我想用iTextSharp .HTML模板位於以下位置HTML到PDF使用iTextSharp的圖書館在ASP.NET

到使用Server.Mappath轉換Html Template to pdf方案(「〜/模板/ CertificateMailTemplate的.html「)

這是下面的代碼,我已經試過

public string SendCertificate() 
    {   
     try 
     { 
      byte[] outputstream = null;  
      using (var stream = new MemoryStream()) 
      { 
       using (var document = new Document()) 
       { 
        using (var writer = PdfWriter.GetInstance(document, stream)) 
        { 
         document.Open(); 
         using (var html = new StringReader(Server.MapPath("~/Template/CertificateMailTemplate.html"))) 
         { 
          XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, html); 
         } 
        } 
       } 

       outputstream = stream.ToArray(); 
      } 

      //Mail sending code 
      return "success"; 
     } 
     catch (Exception ex) 
     { 
      return ex.Message; 
     } 
     finally 
     { 
      if (reader != null) 
      { 
       reader.Dispose(); 
      } 
     } 
    } 

在這裏,我收到以下錯誤The document has no pages.

任何幫助將不勝感激。

+0

權!我仍然陷入了Java 5的困境。:) –

回答

0

ParseXHtml方法需要TextReader作爲第三個參數,Microsoft提供該類的兩個主要實現:StringReaderStreamReader

StringReader(您正在使用的)適用於您希望採用現有.Net字符串並將其讀取爲字符序列的情況。

StreamReader(你應該切換到)當你想要一個字節源(如文件)並將其讀取爲一系列字符時。

您正在傳遞一個字符串,如「c:\ blah \ blah \ blah.hthml」,而iTextSharp正在將其解釋爲您的HTML,而不是您的HTML路徑。

如果你想讓.Net大膽猜測文件的編碼,你可以使用構造函數StreamReader(String)一對一交換你的代碼。如果您知道文件的特定編碼,則可以使用其中一個重載,如StreamReader(String, Encoding)

所以,這條線:

//Incorrect 
using (var html = new StringReader(Server.MapPath("~/Template/CertificateMailTemplate.html"))) 

應改爲:

//Correct 
using (var html = new StreamReader(Server.MapPath("~/Template/CertificateMailTemplate.html"))) 
+0

如果你能提供一個例子,它對我來說將是一個很好的幫助。 – ksg