3

コレクション内のアイテムからリストを作成するアプリケーションがあります。次に、項目ごとに空の文字列に追加し、最後に改行文字を追加します。したがって、理想的には、私の文字列は次のようになります。

リスト1\nリスト2\nリスト3\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
4

2 に答える 2

1

答えは、PDF の作成に使用されているツールによって異なります。改行が機能しないので、実際に試してみ\nます。もう 1 つの可能性は、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

また、プラカード番号を追跡する必要がないことに注意してください。最初のパスの後の各パスで、前のアイテムの末尾に改行を追加できます。

于 2013-01-07T02:24:08.080 に答える
1

\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を参照してください。

于 2013-01-07T09:49:55.857 に答える