2014-12-23 4 views
1

Я использую PdfSharp/Migradoc для создания PDF-файла в C#, теперь я попытался добавить ссылку документа внутри файла pdf, в основном это создать таблицу элементов и щелкнуть имя элемента для навигации на другую страницу подробностей. Я пытался использовать метод Migradoc Paragraph.AddHyperlink(), ниже это код, используемыйДобавление ссылки на документ в формате PDF от Migradoc

Paragraph p = cell.AddParagraph(); 

          Hyperlink link = p.AddHyperlink(tmp_value, HyperlinkType.Bookmark); 
          link.AddText(tmp_value); 
          link.AddPageRefField(some_bookmark); 

Моя проблема эта страница навигации создается до закладки генерируются позже, после выполнения, то ссылка не появилась и только сообщение об ошибке вроде «[название элемента], закладка [some_bookmark] не определена», кто-нибудь может подчеркнуть, что это правильный способ узнать об этом? Благодарю.

ответ

3

Вам нужно что-то вроде paragraph.AddBookmark(tmp_value); как цель прыжка. Об этом сообщает сообщение об ошибке: целевая закладка не определена.

MigraDoc создает PDF за два прохода, и не имеет значения, где в документе находится цель.

link.AddPageRefField(some_bookmark); добавит номер страницы страницы с закладкой «some_bookmark». В чем цель этого?

Смотрите также:
http://pdfsharp.net/wiki/HelloMigraDoc-sample.ashx

Hyperlink hyperlink = paragraph.AddHyperlink("Paragraphs"); 
    hyperlink.AddText("Paragraphs\t"); 
    hyperlink.AddPageRefField("Paragraphs"); 

Первая строка определяет цель - строку, определенную с AddBookmark в другом месте в документе. Вторая строка дает текст, который показан в ссылке. Третья строка добавляет номер страницы в ссылку.

+0

Спасибо за объяснение, поэтому целевая страница и ссылка должны указывать на одну и ту же закладку, мой следующий вопрос: должна ли быть определена закладка, используемая в гиперссылке, перед созданием ссылки? –

+0

Цель должна существовать при визуализации PDF. Когда вы создаете ссылку, MigraDoc просто сохраняет строку, которую вы передаете, без каких-либо проверок. Вам не нужно создавать цель, прежде чем добавлять ссылку (связанный образец MigraDoc также делает это в этом порядке). –

+0

Привет @ThomasH, я понимаю, где моя проблема, я создаю таблицу с использованием MigraDoc, и она пересекает несколько страниц, на каждой странице я сделал RenderPage(), в противном случае она будет отображаться пустым в окончательном pdf (я не знаю, почему), так что во время рендеринга проблема не может найти закладки, используемые в определении ссылок, поскольку мои закладки будут определены только на последующих страницах, можете ли вы дать мне некоторое представление о решении этой проблемы? Благодарю. –