2014-09-12 96 views
1

如何在itextsahrp中旋转多行文本?使用Columntext旋转多行文本ITextSharp

我曾尝试:

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显示multilie文字,但我怎么转动的?

ColumnText.ShowTextAligned不显示多行。

+2

我已经在回答你以前的问题时解释了这个问题:不是将'ColumnText'添加到'stamper.GetOverContent(i)'中,而是使用'PdfTemplate'对象创建一个Form XObject。将'ColumnText'添加到'PdfTemplate'中,并使用接受参数来旋转模板的'AddTemplate()'方法将该模板添加到'stamper.GetOverContent(i)'中。 – 2014-09-12 12:45:02

回答

2

我的机器上没有C#环境,所以我用Java编写了一个示例,名为AddRotatedTemplate。我使用了“Hello World”这个词来创建一个PDF文件,我创建了一个带有一些文本的模板/ XObject,并且使用addTemplate()方法将模板/ XObject添加了两次(一次只使用x,y坐标和一次使用旋转PI/4等级文本的参数)。结果,添加到模板的文本被添加两次;见hello_template.pdf)。

这是代码:

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()方法的其他变化的旋转更简单的方法,但我是一个工程师,我习惯了使用转换矩阵我从来不觉得需要或渴望使用任何其他类型的方法。

+0

谢谢!它有很多帮助。但在第二个addTemplate方法中,三角函数的顺序是错误的。正确的顺序是cos()-sin()sin()cos()。你的例子对于PI/4的角度工作正常,但对于任何其他角度,矩形变形而不是旋转。 – seeb 2015-11-06 09:58:20

+0

好吧,如果有更简单的方法,为什么不显示它们... – CularBytes 2016-04-22 19:26:58