2017-07-28 134 views
0

我正在C#中使用itexsharp生成pdf文件的工資結算格式。itextsharp單元格的中心內容C#

但我無法控制PdfPTable/PdfPCell單元的內容對齊。

我有這樣的代碼:

 /*datos del LA LIQUIDACIÓN*/ 
     //1° linea 
     phrase.Font = new Font(FontFactory.GetFont("Arial", 10, Font.BOLD)); 
     phrase.Add("H A B E R E S"); 
     PdfPCell cell2 = new PdfPCell(); 
     cell2.Border = Rectangle.NO_BORDER; 
     cell2.PaddingTop = -7; 
     cell2.AddElement(phrase); 
     cell2.Colspan = 3; 
     cell2.HorizontalAlignment = PdfPCell.ALIGN_CENTER; 
     table2.AddCell(cell2);     
     phrase.Clear(); 

但它給了我這樣的結果:

enter image description here

它在哪裏,例如文本「HABERES」的單元格的內容,我需要它與中心對齊,但它與左邊對齊。

我已閱讀過此文章"Right aligning text in PdfPCell",我已經做了所有吃的東西,除了採取「不同的道路」,提到什麼nevers ......我能做什麼呢?

+0

一個爲什麼我們與iText的7改寫iText的從無到有的原因,是這一事實,**很多開發商不閱讀文檔**。因此,他們不理解*文本模式*和*複合模式*之間的區別。 iText 7更加傻瓜化,這導致了問題:爲什麼你仍然使用iText 5而不是iText 7? –

+0

親愛的Bruno Lowagie,它的文檔是針對java,itext的,我想它是完全正確的。但正如你所看到的,我正在使用itextsharp來處理C#。我已經使用過,構建我的項目,我在各種示例中找到的代碼。由於itextsharp文檔相當傾斜,你能幫助我嗎? –

+0

有一些簡單的規則,每個自尊的C#開發人員都可以使用:當Java方法以小寫開頭時;使其成爲大寫。當Java方法以get或set開頭時;刪除get或set,並使用屬性方法。請閱讀其他答案,並運用我在其他答案中說的話。 (待續...) –

回答

1

這工作對我來說,將組成模式,因爲我一直無法改變短語類的定位,如果它與段落類:

  /*datos del LA LIQUIDACIÓN*/ 
      //1° linea 
      paragraph.Clear(); 
      paragraph.Font = new Font(FontFactory.GetFont("Arial", 10, Font.BOLD)); 
      paragraph.Alignment = Element.ALIGN_CENTER;//here is the change 
      paragraph.Add("H A B E R E S"); 
      PdfPCell cell2 = new PdfPCell(); 
      cell2.Border = Rectangle.NO_BORDER; 
      cell2.PaddingTop = -7; 
      cell2.AddElement(paragraph); 
      cell2.Colspan = 3; 
      table2.AddCell(cell2); 
      paragraph.Clear(); 

這一結果的工作:

enter image description here

0

由於記錄在許多地方,有間文本模式(其中設置在細胞水平對齊方式:cell2.HorizontalAlignment = PdfPCell.ALIGN_CENTER;)的差,並複合模式(在這種情況下,細胞的排列被忽略)。

您正在使用複合模式,因此行cell2.HorizontalAlignment = PdfPCell.ALIGN_CENTER;被忽略。您應該切換到文本模式,或者在短語的級別設置對齊。

之間文本模式複合模式的差異存在 無論你使用什麼編程語言。答案依然存在。

你有Phrase對象:

Font font = FontFactory.GetFont("Arial", 10, Font.BOLD); 
Phrase phrase = new Phrase("H A B E R E S", font); 

請注意,我改變了你的代碼,因爲你正在創建一個Font和一個非常尷尬的方式Phrase

您創建一個Cell向其中添加了Phrase

PdfPCell cell2 = new PdfPCell(); 
    cell2.AddElement(phrase); 
    table2.addCell(cell2); 

當你正在使用的AddElement()方法,你在複合模式工作。這也很尷尬,因爲你沒有理由需要複合模式。

如記錄,以下行被忽略:

cell2.HorizontalAlignment = PdfPCell.ALIGN_CENTER; 

該行只能在文本模式。

爲了解決這個問題,你有兩個選擇:

選項#1:進入文本模式

Font font = FontFactory.GetFont("Arial", 10, Font.BOLD); 
Phrase phrase = new Phrase("H A B E R E S", font); 
PdfPCell cell2 = new PdfPCell(phrase); 
cell2.HorizontalAlignment = PdfPCell.ALIGN_CENTER; 
table2.addCell(cell2); 

選項#2:設置在單元級的定位,不是細胞水平

Font font = FontFactory.GetFont("Arial", 10, Font.BOLD); 
Paragraph p = new Paragraph("H A B E R E S", font); 
p.Alignment = Element.ALIGN_CENTER; 
PdfPCell cell2 = new PdfPCell(); 
cell2.AddElement(p); 
table2.addCell(cell2); 

請注意,我用了一個選項2中爲210.使用Phrase,複合模式沒有意義。

SUMMARISED:它真的很重要你在哪個級別設置對齊方式。

  • 文本模式,您可以設置在單元的水平排列,在其內容的水平。
  • 複合模式,您在內容級別設置對齊,不是在單元級別。

就這麼簡單。

相關問題