ABCpdf конвертирует html якоря для перехода на другую страницу в том же PDF - PullRequest
8 голосов
/ 26 января 2010

Я динамически генерирую PDF, используя ABCpdf, который содержит оглавление, которое будет ссылаться на другие страницы в том же PDF. Проблема заключается в том, что путь к тегам привязки в HTML изменяется на абсолютный путь к временному файлу.

Например, ABCpdf отобразит ссылку href:

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

в PDF как: файл: /// C: /Users/Aaron/AppData/Local/Temp/ABCpdf/pdfCMMYPSF.htm#elementId

Вот как я генерирую 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();
}

Есть какие-нибудь идеи, как я могу сделать так, чтобы ссылки на якорь отображались правильно, поэтому при щелчке по нему вы перейдете на другую страницу?

Ответы [ 3 ]

6 голосов
/ 01 февраля 2010

Websupergoo вернулся ко мне, и я смог отладить мою проблему из предоставленного ими примера проекта. Решение моей проблемы было довольно простым, я опубликую ответ здесь на тот случай, если у кого-то возникнет такая же проблема:

Мой HTML был настроен так:

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

Мне просто нужно было изменить его на:

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

Вам нужно использовать тег привязки с указанным именем, чтобы ABCpdf мог перейти по ссылке на другую страницу в том же PDF-файле.

3 голосов
/ 28 января 2010

Несмотря на это, я получил непоследовательные результаты через AddImageHtml относительно закрепленных закладок. Самый надежный способ сделать это - метод AddBookMark, но это потребует значительно больше работы, так как вам придется вручную восстанавливать содержимое PDF, а поддержка HTML таким образом ограничена. Более подробную информацию об этом методе можно найти по адресу:

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

Возможно, их последняя версия 8 решает эту проблему. Закладки всегда кажутся разрешенными в абсолютном месте, а не относительно, как вы видите в браузере с помощью обычного HTML.

2 голосов
/ 24 июля 2013

Другой метод, который работал для меня в последней версии ABCpdf (9), заключается в добавлении закладки на каждую страницу в вашем документе:

For i = 1 to pdf.PageCount

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

Next

Тогда, где вы хотите вставить ссылку, вы можете ссылаться на закладку - в этом случае мы создаем оглавление, просматривая каждую созданную нами закладку:

For Each bm As Bookmark In pdf.Bookmark

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

Next

pdf.AddHtml(toc)

Команда Websupergoo предоставила мне пример кода, и именно на этом он основан - так что спасибо им!

...