Поворот многострочного текста с помощью Columntext 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 ответ

У меня нет среды С# на моих машинах, поэтому я написал пример на 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);
 ****** 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(), но я инженер, и я настолько привык использовать матрицу преобразования, что я никогда не чувствую необходимости или желания использовать какой-либо другой тип метода,

licensed under cc by-sa 3.0 with attribution.