2011-11-02 233 views
0

MVC 3. Vb.net。我的應用程序的一部分使用Itextsharp生成PDF文件。有些字符串太長,無法正確顯示背景圖像。所以我基本上需要分割這個字符串,當它的長度超過26個字符,並且它分裂它不能分裂在一個字的中間。從那裏我將使用換行符將字符串添加到右邊的下一行...任何想法都可能指向正確的方向..我開始建立函數,我將字符串傳入測試的長度,然後傳回字符串它完成,但我之後stummped以後。根據設置的字符長度拆分字符串

Private Function stringLength(ByVal _string As String) As String 
     If _string.Length < 26 Then 
      _string.Split(
     End If 
    End Function 
+0

這裏是AC#回答類似的問題:http://stackoverflow.com/questions/2815021/split-large-text-string-into-variable-長度字符串沒有破碎字 它的值得注意的是,雖然大多數字體是可變寬度,所以字符數可能並不實際上對應的像素寬度 –

+0

感謝您的答覆..我在這部分氣的應用程序...我只會縮小字體,直到他們適合..我對c一無所知,當它轉換它的充滿錯誤,我不真正下站..再次感謝.. – Skindeep2366

回答

1

我確信有一百萬種不同的方式來做到這一點。

你基本上需要把你的所有單詞按空格分成一個列表。之後,您只需要檢查當前單詞加上空格加上下一個單詞是否達到閾值,如果是,則移至下一行。一旦你有所有的線路,然後你重新加入單一字符串列表再次。

Private Function LimitWidth(ByVal text As String, ByVal maxCharacters As Integer) As String 
    Dim words As List(Of String) = text.Split(" "c).ToList() 

    If text.Length < maxCharacters OrElse words.Count = 1 Then 
    Return text 
    Else 
    Dim lines As New List(Of String) 

    Dim currentLine As String = words(0) 
    For i As Integer = 1 To words.Count - 1 
     If (currentLine & " " & words(i)).Length > maxCharacters Then 
     lines.Add(currentLine) 
     currentLine = words(i) 

     If i = words.Count - 1 Then 
      lines.Add(currentLine) 
     End If 
     Else 
     If i = words.Count - 1 Then 
      lines.Add(currentLine & " " & words(i)) 
     End If 

     currentLine &= " " & words(i) 
     End If 
    Next 

    Return String.Join(Environment.NewLine, lines.ToArray()) 
    End If 
End Function 

測試:

Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click 
    MessageBox.Show(LimitWidth("This is a really long sentence " & _ 
          "meant to demonstrate how to split " & _ 
          "the words into a confined character length.", 26)) 
End Sub 
+0

感謝您的答覆...我實現了它,並使用休息來看看發生了什麼......問題是,雖然我在itextsharp中使用contentbyte ..從函數的流和返回的換行符我相信這將字符串拆分成需要的字符串,並在特定的位置插入Newline,然後將其作爲一個字符串返回。問題是,contentbyte只是將它視爲一行。我正在使用contentbyte來控制項目的頁面定位。儘管如此,它仍然是在正確的領域。可能試圖讓它返回一個字符串列表,這樣我就可以把每一行都拉出來。 – Skindeep2366

+0

好,所以這是我的道路上......我刪除了environment.newline並在那裏放置了一個分隔符......這樣它就返回帶有分隔符的字符串..然後,我可以從那裏相應地分配,並將左側分配到第一行,並將右側分配給右側..我有代碼在這裏放置,您給我處理分隔符我可以調整它有點..非常感謝.. – Skindeep2366

+0

@ Skindeep2366很高興提供幫助。 – LarsTech

1

這聽起來像你所要求的自動換行功能。

因爲我覺得最好是以一種促進學習的方式回答問題,而不僅僅是回答問題,所以我給你一個鏈接,指導你使用測試驅動開發(TDD)來解決這個問題。恰恰恰巧,單詞包裝問題是一種流行的編碼kata,Robert C. Martin寫了一個有點愚蠢的虛構故事,講述了一位開發人員如何使用TDD解決kata包裝問題。

代碼示例使用Java語言,但讀取和翻譯應該是微不足道的。

http://thecleancoder.blogspot.com/2010/10/craftsman-62-dark-path.html

的高飛位是跳躍能夠。只需跳到第一個代碼片段之前的句子即可。

+0

感謝您的答覆。我經歷了它並嘗試了它。我只是通過vb.net學習我的方式,所以從java到vb.net的轉換稍微高於我的曲線..我將縮小pdf上的字體,如果我的客戶不喜歡它,我會處理它在時機成熟時。 – Skindeep2366

相關問題