C# 在itextsharp中旋转文本/垂直文本

C# 在itextsharp中旋转文本/垂直文本,c#,itextsharp,C#,Itextsharp,我需要垂直文本,或者只是一种在ITextSharp中旋转列文本的方法 (需要是绝对位置) 到目前为止,我已经尝试了很多不同的解决方案,但都没有成功 以下是几次尝试: 一, 二, 三, 我也尝试过用System.Drawing.Graphics绘制,但质量很差 有解决办法吗?谢谢。找到了答案: 使用类似以下内容: Imports System.Drawing, System.Drawing.Drawing2D Dim transf as new Matrix transf.RotateAt(30,

我需要垂直文本,或者只是一种在ITextSharp中旋转列文本的方法

(需要是绝对位置)

到目前为止,我已经尝试了很多不同的解决方案,但都没有成功

以下是几次尝试:

一,

二,

三,

我也尝试过用System.Drawing.Graphics绘制,但质量很差

有解决办法吗?谢谢。

找到了答案:

使用类似以下内容:

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)

旋转画布,写一些文字,然后再旋转回来。

实际上最简单的方法与第一次尝试类似。您只需要像这样添加对BeginText()EndText()的调用

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

这是

的文档,我在网上为这个问题尝试了很多方法。但没有一个成功。最后我想出了一个简单的解决办法。也许我们可以这样做。我们可以画一张没有边框,只有一个单元格的表格。我们在单元格中添加文本,最后旋转单元格。 那么一切都好了

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

“…并将其向后旋转”。您还可以调用
directContent.saveState()
,转换并绘制文本,然后调用
directContent.restoreState()
。计算机工作量更少,内容中的字节更少,并且不受浮点数学错误的影响,这些错误可能会随着您来回转换内容而变得更大。writer.DirectContent.SaveState();writer.DirectContent.Transform(transf);画某物();writer.DirectContent.RestoreState();这是一个非常好的答案,甚至可以对单元格使用对齐方式,如“cell.HorizontalAlignment=PdfContentByte.ALIGN\u CENTER”。也可以为类似“新段落(“123”),的段落设置字体。我使用cell.Rotation=270使单元格文本垂直。非常感谢。
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)
_cb.SetFontAndSize(BaseFont.CreateFont(), 12f);
_cb.BeginText();
_cb.ShowTextAligned(Element.ALIGN_CENTER, "Hello World", 50, 50, 90);
_cb.EndText();
_cb.Stroke();
        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);