我正在尝试创建一个简单的目录(文档只有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 String
与Anchor name
匹配,所以我看不出我做错了什么。
答案 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 :(得分: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)