代码之家  ›  专栏  ›  技术社区  ›  Brad

PDFBox-如何单击PDF文件中的链接移动到另一个页面,并在其中的特定文本下划线?

  •  1
  • Brad  · 技术社区  · 6 年前

    在Adobe Acrobat中,我可以在PDF文件中定义一个链接,并在单击该链接转到另一个页面时设置JavaScript操作,并在该页面中的特定单词下划下划线,如下图所示:

    enter image description here

    我想使用Java的PDFBox库做同样的事情。我已经成功地定义了一个链接,但是如何设置该链接的JavaScript代码以移动到另一个页面,并在该页面中的特定单词下划线?

    这是我当前的代码:

    PDAnnotationLink myLink = new PDAnnotationLink();
    /*
     * Some code here to define the link, then i should define the link action.
     */
    PDActionJavaScript javascriptAction = new PDActionJavaScript( "app.alert(     \"I should now go to page 10 and undeline a word out there.\" );" );
    myLink.setAction( javascriptAction );
    annotations.add( myLink ); 
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Tilman Hausherr    6 年前

    该操作是一个转到操作,它的目标是page 2对象。它有一个“Next”条目,该条目具有Javascript操作。

    此代码复制了Adobe所做的工作:

    List<PDAnnotation> annotations = pdfDocument.getPage(0).getAnnotations();
    PDAnnotationLink myLink = new PDAnnotationLink();
    myLink.setRectangle(new PDRectangle(122.618f, 706.037f, 287.127f-122.618f, 718.255f-706.037f));
    myLink.setColor(new PDColor(new float[]{1, 1 / 3f, 0}, PDDeviceRGB.INSTANCE));
    PDBorderStyleDictionary bs = new PDBorderStyleDictionary();
    bs.setWidth(3);
    bs.setStyle(PDBorderStyleDictionary.STYLE_UNDERLINE);            
    myLink.setBorderStyle(bs);
    
    PDPageFitRectangleDestination dest = new PDPageFitRectangleDestination();
    dest.setLeft(48);
    dest.setBottom(401);
    dest.setRight(589);
    dest.setTop(744);
    dest.setPage(pdfDocument.getPage(1));
    PDActionGoTo gotoAction = new PDActionGoTo();
    gotoAction.setDestination(dest);
    List<PDAction> actionList = new ArrayList<>();
    String js = "var annot = this.addAnnot({\n"
            + "page: 1,\n"
            + "type: \"Underline\",\n"
            + "quads: this.getPageNthWordQuads(1, 4),\n"
            + "author: \"Brad Colin\",\n"
            + "contents: \"Fifth word on page 2\"\n"
            + "});";
    PDActionJavaScript jsAction = new PDActionJavaScript(js);
    actionList.add(jsAction);
    gotoAction.setNext(actionList);
    myLink.setAction(gotoAction);
    
    annotations.add(myLink);
    
    pdfDocument.save("1-new.pdf");