MigraDoc - 额外和不需要的换行符
MigraDoc - extra and unwanted NewLines
我有一个代码,我在其中创建了一个包含 4 行的段落,其中 3 行使用制表符分隔行标签和参数。令人惊讶的是,以另一种形式完美运行的代码在当前形式下让我非常头疼,即使它实际上 100% 相同。行标签和参数之间出现两条额外的行。
Dim ParPara As New Paragraph ' create new paragraph
Dim formtext As New FormattedText
formtext.Bold = True
formtext.AddText("ABC 12345")
Dim formtext2 As New FormattedText
formtext2.Bold = True
formtext2.AddText("163658468435831484")
Dim formtext3 As New FormattedText
formtext3.Bold = True
formtext3.AddText("PARAMETER 1")
ParPara.Add(formtext4)
ParPara.AddLineBreak() ' intentional line break at the end of line
ParPara.AddText("Row Header 1:")
ParPara.AddTab()
ParPara.Add(formtext)
ParPara.AddLineBreak() ' intentional line break at the end of line
ParPara.AddText("Row Header 2:")
ParPara.AddTab()
ParPara.Add(formtext2)
ParPara.AddLineBreak() ' intentional line break at the end of line
ParPara.AddText("Row Header 3:")
ParPara.AddTab()
ParPara.Add(formtext3)
...
TableRowHead0F.Cells(1).Add(ParPara)
我什至比较了该段落的内存内容,两种形式 100% 相同,一种工作完美,另一种插入额外的换行符:
内存结构正确:
migradoc 样式在两种形式(工作和失败)中的设置也是相同的。
有人知道为什么会这样吗?
编辑: 按照建议,我比较了 MDDDL,没有发现任何差异:
我不知道,是否有某些上下文(单元格样式?)会影响它,但这真的很奇怪。这不是我第一次在 MigraDoc 中看到类似的东西...
编辑 2:
问题在于切换一种样式定义的行顺序,我在末尾有这段代码的第 2 行:
Dim sStyle As Style = PruvDoc.Styles(StyleNames.Normal)
sStyle = PruvDoc.Styles.AddStyle("Quest", "Normal")
sStyle.ParagraphFormat.TabStops.Clear()
sStyle.ParagraphFormat.TabStops.AddTabStop("9cm", TabAlignment.Left, TabLeader.Dots)
...这意味着制表位应用于 "Normal" 样式,而不是 "Quest"。出乎意料的是,它在出现问题的部分之后很好地定义了(好知道)。
调查此类问题的一种有用方法:您可以为有效版本和无效版本创建 MDDDL 文件,然后比较 MDDDL 文件。
看这里:
http://pdfsharp.net/wiki/MigraDocDDL.ashx
MDDDL 文件具有一定的可读性,可用于检查您实际添加到文档中的内容 - 即使您只有一个无法按预期工作的版本。
我有一个代码,我在其中创建了一个包含 4 行的段落,其中 3 行使用制表符分隔行标签和参数。令人惊讶的是,以另一种形式完美运行的代码在当前形式下让我非常头疼,即使它实际上 100% 相同。行标签和参数之间出现两条额外的行。
Dim ParPara As New Paragraph ' create new paragraph
Dim formtext As New FormattedText
formtext.Bold = True
formtext.AddText("ABC 12345")
Dim formtext2 As New FormattedText
formtext2.Bold = True
formtext2.AddText("163658468435831484")
Dim formtext3 As New FormattedText
formtext3.Bold = True
formtext3.AddText("PARAMETER 1")
ParPara.Add(formtext4)
ParPara.AddLineBreak() ' intentional line break at the end of line
ParPara.AddText("Row Header 1:")
ParPara.AddTab()
ParPara.Add(formtext)
ParPara.AddLineBreak() ' intentional line break at the end of line
ParPara.AddText("Row Header 2:")
ParPara.AddTab()
ParPara.Add(formtext2)
ParPara.AddLineBreak() ' intentional line break at the end of line
ParPara.AddText("Row Header 3:")
ParPara.AddTab()
ParPara.Add(formtext3)
...
TableRowHead0F.Cells(1).Add(ParPara)
我什至比较了该段落的内存内容,两种形式 100% 相同,一种工作完美,另一种插入额外的换行符:
内存结构正确:
migradoc 样式在两种形式(工作和失败)中的设置也是相同的。
有人知道为什么会这样吗?
编辑: 按照建议,我比较了 MDDDL,没有发现任何差异:
我不知道,是否有某些上下文(单元格样式?)会影响它,但这真的很奇怪。这不是我第一次在 MigraDoc 中看到类似的东西...
编辑 2:
问题在于切换一种样式定义的行顺序,我在末尾有这段代码的第 2 行:
Dim sStyle As Style = PruvDoc.Styles(StyleNames.Normal)
sStyle = PruvDoc.Styles.AddStyle("Quest", "Normal")
sStyle.ParagraphFormat.TabStops.Clear()
sStyle.ParagraphFormat.TabStops.AddTabStop("9cm", TabAlignment.Left, TabLeader.Dots)
...这意味着制表位应用于 "Normal" 样式,而不是 "Quest"。出乎意料的是,它在出现问题的部分之后很好地定义了(好知道)。
调查此类问题的一种有用方法:您可以为有效版本和无效版本创建 MDDDL 文件,然后比较 MDDDL 文件。
看这里:
http://pdfsharp.net/wiki/MigraDocDDL.ashx
MDDDL 文件具有一定的可读性,可用于检查您实际添加到文档中的内容 - 即使您只有一个无法按预期工作的版本。