MigraDoc-多余和不需要的换行符

时间:2019-02-05 16:47:56

标签: pdf-generation newline migradoc

我有一个代码,其中我创建了一个包含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%相同的,一种完美无缺,另一种插入了额外的换行符:

enter image description here

内存结构正确:

enter image description here

migradoc样式在两种形式(工作和失败)中的设置也相同。

任何人都知道为什么会发生这种情况吗?

编辑:按照建议,我比较了MDDDL,但没有发现任何差异: enter image description here

我不知道是否有某种上下文(单元格样式?)影响这一点,但这确实很奇怪。这不是我第一次在MigraDoc上看到类似的东西...

编辑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)

...,这意味着制表位适用于“普通”样式,而不是“任务”样式。出乎意料的是,该部分在问题发生的位置很好定义(很容易知道)。

1 个答案:

答案 0 :(得分:1)

一种研究此类问题的有用方法:您可以为有效的版本和无效的版本创建MDDDL文件,然后比较MDDDL文件。
看这里:
http://pdfsharp.net/wiki/MigraDocDDL.ashx

MDDDL文件有些可读,可以用来检查您实际添加到文档中的内容-即使您只有一个版本无法正常工作。