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

时间:2015-10-30 16:16:06

标签: java pdfbox

我正在尝试使用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在回答中提到的,我提供的代码实际上是有效的。我的问题最终是代码处于循环中,为每一行绘制背景,但背景是绘制在前一行,而不是当前行,覆盖以前的文本。我只需要在循环中改变事件的顺序。这个问题应该删除吗?其他人似乎不太可能觉得它有用。

1 个答案:

答案 0 :(得分:7)

您展示的代码有效。

我让它像这样运行:

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();

DrawOnBackground.java

结果如下:

enter image description here

因此,您的问题的原因超出了您提供的代码。

PS :我使用的是PDFBox 1.8.10。