如何在iTextSharp中使用非中断空间

时间:2011-11-15 06:12:30

标签: itextsharp whitespace

如何使用非中断空间在PdfPTable单元格中具有多行内容。 iTextSharp用空格字符分解单词。

场景是我想要一个表头中的多行内容,例如在第一行它可能会显示“Text1&”在第二行显示“文本”,在渲染PDF时,Text1显示在第一行,然后显示在第二行&显示,第三行显示第一行的长度,并将剩余的字符截断到下一行。

或者我可以为表格的每一列设置特定宽度,以便容纳其中的文本内容,例如文本将在特定宽度内包裹。

1 个答案:

答案 0 :(得分:5)

您没有指定语言,所以我会在VB.Net中回答,但如果需要,您可以轻松将其转换为C#。

关于第一个问题,要使用不间断的空间,只需使用适当的Unicode代码点U+00A0

在VB.Net中,您将其声明为:

Dim NBSP As Char = ChrW(&HA0)

在C#中:

Char NBSP = '\u00a0';

然后你可以在需要的地方连接它:

Dim Text2 As String = "This is" & NBSP & "also" & NBSP & "a test"

您也可能会发现non-breaking hyphen (U+2011)也很有帮助。

对于第二个问题,是的,您可以设置每列的宽度。但是,列宽始终设置为相对宽度,因此如果使用:

T.SetTotalWidth(New Single() {2.0F, 1.0F})

你实际上说的是,对于给定的表,第一列应该是第二列的两倍,你是 NOT 说第一列是2px宽并且第二个是1px 。这一点非常重要。上面的代码与接下来的两行完全相同:

T.SetTotalWidth(New Single() {4.0F, 2.0F})
T.SetTotalWidth(New Single() {100.0F, 50.0F})

列宽相对于表格的宽度,默认情况下(如果我没记错的话)是可写页面宽度的80%。如果要将表格的宽度固定为绝对宽度,则需要设置两个属性:

''//Set the width
T.TotalWidth = 200.0F
''//Lock it from trying to expand
T.LockedWidth = True

综上所述,下面是一个完整的WinForms应用程序,目标是iTextSharp 5.1.1.0:

Option Explicit On
Option Strict On

Imports System.IO
Imports iTextSharp.text
Imports iTextSharp.text.pdf

Public Class Form1

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        ''//File that we will create
        Dim OutputFile As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "TableTest.pdf")

        ''//Standard PDF init
        Using FS As New FileStream(OutputFile, FileMode.Create, FileAccess.Write, FileShare.None)
            Using Doc As New Document(PageSize.LETTER)
                Using writer = PdfWriter.GetInstance(Doc, FS)
                    Doc.Open()

                    ''//Create our table with two columns
                    Dim T As New PdfPTable(2)
                    ''//Set the relative widths of each column
                    T.SetTotalWidth(New Single() {2.0F, 1.0F})
                    ''//Set the table width
                    T.TotalWidth = 200.0F
                    ''//Lock the table from trying to expand
                    T.LockedWidth = True

                    ''//Our non-breaking space character
                    Dim NBSP As Char = ChrW(&HA0)

                    ''//Normal string
                    Dim Text1 As String = "This is a test"
                    ''//String with some non-breaking spaces
                    Dim Text2 As String = "This is" & NBSP & "also" & NBSP & "a test"

                    ''//Add the text to the table
                    T.AddCell(Text1)
                    T.AddCell(Text2)

                    ''//Add the table to the document
                    Doc.Add(T)

                    Doc.Close()
                End Using
            End Using
        End Using

        Me.Close()
    End Sub
End Class