我需要在PDF的特定坐标集中绘制多个圆角矩形。我使用this example(IMDB一个)来获得Chunks
'的坐标(使用PdfPageEvent
及其onGenericTag()
方法)。它可以完美地获得Chunks
'坐标并将矩形放置在必须放置的位置。当我为它们设置颜色时,问题就来了,颜色完全隐藏了文本。我知道那里的文字,因为我实际上可以复制它们。如果我不应用颜色,则文本是可见的。
如果我不应用颜色,这就是它们的实际外观:
如果我应用颜色,这就是它们的外观(这是它们的外观,但包括文本):
忽略矩形大小的差异,我只是通过示例覆盖了原始文本,但是原始显示非常完美。 为什么文本被隐藏?我知道可以通过示例完成此操作,但是我不知道我做错了什么。 我正在使用5.5.13版本。
这是我创建和添加段落的方式:
List<Chunk> chunksList = new ArrayList<>(); //rects
Chunk rdChunk;
for(Person rd: persons) {
rdChunk = new Chunk(rd.getName(), textFont);
rdChunk.setGenericTag(rd.getName());
chunksList .add(rdChunk);
}
document.add(createParagraph("as: ", chunksList , basicLeftIndentation));
private Paragraph createParagraph(String field, List<Chunk> chunks, long leftIndentation) {
Paragraph paragraph = new Paragraph();
paragraph.add(new Chunk(field, labelFont));
for(Chunk chunk: chunks) {
paragraph.add(new Chunk(" "));
paragraph.add(chunk);
}
paragraph.setIndentationLeft(leftIndentation);
return paragraph;
}
这是我使用PdfPageEvent接口的方式:
@Override
public void onGenericTag(PdfWriter writer, Document document, Rectangle rect, String text) {
int[] colors;
switch(text) {
case "XX":
colors = new int[]{142, 166, 207};
break;
case "XY":
colors = new int[]{207, 188, 142};
break;
drawRectangle(writer.getDirectContent(), rect, colors);
}
public void drawRectangle(PdfContentByte content, Rectangle rect, int[] colors) {
content.saveState();
content.roundRectangle(rect.getLeft() -2,
rect.getBottom() - 3,
rect.getWidth() + 4,
rect.getHeight() + 4, 7f);
content.setRGBColorFill(colors[0], colors[1], colors[2]);
content.fill();
content.restoreState();
}
答案 0 :(得分:0)
问题解决了,我在打电话
writer.getDirectContent();
代替
writer.getDirectContentUnder();