Java IText 7,获取文本的透明度(参考ExtGState)
我有两个简单的文本PDF。其中之一包含透明度。text对象包含对ExtGState的引用,该引用具有透明度值。 如何获得该值? 有来自调试工具(pdf apache pdfbox)的图片: 我找到了如何从资源中获取透明度值,但我不知道如何将其与特定文本匹配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.
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>