Asopse.pdf for java 获取超链接动作

我有一个pdf文件,现在想获取该文件内pdf动作,现在遇到一个问题,就是当该动作为重置表单或者播放声音时,用代码获取不到该动作。以下为代码
public static void main(String[] args) throws IOException {
String path = “C:\Users\cuigu\Desktop\pdfFormate\456\a\1.pdf”;
Document doc = new Document(path);

    Page page = doc.getPages().get_Item(1);
    AnnotationCollection annos = page.getAnnotations();

    for (int i = 1; i <= annos.size(); i++) {

        Annotation an = annos.get_Item(i);
        LinkAnnotation linkan = (LinkAnnotation) an;
        IAppointment ia = linkan.getDestination();

        if (an instanceof LinkAnnotation) {
            System.out.println(linkan);
            PdfActionCollection pdfActions = linkan.getPdfActions();
            System.out.println(pdfActions.get_Item(1));
        }

        if (null != ia) {

            String name = ia.getClass().getName();
            System.out.println(name);
            System.out.println("aa");
        }else{
            List<PdfAction> actionList = getLinkAction(linkan);
            PdfAction ac = actionList.get(0);
            String name = ac.getClass().getName();
            System.out.println(name);
            System.out.println("bb");
        }

    }
}

public static List getLinkAction(LinkAnnotation linkannotation) {
List list = new ArrayList();
// 动作(或者多个动作)
PdfAction action = null;
try {
action = linkannotation.getAction();
} catch (Exception e) {
e.printStackTrace();
}
if (null != action) {
list.add(action);
ActionCollection actions = action.getNext();
// 书签action是否多个
while (null != actions && actions.size() > 0) {
for (PdfAction ac2 : actions) {
if (null != ac2) {
list.add(ac2);
actions = ac2.getNext();
} else {
actions = null;
}

			}
		}
	}else {
		System.out.println("error");
	}
	return list;
}<a class="attachment" href="/uploads/default/35333">1.pdf</a> (56.3 KB)

1.pdf (1.0 MB)

@guopeng

我与您共享的示例项目一起工作。为了进一步调查,请您分享一下您面临的错误或异常情况。另外,请分享环境详细信息和版本详细信息,以便我们进一步调查以帮助您。

1 Like

我的系统是windows10 专业版本,java1.8,aspose-pdf 18.6,现在我有一处遇到了一些问题,希望得到一下帮助。我在使用aspose-pdf 读取超链接动作的时候,是可以区分出读取到的超链接的动作是指向外部文件还是指向当前pdf的某一页。但是我没有办法区分该超链接的动作是跳转文件还是播放声音,希望可以获取到帮助以便可以使用aspose-pdf 来区分出超链接的动作是文件动作还是播放声音动作。再次感谢。

我的系统是windows10 专业版本,java1.8,aspose-pdf 18.6,现在我有一处遇到了一些问题,希望得到一下帮助。我在使用aspose-pdf 读取超链接动作的时候,是可以区分出读取到的超链接的动作是指向外部文件还是指向当前pdf的某一页。但是我没有办法区分该超链接的动作是跳转文件还是播放声音,希望可以获取到帮助以便可以使用aspose-pdf 来区分出超链接的动作是文件动作还是播放声音动作。再次感谢。

@guopeng

我们尝试提取声音播放的链接,并使用下面的代码片段确定它们的操作,从而无法做到这一点。

Document doc = new Document(dataDir + "1.pdf");
for(Page page:doc.getPages()){
 AnnotationSelector selector = new AnnotationSelector(new LinkAnnotation(page, Rectangle.getTrivial()));
 page.accept(selector);
 java.util.List list = selector.getSelected();
 if (list.size() == 0)
    System.out.println("No Hyperlinks found..");
    else {
          for (LinkAnnotation annot : (Iterable<LinkAnnotation>) list) {
          if(annot.getAction() instanceof GoToURIAction) {
             System.out.println("GoToURIAction");
          }
          else if(annot.getAction() instanceof GoToRemoteAction){
             System.out.println("GoToRemoteAction");
          }
          else if(annot.getAction() instanceof GoToAction){
             System.out.println("GoToAction");
          }
          else if(annot.getAction() == null){
             System.out.println("No PdfAction is found");
          }
         }
      }
}

我们已记录了调查凭单,以进一步调查您的这些要求,并一定会在解决后立即通知您。该票证已在我们的问题跟踪系统中记录在ID PDFJAVA-39190下。请耐心等待,为我们节省时间。

我们对造成的不便很抱歉。

非常感谢,希望可以解决。

@guopeng

当然,一旦票务解决,我们一定会通知您。