2009-07-21 5 views
2

J'ai suivi les échantillons iText pour le texte vertical:iTextSharp et VerticalText

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

et a créé cette version C# de celui-ci:

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(); 

Il est centré sur la page, d'accord, mais n'est pas vertical - mais horizontal (aligné à gauche horizontalement depuis le centre de la page).

Est-ce que je fais quelque chose de mal ici ou est-ce que iTextSharp se comporte mal?

+0

PS: L'exemple a été déplacé (ou lancé et remplacé ailleurs): http://itextpdf.com/examples/iia.php?id=202 –

Répondre

0

Essayez

cb.ShowTextAligned (alignement, texte, x, y, rotation);

+1

showTextAligned ne dessine le texte que verticalement si vous utilisez un codage vertical. Vous avez entendu parler de "Identity_H"? Eh bien, il y a aussi un "Identity_V" qui va produire du texte vertical, mais vous devez le construire dans la police que vous utilisez. Je serais surpris si la partie "alignée" de cette fonction fonctionne correctement avec un encodage vertical. –

2

Les paramètres que vous transmettez à setVerticalLayout sont les plus probables.

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

Ainsi, votre startX et startY sont pointés au centre de la page, et votre hauteur disponible est la hauteur de la page (en laissant la moitié de la zone définie du bas de la page). Vous le limitez également à une seule ligne, avec zéro menant. En théorie, votre texte commencerait au centre de la page et continuerait vers le bas en bas de la page.

En pratique, vous obtenez tout à fait autre chose.

Il peut également y avoir un problème avec la construction d'une police à partir d'une police de base dans ce cas, sauf si cette police est codée Identity-V, BaseFont.IDENTITY_V. OTOH, si votre baseFont est déjà dans Identity-V, j'imagine que VerticalText s'attend à avoir à déplacer horizontalement le texte "codé" dans un alignement vertical et finit par faire exactement le contraire avec verticalement "encodé" texte.

Comment impair. J'aimerais entendre une mise à jour.

Questions connexes