我在我的发布商项目中使用了itextpdf-5.5.6。我想在一个段落或短语或文本的同一行设置一个表?
类似的东西:
In My Para | MY TAB OF ONE COLUMN |存在于同一条线上。
有可能吗?
答案 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>
方法的值。另外:我们并不总是使用该方法来绘制某些东西。在这种情况下,我们还使用通用标记功能来计算事物。