2010-01-26 25 views
7

Genero dinámicamente un PDF usando ABCpdf que contiene una tabla de contenido que enlazaría con otras páginas dentro del mismo PDF. El problema es que la ruta de las etiquetas de anclaje en el HTML cambia a una ruta absoluta a un archivo temporal.ABCpdf conversión de anclajes html para saltar a otra página en el mismo PDF

Por ejemplo, ABCpdf haría href del enlace:

<a href="#elementId">Link</a> 

en el PDF como: file: /// C: /Users/Aaron/AppData/Local/Temp/ABCpdf/pdfCMMYPSF.htm #elementId

Ésta es la forma en que genero el PDF:

Doc pdf = new Doc(); 
pdf.HtmlOptions.AddLinks = true; 
pdf.Rect.Rectangle = new System.Drawing.Rectangle(20, 80, 572, 702); 
int id = pdf.AddImageHtml(pdfHTML, true, pdf.HtmlOptions.BrowserWidth, true); 

while (pdf.Chainable(id)) 
{ 
    pdf.Page = pdf.AddPage(); 
    id = pdf.AddImageToChain(id); 
} 

pdf.HtmlOptions.LinkPages(); 
for (int i = 0; i < pdf.PageCount; i++) 
{ 
    pdf.PageNumber = i; 
    pdf.Flatten(); 
} 

Alguna idea de cómo puedo conseguir los enlaces de anclaje para rendir adecuadamente para hacer clic en él saltará a otra ¿página?

+0

Solo FYI, he tenido mucha suerte recibiendo apoyo directamente de los creadores de ABCpdf. ¿Intentó eso? – Bryan

+0

Acabo de enviarles un correo electrónico, gracias por la sugerencia. – Aaron

+0

El soporte de WebSuperGoo es excelente y uno de los mejores, Bryan tiene esta sugerencia. – Jakkwylde

Respuesta

6

Websupergoo me respondió y pude depurar mi problema de un proyecto de muestra que me proporcionaron. La solución a mi problema era bastante simple, voy a publicar la respuesta aquí por si alguien más tiene el mismo problema:

Mi HTML se creó de esta manera:

<a href="#elementId">Link to another page</a> 
<div id="elementId">A div that's on another page</div> 

Simplemente tenía que cambiar a:

<a href="#elementId">Link to another page</a> 
<div><a name="elementId">A div that's on another page</a></div> 

Usted necesita usar una etiqueta de ancla con el nombre especificado con el fin de ABCpdf para hacer saltar el enlace a otra página dentro de la misma PDF.

+1

Esto funciona!También una nota para los demás, si está utilizando en su etiqueta de la cabeza va a estropear sus anclajes por lo que necesitará referencia de todo con una url absoluta –

+1

Funciona para mí también. También tuve que establecer document.HtmlOptions.AddLinks = true; y ejecuta document.HtmlOptions.LinkPages(); después de aplanar el documento. –

3

Por lo que vale, he tenido resultados inconsistentes a través del AddImageHtml con respecto a los marcadores anclados. La forma más confiable de lograr esto es a través del método AddBookMark, pero esto implicaría mucho más trabajo ya que estaría trabajando para reconstruir manualmente los contenidos PDF y el soporte HTML de esa manera es limitado. Más información sobre este método se puede encontrar en:

http://www.websupergoo.com/helppdf7net/source/5-abcpdf6/doc/1-methods/addbookmark.htm

Tal vez sus nuevas versiones de 8 direcciones este problema. Los marcadores siempre parecen resolverse en una ubicación absoluta en lugar de relativa, como puede ver en su navegador a través de HTML convencional.

1

Otro método que ha funcionado para mí en la última versión ABCpdf (9) es añadir un marcador a cada página del documento:

For i = 1 to pdf.PageCount 

    pdf.PageNumber = i 
    pdf.AddBookmark("Page " & i, True) 

Next 

A continuación, en la que desea insertar un enlace puede hacer referencia al favorito - en este caso, creamos una tabla de contenidos por parte de bucle a través de cada marcador que hemos creado:

For Each bm As Bookmark In pdf.Bookmark 

    toc &= "<Font annots='goto:" + bm.Page.PageNumber.ToString() + "'>" & bm.Title & "</Font><br>" 

Next 

pdf.AddHtml(toc) 

El equipo Websupergoo me proporcionó un código de ejemplo y eso es lo que este se basa fuera de - así que gracias a ellas !