2012-09-26 266 views
1

使用下面的代碼ASP.net/iTextSharp到HTML文件的內容解析爲一個PDF並轉存到響應流:iTextSharp的XMLWorkerHelper HTML到PDF表格對齊

Response.Clear(); 
Response.ContentType = "application/pdf"; 
using (Document doc = new Document()) 
{ 
    PdfWriter writer = PdfWriter.GetInstance(doc, Response.OutputStream); 
    doc.Open(); 
    using (TextReader reader = File.OpenText(Server.MapPath("~/Test.htm"))) 
    { 
     XMLWorkerHelper.GetInstance().ParseXHtml(writer, doc, reader); 
    } 
    doc.Close(); 
} 
Response.End(); 

這工作,但由此產生的PDF格式不像原來的HTML頁面。對於初學者來說,內置的css解析器似乎只能使用直接標記樣式和類(不像以下鏈接:thead th { background-color:#999; })。

其次,它看起來是邊界是一個全或無的交易。它沒有邊界頂部,邊界底部等概念,並且邊界崩潰不會摺疊相鄰單元格的邊界,因此邊界最終會達到我想要的兩倍。

最後,我不知道如何將表格對齊到文檔的左側或右側。它始終居中。我嘗試用div對齊文本,嘗試設置align屬性,試圖直接在表格上設置文本對齊。無法找出那一個?

這裏是我的演示文檔我想作爲一個驗證的概念,使用方法:

<!DOCTYPE html> 
<html> 
<head> 
    <title>This is the title</title> 
    <meta name="description" content="This is the description" /> 
    <meta name="keywords" content="abc, 123, xyz" /> 
    <style type="text/css"> 
     body { font-family:Arial, Verdana, Sans-Serif; font-size:9pt; } 
     .dataGrid { font-family:Arial, Verdana, Sans-Serif; font-size:9pt; border-collapse: collapse; border:1px solid #000; width:80%; margin:0; text-align:left; } 
     th { padding:3px 4px; font-weight:bold; border:1px solid #000; } 
     td { padding:3px 4px; border:1px solid #000; } 
     .head { border-bottom:2px solid #000; background-color:#9BBA1F; font-weight:bold; } 
     .odd { background-color:#fff; } 
     .even { background-color:#D6EB87; } 
     .foot { border-top:2px solid #000; background-color:#BAB0C4; font-weight:bold; } 
     h1 { font-size:14pt; color:#FFA200; text-align:center; } 
     .right { text-align:right; } 
     .center { text-align:center; } 
     .left { text-align:left; } 
    </style> 
</head> 
<body> 
    <h1>Sample Document</h1> 

    <div style="text-align:left;"> 
    <table class="dataGrid" align="left"> 
     <thead> 
      <tr class="head"> 
       <th width="70%">Name</th> 
       <th width="15%" class="center">Qty</th> 
       <th width="15%" class="center">Price</th> 
      </tr> 
     </thead> 
     <tbody> 
      <tr class="odd"> 
       <td>ABC</td> 
       <td class="center">2</td> 
       <td class="right">$5.00</td> 
      </tr> 
      <tr class="even"> 
       <td>XYZ</td> 
       <td class="center">1</td> 
       <td class="right">$10.00</td> 
      </tr> 
      <tr class="odd"> 
       <td>123</td> 
       <td class="center">3</td> 
       <td class="right">$2.00</td> 
      </tr> 
      <tr class="even"> 
       <td>789</td> 
       <td class="center">1</td> 
       <td class="right">$4.00</td> 
      </tr> 
     </tbody> 
     <tfoot> 
      <tr class="foot"> 
       <td class="right">Totals</td> 
       <td class="center">7</td> 
       <td class="right">$30.00</td> 
      </tr> 
     </tfoot> 
    </table> 
    </div> 
</body> 
</html> 

回答

1

願意花大量的時間後,我不能讓它正常工作。因此,我結束了切換到另一個工具:wkHtmlToPdf。我使用Nuget中提供的Codaxy包裝類來幫助創建調用,並且看到比iTextSharp更好的結果。它主要理解CSS選擇器,並自動處理圖像和鏈接等內容。