iTextSharp和VerticalText

时间:2009-07-21 10:41:22

标签: itextsharp

我按照iText样本查看垂直文本:

http://1t3xt.info/examples/browse/?page=example&id=145

并创建了它的C#版本:

PdfReader reader = new PdfReader("existing.pdf");
PdfStamper stamp = new PdfStamper(reader, new FileStream("stamped.pdf", FileMode.Create));

// change the content on top of page 1
PdfContentByte cb = stamp.GetOverContent(1);

Rectangle psize = reader.GetPageSize(1);
float width = psize.Width;
float height = psize.Height;

BaseFont bf = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
VerticalText vt = new VerticalText(cb);
vt.SetVerticalLayout(width / 2, height / 2, height, 1, 0);
vt.AddText(new Phrase("Test", new Font(bf, 20)));
vt.Go();

stamp.Close();

它以页面为中心,好吧,但它不是垂直的 - 而是水平的(实际上是从页面中心水平左对齐)。

我在这里做错了还是iTextSharp行为不端?

2 个答案:

答案 0 :(得分:2)

您传递给setVerticalLayout的参数可能是罪魁祸首。

// from the java source
public void setVerticalLayout(float startX, 
                              float startY, 
                              float height, 
                              int maxLines,
                              float leading)

因此你的startX和startY指向页面的中心,你的可用高度是页面的高度(将一半定义的区域留在页面底部)。您也将它限制为单行,零前导。理论上,您的文本将从页面的中心开始,并从页面底部继续向下。

在实践中,你完全得到了一些东西。

在这种情况下,从基本字体构建字体可能也存在问题,除非该字体恰好具有Identity-V编码BaseFont.IDENTITY_V

OTOH,如果你的baseFont已经在Identity-V中,那么我猜想VerticalText期望必须将“编码”文本水平分割成垂直对齐,最后与垂直“编码”文本相反

有多奇怪。我很想听到更新。

答案 1 :(得分:0)

尝试

cb.ShowTextAligned(alignment,text,x,y,rotation);