【问题标题】:PDFBox: How to draw text on top of a filled rectangle?PDFBox:如何在填充的矩形上绘制文本?
【发布时间】:2015-10-30 16:16:06
【问题描述】:

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

【问题讨论】:

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

标签: java pdfbox


【解决方案1】:

您展示的代码有效。

我让它像这样运行:

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)

结果如下所示:

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

PS:我使用的是 PDFBox 1.8.10。

【讨论】:

    猜你喜欢
    • 2012-07-23
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-07
    相关资源
    最近更新 更多