2014-09-12 6 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) ', создайте объект формы XObject (используя объект' PdfTemplate'). Добавьте 'ColumnText' в этот' PdfTemplate' и добавьте этот шаблон в 'stamper.GetOverContent (i)' с помощью метода 'AddTemplate()', который принимает параметры для поворота шаблона. –

ответ

2

У меня нет среды C# на моих машинах, поэтому я написал пример на Java, названный AddRotatedTemplate. Я взял существующий файл PDF со словами «Hello World», я создал шаблон/XObject с некоторым текстом, и я добавил этот шаблон/XObject дважды, используя метод addTemplate() (один раз используя только координаты 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

+0

хорошо, если есть более простые способы, почему бы не показать их ... – CularBytes