Java IText 7,获取文本的透明度(参考ExtGState)

Java IText 7,获取文本的透明度(参考ExtGState),java,pdf,itext,itext7,Java,Pdf,Itext,Itext7,我有两个简单的文本PDF。其中之一包含透明度。text对象包含对ExtGState的引用,该引用具有透明度值。 如何获得该值? 有来自调试工具(pdf apache pdfbox)的图片: 我找到了如何从资源中获取透明度值,但我不知道如何将其与特定文本匹配 double value = document.getFirstPage() .getResources() .getPdfObject() .getAsDictionary(PdfName.

我有两个简单的文本PDF。其中之一包含透明度。text对象包含对ExtGState的引用,该引用具有透明度值。 如何获得该值?

有来自调试工具(pdf apache pdfbox)的图片:

我找到了如何从资源中获取透明度值,但我不知道如何将其与特定文本匹配

double value = document.getFirstPage()
        .getResources()
        .getPdfObject()
        .getAsDictionary(PdfName.ExtGState)
        .getAsDictionary(new PdfName("GS1"))
        .getAsNumber(PdfName.ca)
        .getValue();
我还有一个类,它实现了
IEventListener
,并获得了许多关于PDF中文本的不同信息

class TextRenderListener implements IEventListener {

 @Override
    public void eventOccurred(IEventData data, EventType type) {
        if (type.equals(EventType.RENDER_TEXT)) {
            TextRenderInfo textRenderInfo = (TextRenderInfo) data;
            CanvasGraphicsState canvasGraphicsState = textRenderInfo.getGraphicsState();

    ...
   }
 ...
}
但是fillAlpha和strokeAlpha始终==1.0,我找不到任何对资源ExtGstate的引用

解析器:

new PdfDocumentContentParser(document).processContent(pageNumber, new TextRenderListener);

Pdf:

您提到
fillAlpha
strokeAlpha
始终等于
1
,以前确实是这样,但这一问题最近得到了解决,该解决方案在当前的
7.1.11-SNAPSHOT
版本的iText中可用。下面是示例代码:

class TextRenderListener implements IEventListener {

    @Override
    public void eventOccurred(IEventData data, EventType type) {
        if (type.equals(EventType.RENDER_TEXT)) {
            TextRenderInfo textRenderInfo = (TextRenderInfo) data;
            float transparency = textRenderInfo.getGraphicsState().getFillOpacity();
            System.out.println(transparency);
        }
    }

    @Override
    public Set<EventType> getSupportedEvents() {
        return new HashSet<>(Collections.singletonList(EventType.RENDER_TEXT));
    }
}
要使用快照版本,需要将以下Maven存储库添加到项目中:

<repositories>
  <repository>
    <id>itext-snapshot</id>
    <name>iText Repository - snapshots</name>
    <url>https://repo.itextsupport.com/snapshot</url>
  </repository>
</repositories>

itext快照
iText存储库-快照
https://repo.itextsupport.com/snapshot

请分享有问题的PDF以再现您的情况。给您:您让我开心!谢谢!p、 我花了3天时间试图解决这个问题……是否可以通过在页面/内容/资源对象字典中循环来检测使用iText 4或iText 5的任何对象中是否存在透明度?
<repositories>
  <repository>
    <id>itext-snapshot</id>
    <name>iText Repository - snapshots</name>
    <url>https://repo.itextsupport.com/snapshot</url>
  </repository>
</repositories>