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