我試圖使用PDFsharp和MigraDoc創造許多其他文件的PDF報告文件。內容MigraDoc表添加到PDFsharp PDF
基本工作流程如下:
- 用戶上傳2個或更多的文檔來連接
- 用戶選擇他們想要的網頁在TOC包括
- 的文件被連接起來一起生成目錄
現在我可以輕鬆地連接文檔並添加bookm方舟/ PDFsharp中的輪廓。我遇到問題的地方是使用MigraDoc創建TOC時引用PDFsharp創建的書籤/輪廓作爲超鏈接的目標。
代碼添加書籤/提綱PDFsharp(成功添加書籤):
// Current document is a PdfDocument and Title is the name of the bookmark
CurrentDocument.Outlines.Add(title, page, true, PdfOutlineStyle.Bold);
MigraDoc代碼來創建TOC頁面,並將其呈現到當前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代碼將TOC頁,但它不承認PDFsharp書籤。
截圖的TOC的: 的TOC頁面開始添加(雖然TOC書籤在年底上市),但我不能鏈接到PDFsharp書籤
我敢肯定的是,問題在於我對MigraDoc和/或PDFsharp的理解。
一等獎將僅使用PDFsharp添加TOC。我希望有任何幫助指出正確的方向。
我明白了。由於我已經在PdfSharp中編寫了大部分代碼,因此我將嘗試PdfSharp TOC方法。您能否指示我如何實際創建一個「鏈接」到書籤的PdfSharp Equivelent?我努力通過搜索您的網站來找到一個例子。謝謝! – lukejkw
感謝您的幫助,並繼續在一個夢幻般的圖書館工作。還有一個問題,'rect'參數表示什麼?你沒有指定它的初始化。 – lukejkw
'rect'是超級鏈接的可點擊區域。超鏈接存在自己的 - 你不必在那裏繪製任何東西,但在你的情況下,圍繞你的TOC行的文本製作矩形。 –