使用PDFBox为PDF添加文本时如何设置固定黑色文字颜色
问题原因
出现该问题的核心原因是PDF内容流的图形状态继承规则:使用APPEND模式向已有PDF页面追加内容时,会直接继承页面原有内容流末尾留存的所有图形状态参数,文本填充色属于其中的一项。你处理的这份特定文档最后留存的填充色参数为白色,因此新增的文本默认使用白色填充,和白色背景重叠后完全不可见。绝大多数文档默认留存的填充色为黑色,因此原有代码可以正常运行。
解决方法
在写入文本前手动设置非描边填充色为固定黑色即可,修改后的代码如下:
import java.awt.Color; // 其他原有代码不变 PDPageContentStream cs = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, false); // 新增以下行设置文本填充色为黑色 cs.setNonStrokingColor(Color.BLACK); cs.beginText(); cs.setFont(font, fontSize); cs.newLineAtOffset(posX, posY); cs.showText(text); cs.endText(); cs.close();
补充说明
- 文本默认使用填充色渲染,因此修改
setNonStrokingColor参数即可生效,如果你需要自定义其他颜色,也可以传入RGB数值,比如cs.setNonStrokingColor(255,0,0)对应红色。 - 颜色设置操作需要放在
beginText()之前执行,避免在文本块内部修改状态引发部分PDF阅读器的兼容性问题。
内容的提问来源于stack exchange,提问作者Vrezh Arakelyan
相关产品推荐
相关产品推荐

