RowSpan在iTextSharp中不起作用?

时间:2014-10-31 16:13:12

标签: c# html pdf html-table itext

我正在尝试将Html转换为PDF。我正在使用iTextSharp。我发现iTextSharp不能很好地支持CSS。事实上,我认为HtmlWorker线程不支持所有。为了解决我的问题,iTextSharp似乎也不支持RowSpan。

这就是我想要生成的内容: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">airnet@gmail.com</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#CODE:

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

1 个答案:

答案 0 :(得分:2)

请看下面的截图:

enter image description here

在左侧,您会看到在浏览器中呈现的HTML文件。在右侧,您可以看到使用iText(Java版本)呈现为PDF的HTML文件。请注意,iTextSharp关于HTML到PDF的功能与Java相同,因此您不应该发布问题,说明&#34;在iTextSharp&#34; 中不起作用,因为听起来好像是iTextSharp无法实现您想要做的事情(这是一个不正确的指控),而实际问题是由您在编写代码时所犯的一些错误引起的。为自己的错误责备工具并不友好; - )

您的申请无法运作有三个原因:

  1. 您的HTML没有意义。我必须清理它(将<br>更改为<br />,引入正确的CSS,更正某些行的列数,...)并在浏览器中正确呈现之前将其设为XHTML。您可以在此处找到屏幕截图中使用的HTML:table2_css.html
  2. 您正在使用HTMLWorker而不是XML Worker,而您是对的:HTMLWorker不支持CSS。说CSS在iTextSharp中不起作用是错误的。使用HTMLWorker时它不起作用,但记录了:您需要的CSS在XML Worker中有效。
  3. 您可能正在使用旧版本的iTextSharp,而且您说得对:与最新版本相比,CSS和表格支持与旧版iTextSharp一样好。
  4. 有关详细信息,请参阅官方iText网站上的XML Worker页面。除iTextSharp外,您还需要下载XML Worker。示例是written in Java,但是将它们转换为C#应该没有问题。我在屏幕截图(html_table_4.pdf)中制作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();
    }