用VB.net在PDF中创建换行符



我有一个从集合中的项目创建列表的应用程序。然后,对于每个条目,我将其添加到一个空字符串中,然后在其末尾添加一个换行符。理想情况下,字符串应该是这样的:

List1 nList2 nList3 n

生成此字符串后,我将其发送回pdf的占位符中。如果我在一个简单的控制台应用程序中尝试这段代码,它会在换行符上打印所有内容。但在我的现实生活中,我必须把它打印成pdf格式。项之间只显示空格,而不显示换行符。如何才能格式化我的字符串,使pdf识别换行符,而不是忽略它?

下面是生成带有换行符的字符串的代码。

    Private Function ConcatPlacardNumbers(ByVal BusinessPlacardCollection As BusinessPlacardCollection) As String
    Dim PlacardNumbersList As String = Nothing
    Dim numberofBusinessPlacards As Long = BusinessPlacardCollection.LongCount()
    For Each BusinessPlacard As BusinessPlacard In BusinessPlacardCollection
        numberofBusinessPlacards = numberofBusinessPlacards - 1
        PlacardNumbersList = String.Concat(PlacardNumbersList, BusinessPlacard.PlacardNumber)
        If numberofBusinessPlacards <> 0 Then
            PlacardNumbersList = String.Concat(PlacardNumbersList, Enviornment.newline)
        End If
    Next
    Return PlacardNumbersList
End Function

尝试添加u2028:

Private Function ConcatPlacardNumbers(ByVal BusinessPlacardCollection As _
                                      BusinessPlacardCollection) As String
    Dim PlacardNumbersList As New StringBuilder()
    For Each BusinessPlacard As BusinessPlacard In BusinessPlacardCollection
        PlacardNumbersList.Append(BusinessPlacard.PlacardNumber)
        'PlacardNumbersList.Append(ChrW(8232)) 'u2028 line in decimal form
        PlacardNumbersList.Append(ChrW(8233)) 'u2029 paragr. in decimal form
    Next
    Return PlacardNumbersList.ToString
End Function

段落用u2029代替。查看更多细节:
http://blogs.adobe.com/formfeed/2009/01/paragraph_breaks_in_plain_text.html

答案取决于用来生成PDF的工具。由于换行不起作用,我实际上会尝试n。另一种可能性是PDF生成代码没有设计成发出多行;您只能通过检查生成代码来确定这一点。

然而,有一个重要的性能问题,你应该在你的代码中解决:你将使用这段代码生成大量的字符串对象。您应该更改设计以使用System.Text。StringBuilder,它将大大提高性能:
Private Function ConcatPlacardNumbers(ByVal BusinessPlacardCollection As BusinessPlacardCollection) As String
    Dim PlacardNumbersList As New System.Text.StringBuilder(10000)
    For Each BusinessPlacard As BusinessPlacard In BusinessPlacardCollection
        If PlacardNumbersList.Length <> 0 Then
            ' This is equivalent to Environment.NewLine
            'PlacardNumbersList.AppendLine()
            ' The attempt to use n
            PlacardNumbersList.Append("n")
        End If
        PlacardNumbersList.Append(BusinessPlacard.PlacardNumber)
    Next
    Return PlacardNumbersList.ToString
End Function

请注意,您也不需要跟踪标语牌编号:您可以在每次通过的第一个项目之后的上一个项目的末尾添加一个换行符。

最新更新