表在同一行

时间:2015-09-29 06:53:35

标签: java pdf pdf-generation itext itextpdf

我在我的发布商项目中使用了itextpdf-5.5.6。我想在一个段落或短语或文本的同一行设置一个表?

类似的东西:

In My Para | MY TAB OF ONE COLUMN |存在于同一条线上。

有可能吗?

1 个答案:

答案 0 :(得分:1)

您不需要桌子。您需要的是一个通用标记事件。看看Chris Haas对这个问题的回答:How do you underline text with dashedline in ITEXT PDF

在这个答案中,他描述了如何使用通常被称为通用标记功能的页面事件。您可以在此处找到Java示例:DashedUnderline

在此示例中,我们使用通用标记功能为Chunk加下划线,但不是绘制虚线,而是可以轻松绘制矩形。

您可以像这样创建一个块并设置一个通用标记:

Chunk chunk = new Chunk(" This chunk needs to be inside a rectangle ");
chunk.setGenericTag("");

您可以将chunk Paragraph作为Paragraph p = new Paragraph("[Before]"); p.add(chunk); p.add("[After]"); 的一部分:

PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(dest));
writer.setPageEvent(new DrawRectangle());

这只有在您声明如下页面事件时才有效:

DrawRectangle

当然,我们需要实现public class DrawRectangle extends PdfPageEventHelper { @Override public void onGenericTag(PdfWriter writer, Document document, Rectangle rect, String text) { PdfContentByte canvas = writer.getDirectContent(); canvas.rectangle(rect.getLeft(), rect.getBottom(), rect.getWidth(), rect.getHeight()); canvas.stroke(); canvas.restoreState(); } } 类;

onGenericTag()

要获得更多灵感,请查看MovieYears中的my book示例。它在特定位置添加省略号和影片剪辑:movie_years.pdf

在这种情况下,class GenericTags extends PdfPageEventHelper { public void onGenericTag(PdfWriter writer, Document pdfDocument, Rectangle rect, String text) { if ("strip".equals(text)) strip(writer.getDirectContent(), rect); else if ("ellipse".equals(text)) ellipse(writer.getDirectContentUnder(), rect); else countYear(text); } public void strip(PdfContentByte content, Rectangle rect) { content.rectangle(rect.getLeft() - 1, rect.getBottom() - 5f, rect.getWidth(), rect.getHeight() + 8); content.rectangle(rect.getLeft(), rect.getBottom() - 2, rect.getWidth() - 2, rect.getHeight() + 2); float y1 = rect.getTop() + 0.5f; float y2 = rect.getBottom() - 4; for (float f = rect.getLeft(); f < rect.getRight() - 4; f += 5) { content.rectangle(f, y1, 4f, 1.5f); content.rectangle(f, y2, 4f, 1.5f); } content.eoFill(); } public void ellipse(PdfContentByte content, Rectangle rect) { content.saveState(); content.setRGBColorFill(0x00, 0x00, 0xFF); content.ellipse(rect.getLeft() - 3f, rect.getBottom() - 5f, rect.getRight() + 3f, rect.getTop() + 3f); content.fill(); content.restoreState(); } TreeMap<String, Integer> years = new TreeMap<String, Integer>(); public void countYear(String text) { Integer count = years.get(text); if (count == null) { years.put(text, 1); } else { years.put(text, count + 1); } } } 方法创建如下:

setGenericTag()

如您所见,我们在此处检查传递给<a href='@Url.Action("action", "Controller")'> <img src='@Url.Content("~/images/imageName.png")' /></a> 方法的值。另外:我们并不总是使用该方法来绘制某些东西。在这种情况下,我们还使用通用标记功能来计算事物。