2009-07-21 92 views
2

我也跟着垂直文本的iText的樣品:iTextSharp的和VerticalText

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

PS:示例已移動(或在其他位置替換):http://itextpdf.com/examples/iia.php?id=202 – 2010-12-21 17:50:04

回答

0

嘗試

cb.ShowTextAligned(對齊,文本,X,Y,旋轉);

+1

showTextAligned僅在垂直編碼時纔會垂直繪製文本。你聽說過「Identity_H」?那麼還有一個「Identity_V」可以產生垂直文本,但是你必須將它構建成你正在使用的字體。如果此功能的「對齊」部分可以使用垂直編碼正常工作,我會感到驚訝。 – 2010-12-21 17:37:01

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期望不得不將水平「編碼」文本水平翻轉到垂直對齊,並最終做與垂直「編碼」文本。

有多奇怪。我很樂意聽到更新。