Я пытаюсь использовать PDFsharp и MigraDoc для создания файла отчета в формате PDF из многих других файлов.
В основном рабочий процесс выглядит следующим образом:
- Пользователь загружает 2 или более документов для объединения
- Пользователь выбирает, какие страницы он хочет включить в оглавление.
- Документы объединяются вместе, и создается оглавление.
Теперь я могу легко объединять документы и добавлять закладки / контуры в PDFsharp. Где я столкнулся с проблемами, так это при использовании MigraDoc для создания оглавления, ссылающегося на созданные PDFsharp закладки / контуры в качестве целей гиперссылок.
Код для добавления закладки / структуры в PDFsharp (успешно добавляет закладки):
// Current document is a PdfDocument and Title is the name of the bookmark
CurrentDocument.Outlines.Add(title, page, true, PdfOutlineStyle.Bold);
Код MigraDoc для создания страницы оглавления и преобразования ее в текущий документ PDFsharp:
// Create blank page
PdfPage page = (!hasTitlePage)
? AddPage(null, 0, TOC_BOOKMARK_TITLE) // Add to start
: AddPage(null, 1, TOC_BOOKMARK_TITLE); // Add after title page
// Get Graphics obj
XGraphics gfx = XGraphics.FromPdfPage(page);
gfx.MUH = PdfFontEncoding.Unicode;
// Create MigraDoc document + Setup styles
Document document = new Document();
DefineStyles(document);
// Add header
Section section = document.AddSection();
Paragraph paragraph = section.AddParagraph("Table of Contents");
paragraph.Format.Font.Size = 14;
paragraph.Format.Font.Bold = true;
paragraph.Format.SpaceAfter = 24;
paragraph.Format.OutlineLevel = OutlineLevel.Level1;
// Add links - these are the PdfSharp outlines/bookmarks added previously when concatinating the pages
foreach (var bookmark in CurrentDocument.Outlines)
{
paragraph = section.AddParagraph();
paragraph.Style = "TOC";
Hyperlink hyperlink = paragraph.AddHyperlink(bookmark.Title);
hyperlink.AddText($"{bookmark.Title}\t");
hyperlink.AddPageRefField(bookmark.Title);
}
// Render document
DocumentRenderer docRenderer = new DocumentRenderer(document);
docRenderer.PrepareDocument();
docRenderer.RenderPage(gfx, 1);
return page;
Примечание. Код MigraDoc добавляет страницу оглавления, но не распознает закладки PDFsharp.
Снимок экрана с оглавлением: страница оглавления добавляется в начале (хотя закладка оглавления указана в конце), но я не могу ссылаться на закладки PDFsharp < / а>
Я уверен, что проблема связана с моим пониманием MigraDoc и / или PDFsharp.
Первый приз - использовать PDFsharp только для добавления оглавления. Буду признателен за любую помощь в правильном направлении.