在 Java 中提取 PDF 链接

您可以通过遍历页面批注并进行过滤来检查 PDF 链接 AnnotationType.Link。

提取链接批注

当您需要获取页面上链接批注的位置和页码信息时,请使用此示例。

  1. 打开源 PDF Document。
  2. 遍历页面批注并筛选出链接批注。
  3. 读取每个匹配链接的页面索引和矩形区域。
public static void extractLinkAnnotation(Path inputFile) {
    try (Document document = new Document(inputFile.toString())) {
        for (Annotation annotation : document.getPages().get_Item(1).getAnnotations()) {
            if (annotation.getAnnotationType() == AnnotationType.Link && annotation instanceof LinkAnnotation) {
                LinkAnnotation linkAnnotation = (LinkAnnotation) annotation;
                System.out.println("Page: " + linkAnnotation.getPageIndex()
                        + ", location: " + linkAnnotation.getRect());
            }
        }
    }
}

提取超链接目标

当您需要从网页链接批注中读取目标 URI 时,请使用此示例。

  1. 打开源 PDF Document。
  2. 查找操作类型为 GoToURIAction 的 LinkAnnotation 对象。
  3. 打印每个超链接的页索引和 URI 目标。
public static void extractHyperlinks(Path inputFile) {
    try (Document document = new Document(inputFile.toString())) {
        for (Annotation annotation : document.getPages().get_Item(1).getAnnotations()) {
            if (annotation.getAnnotationType() == AnnotationType.Link && annotation instanceof LinkAnnotation) {
                LinkAnnotation linkAnnotation = (LinkAnnotation) annotation;
                if (linkAnnotation.getAction() instanceof GoToURIAction) {
                    GoToURIAction action = (GoToURIAction) linkAnnotation.getAction();
                    System.out.println("Page " + linkAnnotation.getPageIndex() + ", URI:" + action.getURI());
                }
            }
        }
    }
}