CSS转PDF,飞碟中的CSS:-fs-table-paginate导致边界崩溃:崩溃无效

时间:2012-05-09 08:18:56

标签: html css flying-saucer xhtmlrenderer

现在我使用 xhtmlrenderer 将html转换为PDF。 我的maven依赖如下:

    <dependency>
        <groupId>org.mvel</groupId>
        <artifactId>mvel2</artifactId>
        <version>2.1.0.drools2</version>
        <scope>compile</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.xhtmlrenderer</groupId>
        <artifactId>core-renderer</artifactId>
        <version>R8</version>
        <scope>compile</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>com.lowagie</groupId>
        <artifactId>itext</artifactId>
        <version>2.0.8</version>
        <scope>compile</scope>
        <optional>true</optional>
    </dependency>

我试图在每个PDF页面重复表头。所以我使用css  : table { -fs-table-paginate: paginate; }。CSS的解释是here

-fs-table-paginate
  • 与值(-fs-table-paginate)paginate一起使用时,修改表格布局 算法在后续页面上重复表格页眉和页脚 改善跨越页面的单元格的外观(例如 通过关闭和重新开放边界),但就是这样。如果一个 桌子的最小宽度比页面宽,它会被切断。

  • 当添加上面的css时,我的表的边框被分离。

enter image description here

  • 在我添加css之前,表格的边框会折叠成单边框。

enter image description here

所以我认为table { -fs-table-paginate: paginate;使我的表border-collapse:collapse无效。 那么我该如何解决这个问题,让桌子的边框崩溃?

我的应用CSS表格如下

table{
    border:1px solid #000000;
    border-collapse:collapse;
    -fs-table-paginate: paginate;}
table td{
    border:1px solid #000000;
    word-wrap:break-word;
    white-space:normal;
    overflow:hidden;
    text-align:left;
    line-height:16px;
    height:16px;

}
table tr{
    page-break-inside:avoid;
}
table thead tr th{
    background:#f2f2f2;
    border:1px solid #000000;
    text-align:center;
}

table tr th{
    background:#f2f2f2;
    border:1px solid #000000;
    text-align:center;
}

当有时候添加-fs-table-paginate: paginate;时,表格标题将不正常。标题将无法正确显示。在表格标题下面会增加额外的空白行。具体如下: enter image description here

任何人都知道这些想法吗?

3 个答案:

答案 0 :(得分:12)

对于同样的问题,我使用了这种解决方法:

table {
  -fs-table-paginate: paginate;
  border-spacing: 0;
}

它对我有用,我的thead会在每页上重复。

答案 1 :(得分:2)

是的......你是对的......

border-collapse:collapse和-fs-table-paginate:paginate不能使用 一起。当-fs-table-paginate设置为时,border-collapse将重置为单独的 分页...

因此,实现表头的更好方法是使用thead ... this may help u ...

答案 2 :(得分:1)

对我有用的解决方法:

将所有thtd逐个初始化,边框设置为0px:border: 0px;

然后在你需要的地方应用边框:

<td style="border: 0px; border-left: 1px solid #ddd;">some texte</td>

当然,我以-fs-table-paginate: paginate;表格式。

工作示例html:https://gist.github.com/laguiz/5509461

结果如下:

enter image description here