我按照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行为不端?
答案 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);