iText与Anchors有问题(可点击但没有任何反应)

时间:2011-01-04 09:29:19

标签: java itext

我正在尝试创建一个简单的目录(文档只有4页长)。 我遇到的问题是,当我的鼠标确实变成一只手时,当我点击它时没有任何反应。 是的,目标在另一页上。

创建目录行:

Chunk chunk = new Chunk("Contact information");
chunk.setLocalGoto("Contact information");  
document.add(new Paragraph(chunk));

其中一个目标:

Anchor anchor = new Anchor("Contact information", font1);
anchor.setName("Contact information");
Chapter chapter = new Chapter(new Paragraph(anchor), 1);    
chapter.setNumberDepth(0);
document.add(chapter);

Goto StringAnchor name匹配,所以我看不出我做错了什么。

3 个答案:

答案 0 :(得分:1)

在iText in Action的this example中,内部链接在名称中使用#

另一种方法是对链接和目的地使用Chunk

chunkDest.setLocalDesitination("foo");
...
chunkLink.setLocalGoto("foo"); // or "#foo"?

我对PdfDocument(localGoto和localDestination)的阅读让我相信他们创造的顺序并不重要......等等......不,只要两者都无所谓实际上被称为。

您是否真的已经完成了代码以确保它们都被实际调用了?

另一种选择:结束运行。下拉到PDF原生代码并在那里执行。为章节位置建立自己的PdfDestination,为TOC建立PdfAction。像这样:

PdfDestination fitH = new PdfDestination(PdfDestination.FITH);
// the destination doesn't have a page associated with it until you call
//  gotoLocalPage.  Kinda goofy, but we can work with it.
PdfAction link = PdfAction.gotoLocalPage(pageNum, fitH, writer);
chunk.setAction(link);

注意:

  1. 如果您需要多个指向同一地点的链接,则可以重复使用给定的PdfAction。
  2. 定义PdfDestination有很多方法,我只使用了我喜欢的方法。 YMMV。

答案 1 :(得分:0)

查看此处的示例:ftp://ns.tnet.dp.ua/pub/ORACLE/Developers/Java_Doc_LIB/PDFLib/iText/tutorial/ch03.html对于内部链接,您需要将引用设置为“#”+ {锚名称}。

示例内部链接:

Anchor anchor1 = new Anchor("This is an internal link");
anchor1.setName("link1");
Anchor anchor2 = new Anchor("Click here to jump to the internal link");
anchor.setReference("#link1"); 

答案 2 :(得分:0)

如果有人提出这个问题已经过去了几年,我会回答,因为昨天我或多或少都遇到了同样的问题

这是我的代码:

//the destination anchor
Anchor target = new Anchor("a name", FONT_BOLD);
target.setName("link");
Paragraph p = new Paragraph(target);    

//the goto anchor
Anchor goto= new Anchor("go to the target "+i, FONT_BOLD);
goto.setReference("#link");

这段代码也不起作用,原因是 您不能通过传递Paragraph作为参数来创建新的Anchor

Paragraph p = new Paragraph(target); //this will not work


Paragraph p = new Paragraph(); //this will work
p.add(target)