2015-10-15 30 views
0

我已經能夠在我的VB .NET代碼,看起來幾乎完全一樣,我希望它創建使用iTextSharp的PDF文件。但是,我正在使用具有一列和多行的表格來顯示使用塊和短語放在一起的長文本字符串。某些塊包含帶下劃線的文本。當一個短語中有下劃線的文本時,整個單元格需要高亮顯示爲灰色,並且我正在使用PdfPCell的BackgroundColor屬性。iTextSharp的下劃線在單元格文本落在外面細胞

我遇到的問題是,下劃線線落在小區邊界的外側(外側突出顯示的)。我已經嘗試了很多事情來解決這個問題,比如設置一個固定的單元格高度,然後將cell.VerticalAlignment設置爲Element.ALIGN_TOP;使用包含(0,0)的各種值的SetLeading,這隻會使問題變得更糟;將cell.Ascender設置爲True;並更改填充值。我可能也嘗試過其他的東西,但由於某種原因,無論我嘗試什麼,下劃線文本的界限都不在突出顯示之內。而且,高亮就會從上文單元格中的文本底部(這就是爲什麼我試圖與SetLeading值播放。)

的圖片顯示我生成的PDF的第2頁。 PDF with table

以下是實現此操作的代碼段的示例 - 「outString1」和「outString2」是附加到單行的輸出文本字符串。有一個布爾值用於確定一個文本塊是否需要加下劃線,另一個用於確定是否需要加亮單元格 - 有些情況下單元格可能會突出顯示,但文本不會加下劃線。有關我如何解決這個問題的任何建議?

Dim pdfTable As PdfPTable = New PdfPTable(1) 
pdfTable.WidthPercentage = 100 

    'the next section is within a loop to create and load each cell 
    Dim P As New Phrase() 
    'Slisted is a Boolean value to determine need for underlining 
    If Slisted Then 
     P.Add(New Chunk(outString1, myULfont)) 
    Else 
     P.Add(New Chunk(outString1, myfont)) 
    End If 
    P.Add(New Chunk(outString2, myfont)) 
    Dim cell As PdfPCell = New PdfPCell(P) 
    cell.Border = 0 
    cell.Padding = 0 
    'hilite is a Boolean value to determine whether 
    If hilite Then 
     cell.BackgroundColor = BaseColor.LIGHT_GRAY 
    End If 
    pdfTable.AddCell(cell) 

'out of loop, load table into document 
pdfDoc.Add(pdfTable) 
+0

您是否嘗試過改變字體,其他如Arial字體(它會破壞你的宋體固定寬度的設置,但只要給它一試)。關於setLeading的另一件事,是否僅適用於單元格?在複合模式下,您還必須設置添加的元素的前導,例如在將其添加到單元格之前設置段落的前導。 – haraman

+0

嘗試爲這些單元格設置一些「填充」,如果它由您確定。 – nelek

回答

0

默認情況下,下劃線與文本有一定的偏移量。不幸的是,因爲你已經殺掉了表格上的填充,所以偏移與單元格的佈局相沖突。一種選擇是你應該只是按照人們的建議改變填充。但是,另一種選擇是自行手動設置Chunk的下劃線偏移量。下面就是一個例子:

Dim T As New PdfPTable(1) 

For I = 1 To 10 

    ''//Your chunk 
    Dim Ch As New Chunk("Hello", DocFont) 

    ''//Wrap the chunk in a phrase 
    Dim p As New Phrase(Ch) 

    ''//Wrap the phrase in a cell 
    Dim cell As PdfPCell = New PdfPCell(p) 

    ''//Optional borders and padding 
    cell.Border = 0 
    cell.Padding = 0 

    ''//This is just an example to do every other cell 
    If I Mod 2 = 0 Then 
     cell.BackgroundColor = BaseColor.LIGHT_GRAY 

     ''//Set the thickness and offset from the text 
     Ch.SetUnderline(0.1, 0) 
    End If 

    T.AddCell(cell) 

Next 
+0

謝謝克里斯。我不得不把這個問題擱置一段時間,但我現在回來了,並會讓你知道它是如何工作的。我確實想要保持填充「被殺死」,因爲它對我的目的更好。 – jencarta

+0

因爲我已經在我的代碼中使用了塊,所以我按照你的建議使用了SetUnderline,它確實幫了很大忙。這不是完整的解決方案,但我會按照上面的建議玩弄填充而不是殺死它。最主要的是,當有相鄰單元格需要灰色背景時,我不希望它們之間有任何分離/我似乎正在接近我想要的確切輸出。謝謝! – jencarta

相關問題