2010-12-08 69 views
7

我需要垂直文本或只是一種方法來旋轉ITextSharp中的ColumnText。在itextsharp中旋轉文本/垂直文本

(它需要絕對位置)

到現在爲止我已經嘗試了很多不同勢的解決方案,但沒有運氣。

這裏是一個嘗試幾次:

1.

_cb.SetFontAndSize(BaseFont.CreateFont(), 12f); 
_cb.ShowTextAligned(Element.ALIGN_CENTER, "Hello World", 50, 50, 90); 

2.

var vt = new VerticalText(_cb); 
vt.SetVerticalLayout(50, 50, 400, 8, 30);    
vt.AddText(new Chunk("asdasd",_sf.ChildBackPageTextOneFont())); 
vt.Go(); 

3.

System.Drawing.Drawing2D.Matrix foo = new System.Drawing.Drawing2D.Matrix(); 
foo.Rotate(90); 
_cb.ConcatCTM(foo); 

我也試圖與繪製它System.Drawing.Graphics,但質量是VER poor窮人。

任何解決方案?謝謝。

回答

4

找到了答案:

使用這樣的事情:

Imports System.Drawing, System.Drawing.Drawing2D 
Dim transf as new Matrix 
transf.RotateAt(30,New PointF(100,100), MatrixOrder.Append) 
writer.DirectContent.Transform(transf) 

transf.Invert() 
writer.DirectContent.Transform(transf) 

旋轉畫布,寫一些文字,旋轉回來。

+1

「......並將其旋轉」。你也可以調用`directContent.saveState()`,變換並繪製文本,然後調用`directContent.restoreState()`。計算機工作量減少,內容中的字節數減少,並且不受浮點數學錯誤的影響,這些錯誤在來回和來回變換時可能會變大。 – 2010-12-09 22:28:04

+0

你會如何做到這一點? – shinji14 2011-06-24 17:49:54

4

其實最簡單的方法與您的第一次嘗試類似。你只需要添加一個調用BeginText()ENDTEXT()這樣

_cb.SetFontAndSize(BaseFont.CreateFont(), 12f); 
_cb.BeginText(); 
_cb.ShowTextAligned(Element.ALIGN_CENTER, "Hello World", 50, 50, 90); 
_cb.EndText(); 
_cb.Stroke(); 

下面是ShowTextAligned

10

的文件我已經嘗試了很多方法從網絡這個旋轉問題。但他們都沒有工作。最後我想出了一個簡單的解決方案。也許我們可以這樣做。我們可以繪製一張沒有邊框的表格,並且只繪製一個單元格。我們在單元格中添加文本,最後旋轉單元格。 然後一切都好。

 table = new PdfPTable(1); 
     table.TotalWidth = 72; 
     paragraph = new Paragraph("123"); 
     cell = new PdfPCell(paragraph); 
     cell.Rotation = 270; 
     cell.BorderWidth = 0; 
     table.AddCell(cell); 
     table.WriteSelectedRows(0, -1, 72, 72, writer.DirectContent); 

此外,WriteSelectedRows方法可以定位此單元格。