2011-01-04 6 views
5

Estoy tratando de crear una tabla de contenidos simple (el documento tiene solo 4 páginas). El problema que tengo es que mientras mi mouse se convierte en una mano, cuando hago clic en él, no pasa nada. Y sí, los objetivos están en otra página.iText tiene problemas con Anchors (se puede hacer clic pero no ocurre nada)

creación de una tabla de contenidos línea:

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

Uno de los objetivos:

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

Los Goto String partidos con la Anchor name así que no ven lo que estoy haciendo mal.

+0

¿Qué versión de iText estás utilizando? Esto podría ser un error neolítico que se solucionó hace mucho tiempo ... –

+0

2.1.7/5.0.5 Solo quería comprobar si había mucha diferencia entre los dos para mis requisitos ya que el primero usa LGPL mientras que el segundo usa AGPL. – jack

Respuesta

1

En this example de iText en Acción, el enlace interno utiliza una # en el nombre.

Otro enfoque sería usar Chunk s tanto para el enlace como para el destino.

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

Mi lectura de PdfDocument (localGoto y localDestination) me lleva a creer que el orden en que son creados no importa ... espera ... No, no debería importar, siempre y cuando tanto en realidad se llaman.

¿Realmente ha revisado su código para asegurarse de que ambos estén realmente llamados?

Otra opción: Fin de ejecución. Desplácese hasta el código nativo de PDF y hágalo allí. Cree su propio PdfDestination para la ubicación del capítulo y PdfAction para el TOC. Algo como esto:

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

NOTAS:

  1. Usted puede volver a utilizar un determinado PDFACTION si necesita varios enlaces al mismo sitio.
  2. Hay muchas maneras de definir un PdfDestination, solo utilicé el que prefiero. YMMV.
+0

Parece que no puede usar Anchor's para el objetivo, y Chunks para enlazar con el objetivo. Usar 2 Chunks funcionó bien. – jack

+0

El uso de trozos para ambos extremos es la solución. Gracias ! – steffen

0

Mirando el ejemplo aquí: ftp://ns.tnet.dp.ua/pub/ORACLE/Developers/Java_Doc_LIB/PDFLib/iText/tutorial/ch03.html Parece que para los enlaces internos necesita establecer la referencia como "#" + {nombre de anclaje}.

Ejemplo enlace interno:

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

Es decir, si usa anclajes para los enlaces, yo uso fragmentos. Comprobé ese ejemplo, pero incluso entonces los enlaces no funcionan, es por eso que probé los trozos. – jack

Cuestiones relacionadas