C# 使用Columntext ITextSharp旋转多行文字

C# 使用Columntext ITextSharp旋转多行文字,c#,itextsharp,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, iTextShar

如何在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
不显示多行。

我的机器上没有C#环境,所以我用Java编写了一个名为的示例。我已经获取了一个包含单词“Hello World”的现有PDF文件,我已经创建了一个包含一些文本的模板/XObject,并且我已经使用
addTemplate()
方法添加了两次该模板/XObject(一次仅使用x,y坐标,一次使用以PI/4等级旋转文本的参数)。因此,添加到模板中的文本会添加两次;见)

代码如下:

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();
}

addTemplate()
方法的其他变体中,可能有更简单的方法来定义旋转,但是我是一名工程师,我非常习惯于使用转换矩阵,我从来没有感觉到需要或希望使用任何其他类型的方法。

我在回答您之前的问题时已经解释过这一点:与其将
列文本添加到
母版。GetOverContent(I)
,不如创建一个表单XObject(使用
PdfTemplate
对象)。将
ColumnText
添加到此
PdfTemplate
并使用
AddTemplate()将该模板添加到
stamper.GetOverContent(i)
方法,该方法接受参数以旋转模板。谢谢!这很有帮助。但在第二个addTemplate方法中,三角函数的顺序是错误的。正确的顺序是cos()-sin()sin()cos()。您的示例适用于PI/4的角度,但对于任何其他角度,矩形都会变形而不是旋转。