IText 7,获取文本透明度(参考ExtGState)
IText 7, get transparency of text (reference to ExtGState)
我有包含两个简单文本的 PDF。其中之一包含透明度。文本对象包含对具有透明度值的 ExtGState 的引用。
我怎样才能得到这个值?
调试工具(pdf apache pdfbox)有图片:
我找到了如何从资源中获取透明度值,但我不知道如何将其与特定文本匹配。
double value = document.getFirstPage()
.getResources()
.getPdfObject()
.getAsDictionary(PdfName.ExtGState)
.getAsDictionary(new PdfName("GS1"))
.getAsNumber(PdfName.ca)
.getValue();
我还有一个 class,它实现 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,我找不到任何对 Resource ExtGstate 的引用
解析器:
new PdfDocumentContentParser(document).processContent(pageNumber, new TextRenderListener);
你提到 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));
}
}
对于您的文档,它将以下内容打印到控制台(因此第一段文本不透明,第二段是透明的):
1.0
0.34902
要使用 SNAPSHOT 版本,您需要将以下 Maven 存储库添加到您的项目中:
<repositories>
<repository>
<id>itext-snapshot</id>
<name>iText Repository - snapshots</name>
<url>https://repo.itextsupport.com/snapshot</url>
</repository>
</repositories>
我有包含两个简单文本的 PDF。其中之一包含透明度。文本对象包含对具有透明度值的 ExtGState 的引用。 我怎样才能得到这个值?
调试工具(pdf apache pdfbox)有图片:
我找到了如何从资源中获取透明度值,但我不知道如何将其与特定文本匹配。
double value = document.getFirstPage()
.getResources()
.getPdfObject()
.getAsDictionary(PdfName.ExtGState)
.getAsDictionary(new PdfName("GS1"))
.getAsNumber(PdfName.ca)
.getValue();
我还有一个 class,它实现 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,我找不到任何对 Resource ExtGstate 的引用
解析器:
new PdfDocumentContentParser(document).processContent(pageNumber, new TextRenderListener);
你提到 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));
}
}
对于您的文档,它将以下内容打印到控制台(因此第一段文本不透明,第二段是透明的):
1.0
0.34902
要使用 SNAPSHOT 版本,您需要将以下 Maven 存储库添加到您的项目中:
<repositories>
<repository>
<id>itext-snapshot</id>
<name>iText Repository - snapshots</name>
<url>https://repo.itextsupport.com/snapshot</url>
</repository>
</repositories>