使用Columntext ITextSharp旋转多行文本

时间:2014-09-12 12:28:44

标签: c# itextsharp

如何在itextsahrp中旋转多行文字?

我试过了:

float x = 200;
float y = 100;
PdfContentByte cb = stamper.GetOverContent(i);
ColumnText ct = new ColumnText(cb);
ct.SetSimpleColumn(new Phrase(new Chunk("Test \n new", FontFactory.GetFont(FontFactory.HELVETICA, 18, iTextSharp.text.Font.NORMAL))),
                   x, reader.GetCropBox(i).Height -( y+400),500+x, y, 10, Element.ALIGN_LEFT | Element.ALIGN_TOP);

ct.Go(); 

ColumnText.ShowTextAligned(
    cb, Element.ALIGN_CENTER,
    new Phrase(new Chunk("Test \n new", FontFactory.GetFont(FontFactory.HELVETICA, 18, iTextSharp.text.Font.NORMAL))), x, reader.GetCropBox(i).Height-y, 12);

ct.SetSimpleColumn显示了多列文字,但如何旋转呢?

ColumnText.ShowTextAligned未显示多行。

1 个答案:

答案 0 :(得分:2)

我的机器上没有C#环境,因此我在Java中编写了一个名为AddRotatedTemplate的示例。我已经使用了" Hello World"这样的现有PDF文件,我已经创建了一个带有一些文本的模板/ XObject,并且我已经使用{{添加了两次模板/ XObject 1}}方法(一次只使用x,y坐标,一次使用用PI / 4等级旋转文本的参数)。结果,添加到模板的文本被添加两次;见hello_template.pdf)。

这是代码:

addTemplate()

public void manipulatePdf(String src, String dest) throws IOException, DocumentException { PdfReader reader = new PdfReader(src); PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(dest)); // Get canvas for page 1 PdfContentByte cb = stamper.getOverContent(1); // Create template (aka XOBject) PdfTemplate xobject = cb.createTemplate(80, 120); // Add content using ColumnText ColumnText column = new ColumnText(xobject); column.setSimpleColumn(new Rectangle(80, 120)); column.addElement(new Paragraph("Some long text that needs to be distributed over several lines.")); column.go(); // Add the template to the canvas cb.addTemplate(xobject, 36, 600); double angle = Math.PI / 4; cb.addTemplate(xobject, (float)Math.cos(angle), -(float)Math.sin(angle), (float)Math.cos(angle), (float)Math.sin(angle), 150, 600); stamper.close(); reader.close(); } 方法的其他变体中,可能有更简单的方法来定义旋转,但我是工程师,我已经习惯使用我从未感觉到需要或渴望的变换矩阵使用任何其他类型的方法。