Повернуть текст / Вертикальный текст в itextsharp - PullRequest
9 голосов
/ 08 декабря 2010

Мне нужен вертикальный текст или просто способ поворота 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, но качество ОЧЕНЬ плохое.

Есть решение? Благодаря.

Ответы [ 3 ]

11 голосов
/ 28 июля 2014

Я пробовал много методов из Интернета для этой проблемы поворота.Но никто из них не работал.Наконец-то я разобрался с простым решением.Может быть, мы можем сделать это такМы можем нарисовать таблицу без границ и только с одной ячейкой.И мы добавляем текст в ячейку, наконец, вращаем ячейку.Тогда все в порядке.

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

5 голосов
/ 27 июля 2012

На самом деле самый простой способ похож на вашу первую попытку. Вам просто нужно было добавить вызов к BeginText () и EndText () , как это

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

Вот документация для ShowTextAligned

4 голосов
/ 09 декабря 2010

Нашел ответ:

Используйте что-то вроде этого:

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)

Поверните холст, напишите текст, поверните его обратно.

...