gpt4 book ai didi

java - PDF框2.0 : Get color information in TextStripper

转载 作者:行者123 更新时间:2023-12-02 11:04:32 25 4
gpt4 key购买 nike

我正在使用 PDFBox PDFTextStripper 进行文本提取。我还需要获取每个字符的颜色信息,最好是在 writeString 方法中。我发现的是this PDFBox 1.8 的解决方案(实际上可以轻松转换为 2.0 版本),我还要寻找的是每个字符的背景颜色(因为在该答案中只有字符颜色)。我添加了 Fill 运算符的所有处理程序 - CloseFillNonZeroAndStrokePath、CloseFillEvenOddAndStrokePath FillNonZeroAndStrokePath、FillEvenOddAndStrokePath、LegacyFillNonZeroRule、FillNonZeroRule、FillEvenOddRule(如 this 主题中的建议),并在这些运算符内获取 nonStrokingColor:

public final class FillEvenOddRule extends OperatorProcessor {
@Override
public void process(Operator operator, List<COSBase> operands) throws IOException {
linePath.setWindingRule(GeneralPath.WIND_EVEN_ODD);
deleteCharsInPath();
linePath.reset();
PDGraphicsState gs = getGraphicsState();
PDColor nonStrokingColor = gs.getNonStrokingColor();
fillColor = nonStrokingColor.toRGB();
}

@Override
public String getName() {
return "f*";
}
}

然后在processTextPosition中,我尝试获取这个fillColor并将其放入每个字符的映射中(假设内容流连续工作 - 在Fill之后> 操作符完成,所有接下来的 processTextPosition 字符应该有这个 fillColor。但这不是事实,所有字符都有错误的颜色。有 file 我正在尝试要处理,每个第二行都有蓝色填充,我想为该行中的每个字符获取蓝色,为白色行中的每个字符获取白色。使用 PDFBox 可以吗?

最佳答案

示例文档上下文中的问题

Then in processTextPosition I tried to get this fillColor and put it to map for each character (assuming content stream work consecutive way - after Fill operator completes, all next coming to processTextPosition characters should have this fillColor. However this is not truth and all characters have wrong color.

正如您所发现的,您的假设对于手头的 PDF 来说是错误的。本文档中的策略是首先绘制所有背景 Material ,然后绘制所有文本。因此,您处理此文档的方法应始终返回背景 Material 最后一位的颜色。

my comment 中所述对于您引用的第二个问题,您必须收集与实际文本提取并行填充的所有矩形(或更一般地说:路径),并检查字体渲染颜色是否(取决于文本渲染模式)也可能是StrokingColor!)当前检查的文本与文本位置处当前顶部填充路径的StrokingColor一致。

在您想知道的评论中

does this mean this approach will work for all documents?

此方法是否适用于所有文档

对于许多人来说确实如此,但并非所有人。

我立即想到以下问题:

  • 并非所有颜色空间都支持您使用的 toRGB 方法。 (我刚刚检查过,我对有多少 PDFBox 确实有实现感到非常惊讶。)

    特别是在图案颜色的情况下,您必须深入研究图案及其在您的案例中的用法,才能找到实际的背景颜色。

  • 还有其他方法来绘制背景表单,特别是:

    • 该方法仅考虑填充路径,但如果您使用较大的图形状态线宽度值或拉伸(stretch)变换矩阵,则描边线也可以绘制矩形形式。因此,对于这种情况,您还必须考虑描边路径。

    • 背景可能是位图图像。在这种情况下,您必须分析图像以获得背景颜色

    • 另一种可以考虑的替代方案是阴影填充。这通常也会导致背景出现一系列颜色。

  • 随后在字形上绘制而不是覆盖它的表格可能会显着改变前景和背景。那里例如是从背景获取色调并从前景获取饱和度的混合模式...

  • 绘制背景或前景时激活的软蒙版也可能令人感兴趣。

  • ...

关于java - PDF框2.0 : Get color information in TextStripper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51082530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com