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