- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 PDFsharp 和 MigraDoc 从许多其他文件创建 PDF 报告文件。
基本上工作流程如下:
现在我可以轻松地连接文档并在 PDFsharp 中添加书签/大纲。我遇到问题的地方是在使用 MigraDoc 创建引用 PDFsharp 创建的书签/大纲作为超链接目标的 TOC 时。
在PDFsharp中添加书签/大纲的代码(成功添加书签):
// Current document is a PdfDocument and Title is the name of the bookmark
CurrentDocument.Outlines.Add(title, page, true, PdfOutlineStyle.Bold);
创建 TOC 页面并将其呈现到当前 PDFsharp 文档的 MigraDoc 代码:
// 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 书签列在末尾)但我无法链接到 PDFsharp 书签
我确定问题出在我对 MigraDoc 和/或 PDFsharp 的理解上。
一等奖是只使用 PDFsharp 添加目录。如果能帮助我指出正确的方向,我将不胜感激。
最佳答案
MigraDoc 是一个独立的世界 - 它使用 PDFsharp 创建 PDF 文件,但无法访问使用 PDFsharp 创建的 PDF 文件的内部结构(如您的书签)。
一种方法:使用 PDFsharp 创建 TOC(正如您已经建议的那样)。
其他方法:使用 MigraDoc 将现有 PDF 文件的页面添加到 MigraDoc 文档以创建最终的 PDF(您可以像添加图像一样从 PDF 文件添加页面)。
使用第二种方法,您可以为目录使用 MigraDoc 的格式化功能,并且 MigraDoc 将插入正确的页码,前提是您为每个图像(导入的 PDF 页面)添加 MigraDoc 书签。
使用第一种方法,您必须自己进行格式设置和插入页码,但您可以更好地控制最终的 PDF。
哪个是“最佳”方法?有点取决于您的 TOC 所需的格式化程度。使用第二种方法,TOC 可以有两个或更多页面,MigraDoc 会自动处理,TOC 中的条目可以有两行或更多行,MigraDoc 也会自动处理。但我认为添加大纲需要一些技巧(例如,在页面某处绘制带有大纲文本的非常小的白色文本)。
更新:对于仅使用 PDFsharp 的方法,您将使用如下代码添加链接:
PdfRectangle prect = new PdfRectangle(gfx.Transformer.WorldToDefaultPage(rect));
page.AddDocumentLink(prect, 1);
AddDocumentLink 的第二个参数是目标页面。
关于c# - 将 MigraDoc 目录添加到 PDFsharp PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36907871/
有没有办法不在每个页面上重复 Migradoc header ? 在我的程序中,我将图像添加到文档的标题中,如下所示: Section section = document.AddSectio
如何减少 MigraDoc 文档的上边距? 我在文档的右上角添加了一个图像,但是文档顶部和图像之间的空间太大。 这是我设置图像的方法: Section section = document.AddSe
我可以使用 MigraDoc 轻松地将图像添加到 PDF 文件的某个部分。但是,图像被页面宽度切成两半。 有没有办法强制图片调整大小,使其完全适合一页?还是必须手动完成? 如果必须手动完成,有人知道
我正在使用 MigraDoc 创建一个报告,该报告可以有 4 个表,2 行和 2 个表。 我尝试了许多不同的方法来实现这一点。 1- 我尝试在 table 上创建一个 leftIndent。 tabl
我正在尝试将图像放置为每个页面的页脚,我可以使用以下方法将页脚移近页面底部: doc.DefaultPageSetup.FooterDistance = "0cm" 但是我似乎无法找到一种方法来允许与
我想要一种在 MigraDoc 中设置相对列宽的方法,我找到了 this post就此主题而言。问题是,它对我不起作用。我从那篇文章中复制了确切的代码: Section section = docum
如何在渲染之前获取页数?我需要在我的文档中将数字写成单词。 最佳答案 对于页码作为数字: 您不必获取编号,您可以在文档中添加占位符(称为字段),并且 MigraDoc 将在呈现文档时自动插入页码。 见
我正在使用 MigraDoc 创建 PDF。根据我的要求,我必须根据页面\部分的内容添加不同的标题。我可以通过添加新部分并为每个部分定义新标题来实现它。到这里为止,一切正常。 在页脚中,我使用“Add
我有一个文本数据表,我想将某些数据缩进几个空格,但是我尝试的所有操作似乎都会导致我的字符串被自动修剪,并且前面的空格被删除。现在的 PDF 看起来像这样: http://i.imgur.com/KBK
我的任务是重构一个旧的 MigraDoc 项目,该项目由不再在我公司工作的开发人员编写,并且在使用以下代码时遇到问题.. var Split = new String[1]; Split[0] = "
我想知道是否有办法避免某些段落之间换行。例如: Paragraph PjourneyTitle = sec.AddParagraph(journeyTitle, "Heading2"); Paragr
我想在我的所有页面上添加水印并将其居中。这对于至少仅通过一组纵向页面“吸引眼球”来说是非常简单的,但在本文档中同时包含纵向和横向页面。 我的研究表明可以用这些元素来完成: myImage.Relati
有没有办法向 migradoc 表格单元格添加真正的填充?他们目前拥有的选项(LeftPadding 和 RightPadding)实际上像边距一样工作,而不像填充。如果您使用它,它还会推送背景颜色,
我一直在使用 MigraDoc 生成 PDF,除了添加图像外,我的所有布局都运行良好。对于程序的一部分,我们正在生成这些 PDF,因为我们使用的程序只将它们的信息保存为 XML,并且可以从那里将 XM
我需要找到一种方法来用 .png 图片填充整个封面,并在页面底部放置一些文本,而图片不会出现在该位置。 现在我通过使用它来拉伸(stretch): document.DefaultPageSetup.
我想创建一个 PDF 文件,该文件应包含一个表格,并在该表格下包含三个图像;图像应该有水平布局(它们应该在同一行)。如何对齐 MigraDoc 中的三个图像?如果我以这种方式添加图像 docum
我想要实现的是在页面上两次显示相同的内容,用虚线分隔,并使用填充,这样一份副本位于上半部分,第二份副本位于下半部分。类似于 firstSection.SpaceAfter = (height of p
我想在 MigraDoc 中使用不同的字体,但我很难坚持下去。目前,我正在使用以下代码: 我将其作为类范围的变量: String tPdfFont = "MonospaceTyperwrite
如何在 Migradoc 中添加一条简单的水平线,以便将线上方的内容与线下方的内容分开? Paragraph 1 Paragraph 2 Paragraph 3 ETC 最佳答案 您可以为段落或表格添
数据库中有一个 HEX 颜色代码字符串 ("#ADD8E6"),我想用它来更改 MigraDoc< 的背景颜色 单元格。我找到了 Color.Parse() 函数,但它并没有改变我的单元格的颜色。我必
我是一名优秀的程序员,十分优秀!