类CSS内定元素未使用ITextSharp(5.5.1)XHTML应用于PDF

时间:2014-07-09 18:07:11

标签: css pdf xhtml html-table itext

更新:ITextSharp 5.5.2支持此功能,但以前版本的ITextSharp不支持。

ITextSharp 5.5.1是否支持Class Element CSS选择器?如

<style>
    .test td {
        border: 1px solid green;
    }
</style>

我得到了这样的结果

Bad CSS

什么时候应该是

Good CSS

如果不是我将如何实现相同的结果?

使用以下代码,我得不到所需的结果。

byte[] bytes;
Document document = new Document();

using (var memoryStream = new MemoryStream())
using (var pdfWriter = PdfWriter.GetInstance(document, memoryStream))
{
    document.Open();
    XMLWorkerHelper.GetInstance().ParseXHtml(pdfWriter, document, new StringReader(html));
    document.Close();
    bytes = memoryStream.ToArray();
}

return bytes;

这是我的完整HTML供参考

<html>
<head>
<style>
    .test td {
        border: 1px solid green;
    }
</style>
</head>
<body>
<table class='test'>
  <tr>
    <th>Firstname</th>
    <th>Lastname</th>
    <th>Savings</th>
  </tr>
  <tr>
    <td>Peter</td>
    <td>Griffin</td>
    <td>$100</td>
  </tr>
  <tr>
    <td>Lois</td>
    <td>Griffin</td>
    <td>$150</td>
  </tr>
  <tr>
    <td>Joe</td>
    <td>Swanson</td>
    <td>$300</td>
  </tr>
  <tr>
    <td>Cleveland</td>
    <td>Brown</td>
    <td>$250</td>
</tr>
</table>
</body>
</html>

1 个答案:

答案 0 :(得分:1)

这是一个奇怪的问题,因为XML Worker的默认实现完全符合您的需要。我们有一个转换为table_css.html的HTML文件html_table_3.pdf,我们只使用基本的XML Worker代码:ParseHtmlTable3

enter image description here

您只需要5行即可获得屏幕截图中显示的结果:

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();
}