Java PDFBox:如何在填充矩形的顶部绘制文本?

Java PDFBox:如何在填充矩形的顶部绘制文本?,java,pdfbox,Java,Pdfbox,我正在尝试使用Java和PDFBox将一些文本绘制到PDF文件中,并为文本设置背景色。我知道如何绘制文本和填充矩形,但当我尝试在与矩形相同的位置绘制文本时,文本永远不会显示。例如: //draw rectangle content.setNonStrokingColor(200, 200, 200); //gray background content.fillRect(cursorX, cursorY, 100, 50); //draw text content.setNonStroking

我正在尝试使用Java和PDFBox将一些文本绘制到PDF文件中,并为文本设置背景色。我知道如何绘制文本和填充矩形,但当我尝试在与矩形相同的位置绘制文本时,文本永远不会显示。例如:

//draw rectangle
content.setNonStrokingColor(200, 200, 200); //gray background
content.fillRect(cursorX, cursorY, 100, 50);

//draw text
content.setNonStrokingColor(0, 0, 0); //black text
content.beginText();
content.setFont(family, fontPt);
content.moveTextPositionByAmount(cursorX, cursorY);
content.drawString("Test Data");
content.endText();
文本从未出现过。它总是被矩形所覆盖。关于如何在矩形上方绘制文本,有什么想法吗


编辑:正如Mkl在回答中提到的,我提供的代码实际上是有效的。我的问题是,代码处于循环中,为每一行绘制背景,但背景绘制在前一行上,而不是当前行上,覆盖了前一个文本。我只需要改变循环中事件的顺序。这个问题是否应该删除?其他人似乎不会觉得它有用。

您显示的代码可以正常工作

我让它可以这样运行:

PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
PDPageContentStream content = new PDPageContentStream(document, page);
PDFont font = PDType1Font.HELVETICA_BOLD;

int cursorX = 70;
int cursorY = 500;

//draw rectangle
content.setNonStrokingColor(200, 200, 200); //gray background
content.fillRect(cursorX, cursorY, 100, 50);

//draw text
content.setNonStrokingColor(0, 0, 0); //black text
content.beginText();
content.setFont(font, 12);
content.moveTextPositionByAmount(cursorX, cursorY);
content.drawString("Test Data");
content.endText();

content.close();
document.save(new File("textOnBackground.pdf"));
document.close();
()

结果如下所示:

PDDocument document = new PDDocument();
PDPage page = new PDPage();
document.addPage(page);
PDPageContentStream content = new PDPageContentStream(document, page);
PDFont font = PDType1Font.HELVETICA_BOLD;

int cursorX = 70;
int cursorY = 500;

//draw rectangle
content.setNonStrokingColor(200, 200, 200); //gray background
content.fillRect(cursorX, cursorY, 100, 50);

//draw text
content.setNonStrokingColor(0, 0, 0); //black text
content.beginText();
content.setFont(font, 12);
content.moveTextPositionByAmount(cursorX, cursorY);
content.drawString("Test Data");
content.endText();

content.close();
document.save(new File("textOnBackground.pdf"));
document.close();

因此,问题的原因不在于您提供的代码


PS:我使用的是PDFBox 1.8.10。

你关闭了内容流吗?@tilmahauser接受的答案帮助我在代码中找到了一个bug。你永远不知道什么时候一些随机的旧答案会有用,在我看来这个问题应该保留下来。有7票赞成,答案被证明是有用的