java - 使用 PDFBox 获取文本颜色

标签 java pdfbox

我刚刚开始使用PDFBox,提取文本等。我感兴趣的一件事是我正在提取的文本本身的颜色。但是我似乎找不到任何获取该信息的方法。

是否可以使用 PDFBox 来获取文档的颜色信息?如果可以,我该如何操作?

非常感谢。

最佳答案

所有颜色信息都应存储在类 PDGraphicsState 中所使用的颜色(描边/非描边等)取决于所使用的文本渲染模式(通过 pdfbox 邮件列表)。

这是我尝试过的一个小样本:

创建一个只有一行的 pdf 后(“Sample”写在 RGB=[146,208,80] 中),以下程序将输出:

DeviceRGB 146.115 208.08 80.07

代码如下:

PDDocument doc = null;
try {
    doc = PDDocument.load("C:/Path/To/Pdf/Sample.pdf");
    PDFStreamEngine engine = new PDFStreamEngine(ResourceLoader.loadProperties("org/apache/pdfbox/resources/PageDrawer.properties"));
    PDPage page = (PDPage)doc.getDocumentCatalog().getAllPages().get(0);
    engine.processStream(page, page.findResources(), page.getContents().getStream());
    PDGraphicsState graphicState = engine.getGraphicsState();
    System.out.println(graphicState.getStrokingColor().getColorSpace().getName());
    float colorSpaceValues[] = graphicState.getStrokingColor().getColorSpaceValue();
    for (float c : colorSpaceValues) {
        System.out.println(c * 255);
    }
}
finally {
    if (doc != null) {
        doc.close();
    }

看看PageDrawer.properties查看 PDF 运算符如何映射到 Java 类。

据我了解,如 PDFStreamEngine处理页面流时,它根据当前正在处理的运算符设置各种变量状态。因此,当它遇到绿色文本时,它将更改 PDGraphicsState,因为它将遇到适当的运算符。所以对于CS它调用 org.apache.pdfbox.util.operator.SetStrokingColorSpace由映射 CS=org.apache.pdfbox.util.operator.SetStrokingColorSpace 定义在 .properties文件。 RG映射到org.apache.pdfbox.util.operator.SetStrokingRGBColor等等。

在这种情况下,PDGraphicsState没有改变,因为文档只有文本,并且文本只有一种样式。对于更高级的东西,您需要扩展 PDFStreamEngine (就像 PageDrawerPDFTextStripper 和其他类一样)在颜色变化时执行某些操作。您还可以在自己的.properties中编写自己的映射。文件。

关于java - 使用 PDFBox 获取文本颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5861471/

相关文章:

Java小程序,将jar文件添加到manifest文件

java - 使用 PDFBox 2.0.2 缺少类 PDFTextStripper() 从 PDF 中提取文本

java - 提取文本位置时从 PdfBox 获取的负 X 或 Y

java - Java中如何读取二进制32位定点数

java - Google App Engine HRD 无法在 Eclipse 开发环境中运行

java - 在 JAVA 中格式化 Date.toString() 输出

pdfbox - 在 pdf 中删除旧修订并仅保留最后一个

java - 如何使用属性文件配置 log4j

pdfbox - Helvetica 字体中没有 U+000D 字形

java - 如何使用PDFBox向PDF添加背景图像?