java - IText 7,获取文本透明度(参考ExtGState)
问题描述
我有两个简单文本的 PDF。其中之一包含透明度。文本对象包含对具有透明度值的 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,我找不到对 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>
推荐阅读
- javascript - 如何在 textContent 中显示一个或多个 div 的类名
- javascript - 离线查询上的 React-native-firebase 服务器时间戳
- android - BottomNavigationView 显示黑条
- google-bigquery - Google BigQuery 共享数据集访问权限 - 我如何知道谁获得了对这些数据集/表的共享访问权限
- macos - 如果在点击期间按下选项,如何更改 SwiftUI 菜单的内容
- python - 在子数据帧上使用移动平均线?
- kubernetes - 为什么 PodDisruptionBudget 同时具有 minAvailable 和 maxUnavailable 选项?
- azure-pipelines - 正确的管道和提要设置/权限
- jquery - 将 Parsley 与 rails 6 一起使用
- typescript - Define generic method invoker - typescript issue