package gutenberg.itext.pegdown; import com.itextpdf.text.Element; import com.itextpdf.text.Phrase; import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPHeaderCell; import gutenberg.itext.CellStyler; import gutenberg.pegdown.TreeNavigation; import org.pegdown.ast.Node; import org.pegdown.ast.TableCellNode; import org.pegdown.ast.TableHeaderNode; import org.pegdown.ast.TableRowNode; import java.util.List; /** * @author <a href="http://twitter.com/aloyer">@aloyer</a> */ public class TableCellNodeProcessor extends Processor { @SuppressWarnings("unchecked") @Override public void process(int level, Node node, InvocationContext context) { TreeNavigation nav = context.treeNavigation(); boolean isHeaderCell = nav.ancestorTreeMatches(TableCellNode.class, TableRowNode.class, TableHeaderNode.class); CellStyler cellStyler = context.peekCellStyler(); context.pushFont(cellStyler.cellFont()); List<Element> elements = context.collectChildren(level, node); context.popFont(); Phrase phrase = new Phrase(); phrase.addAll(elements); int colspan = ((TableCellNode) node).getColSpan(); PdfPCell cell = isHeaderCell ? headerCell(phrase) : new PdfPCell(phrase); cell.setColspan(colspan); cellStyler.applyStyle(cell); context.append(cell); } private PdfPHeaderCell headerCell(Phrase phrase) { PdfPHeaderCell headerCell = new PdfPHeaderCell(); headerCell.setPhrase(phrase); return headerCell; } }