2014-10-31 48 views
0

我想將Html轉換爲PDF。我正在使用iTextSharp。我發現iTextSharp不支持CSS。事實上,我認爲HtmlWorker線程不支持這一切。爲了解決我的問題iTextSharp似乎也不支持RowSpan。RowSpan無法在iTextSharp中使用?

這就是我試圖產生:http://jsbin.com/jovugohuju/1/edit?html,output

<table border="1" width="700"> 
    <tr> 
      <td colspan="5" align="center" bgcolor="lightblue">INVOICE</td> 
    </tr> 
    <tr> 
      <td colspan="2" rowspan="4" bgcolor="white"><b>AIRNET NETWORKS</b> 
        <br>asdadadadaada asd asd a ads adsadsadsadasd</td> 
      <td>INVOICE</td> 
      <td>DATE</td> 
      <td>aDATEsd</td> 
    </tr> 
    <tr> 
      <td>Order</td> 
      <td>XXXX</td> 
      <td>Ref XXXXXX</td> 
    </tr> 
    <tr> 
      <td>Delivery</td> 
      <td>XXXX</td> 
      <td>Ref XXXXXX</td> 
    </tr> 
    <tr> 
      <td>Due Date</td> 
      <td>XXXX</td> 
      <td>Ref XXXXXX</td> 
    </tr> 
    <tr> 
      <td colspan="2" rowspan="4" bgcolor="white"> 
        <p><b>CUSTOMER NAME</b> 
        </p>asd asd adadaadadadada adadaadsasdad ada asd adad</td> 
    </tr> 
    <tr> 
      <td>Customer Care No:</td> 
      <td colspan="2">544646454,88877978975</td> 
    </tr> 
    <tr> 
      <td>Email Id</td> 
      <td colspan="2">[email protected]</td> 
    </tr> 
    <tr> 
      <td>Account Details</td> 
      <td colspan="2">5522245125545455 IFSC 323hasd</br>SBI India</td> 
    </tr> 
</table> 

<table border="1" width="700"> 
    <tr> 
      <td bgcolor="lightblue" height="15">Srno</td> 
      <td bgcolor="lightblue">Particulars</td> 
      <td bgcolor="lightblue">Quantity</td> 
      <td bgcolor="lightblue">Rate/Month</td> 
      <td bgcolor="lightblue">Total Rupees</td> 
      <tr> 
        <td valign="top">1</td> 
        <td valign="top">1 MBPS Plan</td> 
        <td valign="top">1</td> 
        <td valign="top">600</td> 
        <td valign="top">692</td> 
      </tr> 
    </tr> 
    <tr> 
      <td height="300" valign="top">1</td> 
      <td valign="top">1 MBPS Plan</td> 
      <td valign="top">1</td> 
      <td valign="top">600</td> 
      <td valign="top">692</td> 
    </tr> 
    <tr> 
      <td colspan="3" rowspan="3" valign="top">asdasdasd</td> 
      <td colspan="1">Total</td> 
      <td colspan="1">692</td> 
    </tr> 
    <tr> 
      <td>Service Tax</td> 
      <td>692</td> 
    </tr> 
    <tr> 
      <td>Grand Total</td> 
      <td>692</td> 
    </tr> 
</table> 

C#代碼:

Document document = new Document(); 
document.SetPageSize(iTextSharp.text.PageSize.A4); 
iTextSharp.text.pdf.draw.LineSeparator line1 = new iTextSharp.text.pdf.draw.LineSeparator(0f, 100f, iTextSharp.text.Color.BLACK, Element.ALIGN_LEFT, 1);  
string NEWhtmlText="<table border='1' width='500' > <tr> <td bgcolor='lightblue' height='15' >Srno</td><td bgcolor='lightblue'>Particulars</td><td bgcolor='lightblue' >Quantity</td><td bgcolor='lightblue'>Rate/Month</td><td bgcolor='lightblue'>Total Rupees</td> </tr> <tr> <td valign='top' >1</td><td valign='top' >1 MBPS Plan</td><td valign='top'>1</td><td valign='top'>600</td><td valign='top'>692</td> </tr> <tr> <td height='300' valign='top' >1</td><td valign='top' >1 MBPS Plan</td><td valign='top'>1</td><td valign='top'>600</td><td valign='top'>692</td> </tr> <tr><td colspan='3' rowspan='3' valign='top'>asdasdasd</td><td colspan='1'>Total</td><td colspan='1'>692</td></tr> <tr><td>Service Tax</td><td>692</td></tr> <tr><td>Grand Total</td><td>692</td></tr> </table>"; 
PdfWriter.GetInstance(document, new FileStream(saveFileDialog1.FileName, FileMode.Create)); 
document.Open(); 
iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(document); 
hw.Parse(new StringReader(NEWhtmlText)); 
document.Close(); 

OUTPUT(無用):

https://snag.gy/RJ70f.jpg

回答

2

請看看下面的屏幕截圖:

enter image description here

到左邊,你會看到在瀏覽器中呈現的HTML文件。在右邊,您會看到使用iText(Java版本)將該HTML文件呈現爲PDF。請注意,iTextSharp關於HTML到PDF的功能與Java相同,因此您不應該發佈問題「在iTextSharp中不起作用」,因爲聽起來好像iTextSharp無法實現您想要的操作(這是一個不正確的指控),而實際問題是由您在編寫代碼時所犯的一些個人錯誤引起的。這是不友善指責的工具爲自己的錯誤;-)

有三個原因,你的應用程序不工作:

  1. 你的HTML沒有意義。我必須清理它(將<br>更改爲<br />,引入正確的CSS,更正某些行的列數......),並在XHTML正確顯示在瀏覽器中之前將其設置爲XHTML。您可以在這裏找到屏幕截圖中使用的HTML:table2_css.html
  2. 您正在使用HTMLWorker而不是XML Worker,並且您是對的:HTMLWorker不支持CSS。說iTextSharp CSS不起作用是錯誤的。當你使用HTMLWorker時它不起作用,但是這是記錄的:你需要的CSS在XML Worker中工作。
  3. 您可能正在使用舊版本的iTextSharp,並且您是對的:與最新版本相比,CSS和表格支持不如舊版本的iTextSharp。

查看官方iText站點上的XML Worker頁面以獲取更多信息。除iTextSharp外,您還需要下載XML Worker。示例是written in Java,但將它們轉換爲C#應該沒有問題。我用來製作屏幕截圖中的PDF的示例(html_table_4.pdf)可在此處找到:ParseHtmlTable4

public void createPdf(String file) throws IOException, DocumentException { 
    // step 1 
    Document document = new Document(); 
    // step 2 
    PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file)); 
    // step 3 
    document.open(); 
    // step 4 
    XMLWorkerHelper.getInstance().parseXHtml(writer, document, 
      new FileInputStream(HTML)); 
    // step 5 
    document.close(); 
}