Skip to content

Commit b105918

Browse files
author
Salvatore Ranieri
committed
fixed issue with tables
1 parent 9a2ad0e commit b105918

1 file changed

Lines changed: 10 additions & 5 deletions

File tree

HtmlSpanner/src/main/java/com/sysdata/htmlspanner/handlers/TableHandler.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ public class TableHandler extends TagNodeHandler {
5353
private int textColor = Color.BLACK;
5454

5555
private static final int PADDING = 5;
56+
private boolean hasHeader;
5657

5758
/**
5859
* Sets how wide the table should be.
@@ -116,6 +117,7 @@ private void readNode(Object node, Table table) {
116117
}
117118

118119
if (tagNode.getName().equals("th")) {
120+
hasHeader = true;
119121
Spanned result = this.getSpanner().fromTagNode(tagNode, null);
120122
table.addCell(result);
121123
return;
@@ -192,11 +194,12 @@ public void handleTagNode(TagNode node, SpannableStringBuilder builder,
192194
List<Spanned> row = table.getRows().get(i);
193195
builder.append("\uFFFC");
194196

195-
TableRowDrawable drawable = new TableRowDrawable(row, table.isDrawBorder());
197+
TableRowDrawable drawable = new TableRowDrawable(row, table.isDrawBorder(), i == 0 && hasHeader ? Alignment.ALIGN_CENTER : Alignment.ALIGN_NORMAL);
196198
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
197199
drawable.getIntrinsicHeight());
198200

199-
builder.setSpan(new ImageSpan(drawable), start + i, builder.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
201+
int index = i == 0 ? start : builder.length() - 1;
202+
builder.setSpan(new ImageSpan(drawable), index, builder.length(),Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
200203
builder.append("\n");
201204
}
202205

@@ -205,7 +208,7 @@ public void handleTagNode(TagNode node, SpannableStringBuilder builder,
205208
the last row would appear detached.
206209
*/
207210
builder.append("\uFFFC");
208-
Drawable drawable = new TableRowDrawable(new ArrayList<Spanned>(), table.isDrawBorder());
211+
Drawable drawable = new TableRowDrawable(new ArrayList<Spanned>(), table.isDrawBorder(), Alignment.ALIGN_NORMAL);
209212
drawable.setBounds(0, 0, tableWidth, 1);
210213

211214
builder.setSpan(new ImageSpan(drawable), builder.length() -1, builder.length(),
@@ -231,15 +234,17 @@ public Alignment getAlignment() {
231234
*/
232235
private class TableRowDrawable extends Drawable {
233236

237+
private final Alignment alignment;
234238
private List<Spanned> tableRow;
235239

236240
private int rowHeight;
237241
private boolean paintBorder;
238242

239-
public TableRowDrawable(List<Spanned> tableRow, boolean paintBorder) {
243+
public TableRowDrawable(List<Spanned> tableRow, boolean paintBorder, Alignment alignment) {
240244
this.tableRow = tableRow;
241245
this.rowHeight = calculateRowHeight(tableRow);
242246
this.paintBorder = paintBorder;
247+
this.alignment = alignment;
243248
}
244249

245250
@Override
@@ -271,7 +276,7 @@ public void draw(Canvas canvas) {
271276

272277
StaticLayout layout = new StaticLayout(tableRow.get(i),
273278
getTextPaint(), (columnWidth - 2 * PADDING),
274-
Alignment.ALIGN_NORMAL, 1f, 0f, true);
279+
alignment, 1f, 0f, true);
275280

276281
canvas.translate(offset + PADDING, 0);
277282
layout.draw(canvas);

0 commit comments

Comments
 (0)