C# 使用Columntext ITextSharp旋转多行文字
如何在itextsahrp中旋转多行文字 我试过: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
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的角度,但对于任何其他角度,矩形都会变形而不是旋转。