文件示例:here 问题:我正在尝试确定文本是否在页面上可见。为此,对于每个填充命令,我都会保存其路径 + 颜色,如下所示:
public class FillNonZeroRule extends OperatorProcessor {
@Override
public final void process(Operator operator, List<COSBase> operands) throws IOException {
PDGraphicsState gs = getGraphicsState();
linePath.setWindingRule(GeneralPath.WIND_NON_ZERO);
addFillPath(gs.getNonStrokingColor());
linePath.reset();
}
@Override
public String getName() {
return "f";
}
}
void addFillPath(PDColor color) {
filledPaths.put((GeneralPath)linePath.clone(), color);
}
而且,这就是我后来为每个角色获取背景的方式:
private PDColor getCharacterBackgroundColor(TextPosition text) {
PDColor color = null;
for (Map.Entry<GeneralPath, PDColor> filledPath : filledPaths.entrySet()) {
Vector center = getTextPositionCenterPoint(text);
if (filledPath.getKey().contains(lowerLeftX + center.getX(), lowerLeftY + center.getY())) {
color = filledPath.getValue();
}
}
return color;
}
此外,还要为每个文本位置保存颜色。然后我尝试确定该背景颜色是否与字符颜色相同。有趣的是,对于第一页的背景颜色和标题的文本颜色(顶部有背景的行)都是 2301728(int RGB 值) - 这是不正确的,但是,对于第二页,文本颜色是 2301728,背景颜色是14145754(正确!)。所以我的问题是导致第一页背景不正确的原因......提前致谢!
海绵宝宝撒
相关分类