我正在尝试将 Html 转换为 PDF。我正在使用 iTextSharp。我发现iTextSharp对CSS的支持不太好。事实上我认为 HtmlWorker 线程并不支持这一切。让我的问题更加复杂的是,iTextSharp 似乎也不支持 RowSpan。
这就是我想要生成的:http://jsbin.com/jovugohuju/1/edit?html,输出 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] /cdn-cgi/l/email-protection</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();
输出(不需要):
请看下面的屏幕截图:
在左侧,您可以看到浏览器中呈现的 HTML 文件。在右侧,您可以看到使用 iText(Java 版本)将 HTML 文件呈现为 PDF。请注意,iTextSharp 关于 HTML 到 PDF 的功能与 Java 相同,因此您不应该发布问题说“在 iTextSharp 中不起作用”因为这听起来好像 iTextSharp 无法实现您想要做的事情(这是一个不正确的指控),而实际问题是由您在编写代码时犯的一些个人错误引起的。将自己的错误归咎于工具是不友好的;-)
您的应用程序无法运行的原因有以下三个:
- 你的 HTML 没有意义。我必须清理它(改变
<br>
into <br />
,引入正确的CSS,更正某些行的列数,...)并在浏览器中正确呈现之前将其设置为XHTML。您可以在此处找到屏幕截图中使用的 HTML:表2_css.html http://itextpdf.com/sites/default/files/table2_css.html
- 您正在使用
HTMLWorker
而不是 XML Worker,你是对的:HTMLWorker
不支持 CSS。说 CSS 在 iTextSharp 中不起作用是错误的。使用时不起作用HTMLWorker
,但这是有记录的:您需要的 CSS 在 XML Worker 中工作。
- 您可能使用的是旧版本的 iTextSharp,您是对的:与最新版本相比,CSS 和表格支持不如旧版本的 iTextSharp 那么好。
See the XML工作者 http://itextpdf.com/product/xml_worker欲了解更多信息,请访问 iText 官方网站。除了iTextSharp之外,您还需要下载XML工作者 http://sourceforge.net/projects/itextsharp/files/xmlworker/。例子是用Java编写的 http://itextpdf.com/sandbox/xmlworker,但是将它们转换为 C# 应该没有问题。我用来在屏幕截图中制作 PDF 的示例(html_table_4.pdf http://itextpdf.com/sites/default/files/html_table_4.pdf)可以在这里找到:解析HtmlTable4 http://itextpdf.com/sandbox/xmlworker/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();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)