这就是我想要生成的: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#代码:
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(不需要):
请看下面的截图:在左侧,您会看到在浏览器中呈现的HTML文件.在右侧,您可以看到使用iText(Java版本)呈现为PDF的HTML文件.请注意,iTextSharp关于HTML到PDF的功能与Java相同,因此您不应发布“在iTextSharp中不起作用”的问题,因为听起来好像iTextSharp无法实现您想要做的(这是不正确的)指控),而实际问题是由您在编写代码时所犯的一些错误引起的.为自己的错误责怪工具是不友好的;-)
您的应用程序不起作用有三个原因:
>你的HTML没有意义.我不得不清理它(将< br>更改为< br />,引入正确的CSS,更正某些行的列数,…)并在浏览器中正确呈现之前将其设为XHTML.您可以在此处找到屏幕截图中使用的HTML:table2_css.html
>您使用的是HTMLWorker而不是XML Worker,您说得对:HTMLWorker不支持CSS.说CSS在iTextSharp中不起作用是错误的.当您使用HTMLWorker时它不起作用,但是有记录:您需要的CSS在XML Worker中工作.
>您可能正在使用旧版本的iTextSharp,并且您说得对:与最新版本相比,CSS和表格支持不如旧版本的iTextSharp.
有关详细信息,请参阅官方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(); }