2010-12-08 34 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方法可以定位此单元格。