2011-01-04 12 views
5

Próbuję utworzyć prosty spis treści (dokument ma tylko 4 strony). Problemem jest to, że podczas gdy moja mysz zamienia się w rękę, kiedy klikam, nic się nie dzieje. I tak cele są na innej stronie.iText o problemach z Anchorami (klikalne, ale nic się nie dzieje)

utworzenie spisu treści wiersza:

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

Jednym z celów:

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); 

W Goto String mecze z Anchor name więc nie widzę, co robię źle.

+0

Jakiej wersji iText używasz? Może to być jakiś neolityczny błąd, który został naprawiony dawno temu ... –

+0

2.1.7/5.0.5 Chciałam tylko sprawdzić, czy pomiędzy tymi dwoma cechami istnieje duża różnica w stosunku do moich wymagań, ponieważ ta pierwsza używa LGPL, podczas gdy druga używa AGPL. – jack

Odpowiedz

1

W this example z iText w działaniu obwodu pośredniego stosuje # w nazwie.

Innym rozwiązaniem byłoby użycie Chunk s zarówno dla łącza, jak i dla miejsca docelowego.

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

Moja lektura PdfDocument (localGoto i localDestination) prowadzi mnie do przypuszczenia, że ​​kolejność, w jakiej są one tworzone nie ma znaczenia ... czekaj ... Nie, nie powinno mieć znaczenia, tak długo, jak oboje są rzeczywiście wywoływane.

Czy rzeczywiście przekroczyłeś kod, aby upewnić się, że oba są rzeczywiście wywoływane?

Inna opcja: Koniec. Przejdź do kodu rodzimego PDF i zrób to. Zbuduj własną PdfDestination dla lokalizacji rozdziału i PdfAction dla spisu treści. Coś takiego:

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); 

UWAGI:

  1. można ponownie wykorzystać daną PdfAction jeśli trzeba wiele linków do tego samego miejsca.
  2. Istnieje wiele sposobów definiowania PdfDestination, po prostu skorzystałem z tego, który preferuję. YMMV.
+0

Wygląda na to, że nie możesz użyć Zakotwiczenia do celu, a Kawałki do połączenia z celem. Używanie 2 kawałków działało dobrze. – jack

+0

Używanie porcji dla obu końców jest rozwiązaniem. Dziękuję Ci ! – steffen

0

Patrząc na przykład tutaj: ftp://ns.tnet.dp.ua/pub/ORACLE/Developers/Java_Doc_LIB/PDFLib/iText/tutorial/ch03.html wygląda na linki wewnętrzne, musisz ustawić odwołanie na "#" + {nazwa kotwicy}.

Przykład wewnętrzne łącze:

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"); 
+0

To znaczy, jeśli używasz kotwicy dla linków, używam fragmentów. Sprawdziłem ten przykład, ale nawet wtedy linki nie działają, dlatego próbowałem kawałków. – jack

Powiązane problemy