iText5.0.6 用 HTMLWorker 转换 HTML 为 PDF 已支持单元格宽度设置

前有一文 iText 用 HTMLWorker 转换 HTML 为 PDF 时可设置表格列宽度 介绍了在 iText5.0.4 的基础上转换 html 为 pdf 时,如何让 table 中的单元格能支持宽度设定,并且还修改了三份源代码: HTMLWorker.java、IncCell.java 和 IncTable。也只是实现了以百分比形式来设定每列的相对宽度,现在好了,iText 顺理的发现了用户的这一需求,在进化后的 iText5.0.6 中可以让你设定 <td> 的宽度,可直接用百分比数值(20%)相对宽度,或用参照数值来设置,之后呢,HTMLWorker 会帮你转换为相对的宽度--比如有三列,分别设置为 20,10,50,被转换为相对宽度就是 25%,12.5% 和 62.5%。

看iText5.0.6 简短的 release 说明,iText5.0.6 has been released(http://lowagie.com/node/73):

最主要的改变就是 HTMLWorker,也就是 HTML 直接转换为 PDF 那块功能,加了些新特性。不仅如此,这部分的代码被重写了,更多的标签和样式支持还该期待不久的 iText 5.1.0。

再看 iText5.0.6 的 changelogs http://www.itextpdf.com/history/index.php?branch=50&node=506,其中有:

HTMLWorker: relative cell widths are supported in tables (Samuli Tuomola).
说的正是可以支持单元格相对宽度的设置。

其实我们可以对比一下 iText5.0.4 与 iText5.0.6 关于 HTMLWorker 的类改动较大了。原来的 IncTable 现在是 TableWrapper,IncCell 变成了 CellWrapper,使用了 HTMLTabProcessor 新类便用支持更多的 html,css 特性及后续的扩展。

看图可以大致对照一下:

其他与 HTMLWorker 相关的改变还有:

Reorganization of HTMLWorker and related classes

    * Patch #3044060 by Nurettin Dag: padding-left was ignored when parsing HTML with HTMLWorker
    * Patch #3044063 by Nurettin Dag: bullets generated from HTML need extra space
    * Patch #3044071 by Nurettin Dag: making some private variables protected so that users can access them from a subclass.
    * Patch #3044077 by Nurettin Dag: When a paragraph containing an image is converted to PDF using HTMLWorker height of the line is calculated only by the size of the text in it. The calculation of lines containing images should consider the image height as well.
    * Patch #3044496 by Nurettin Dag: support for table alignment in HTMLWorker.
    * Patch #3105516 by Nurettin Dag: Using HTMLWorker if a table has alignment defined it also applied to rows in the table (and it shouldn't).
    * Patch #3044568 by Nurettin Dag: Whitespace in HTML isn't always ignored when it should be
    * Static final String values for HTMLWorker providers. See suggestion by Keith O. on the mailing list.
    * Rewrite of HTMLWorker introducing an HTMLTagProcessor interface
    * Adding a new constructor for HTMLWorker taking a Map of tags and HTMLTagProcessor objects
    * Replacing hard coded Strings by a static final String.
    * Removing ElementTags and Markup in favor of HtmlTags.

Unmi: 虽如此,本人觉得 iText5.0.6 的 HTMLWorker 还欠些火候

1. 表格上列的宽度无法由第一行的各个 <td> 的宽度来觉定,举个例子就是,假如某个表格,第一行各列<td>设置了宽度,但是后面的 <td> 未设置宽度,在网页上是可以由第一行的列宽来分配,而在 iText5.0.6 中是由最后一行的列宽设置决定的,自顶向下。
2. 表格必须指定 width 属性,否则基本宽度视为 0,不能显示,这在 iText5.0.4 中是可以更好的处理的。

类别: Java/JEE. 标签: . 阅读(1,530). 订阅评论. TrackBack.

Leave a Reply

Be the First to Comment!

avatar
wpDiscuz