2010-12-08 2 views
7

Мне нужен вертикальный текст или просто способ повернуть столбец в ITextSharp.Повернуть текст/Вертикальный текст в itextsharp

(Это должно быть абсолютное положение)

До сих пор я не пробовал много diffrent решения, но не повезло.

Вот несколько попыток:

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 Я бедный.

Любое решение? Благодарю.

ответ

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 может позиционировать эту ячейку.