我正在使用Ben Foster的Migradoc扩展来格式化一个使用Markdown语法的PDF文档。
在列表中使用头或子列表(<hx>或<li>元素)时,我遇到了一个问题(抛出了一个空引用异常)。问题是详细的here。
问题的根本原因是Migradoc不支持嵌套段落。
有没有可能解决此问题的方法?
发布于 2014-08-11 19:35:55
你会问“这个问题有没有可能的变通办法?”
MigraDoc能够创建PDF和RTF。RTF (Word)支持嵌套段落吗?
可能不会。我认为这不是MigraDoc的问题。
嵌套列表在MigraDoc中是可能的,但可能需要更改扩展。IIRC当涉及编号列表时,嵌套有一定的限制。
IMHO嵌套段落没有意义。MigraDoc支持允许在单个段落中使用不同格式的AddFormattedText。这可能需要改变扩展和/或给扩展的输入。
发布于 2015-11-14 18:49:57
嘿,我也一直在使用Ben Foster的Migradoc扩展,也遇到了同样的问题。这可能并不完美,但对我来说已经足够好了。修改您的HtmlConverter.cs并执行以下操作:
首先,添加一个全局变量:
private int _nestedListLevel;接下来,向AddDefaultNodeHandlers()方法添加两个新的节点处理程序:
nodeHandlers.Add("ul", (node, parent) =>
{
if (parent is Paragraph)
{
_nestedListLevel++;
return parent.Section;
}
_nestedListLevel = 0;
return parent;
});
nodeHandlers.Add("ol", (node, parent) =>
{
if (parent is Paragraph)
{
_nestedListLevel++;
return parent.Section;
}
_nestedListLevel = 0;
return parent;
});最后,将"li“节点处理程序更改为以下内容...请注意,这删除了他所做的一些样式工作,但它使我的事情变得更简单,并且工作得很好。如果你愿意,你可以重新添加这些东西。
nodeHandlers.Add("li", (node, parent) =>
{
var listStyle = node.ParentNode.Name == "ul"
? "UnorderedList"
: "OrderedList";
var section = (Section)parent;
var isFirst = node.ParentNode.Elements("li").First() == node;
var isLast = node.ParentNode.Elements("li").Last() == node;
var listItem = section.AddParagraph().SetStyle(listStyle);
if (listStyle == "UnorderedList")
{
listItem.Format.ListInfo.ListType = _nestedListLevel%2 == 1 ? ListType.BulletList2 : ListType.BulletList1;
}
else
{
listItem.Format.ListInfo.ListType = _nestedListLevel % 2 == 1 ? ListType.NumberList2 : ListType.NumberList1;
}
if (_nestedListLevel > 0)
{
listItem.Format.LeftIndent = String.Format(CultureInfo.InvariantCulture, "{0}in", _nestedListLevel*.75);
}
// disable continuation if this is the first list item
listItem.Format.ListInfo.ContinuePreviousList = !isFirst;
if (isLast)
_nestedListLevel--;
return listItem;
});https://stackoverflow.com/questions/25241609
复制相似问题