2010-12-08 9 views
7

J'ai besoin de texte vertical ou juste un moyen de faire pivoter un objet ColumnText dans ITextSharp.Faire pivoter du texte/texte vertical dans itextsharp

(Il doit être position absolue)

Jusqu'à présent, je l'ai essayé beaucoup de solution diffrent, mais pas de chance.

Voici quelques essais:

1.

_cb.SetFontAndSize(BaseFont.CreateFont(), 12f); 
_cb.ShowTextAligned(Element.ALIGN_CENTER, "Hello World", 50, 50, 90); 

2.

var vt = new VerticalText(_cb); 
vt.SetVerticalLayout(50, 50, 400, 8, 30);    
vt.AddText(new Chunk("asdasd",_sf.ChildBackPageTextOneFont())); 
vt.Go(); 

3.

System.Drawing.Drawing2D.Matrix foo = new System.Drawing.Drawing2D.Matrix(); 
foo.Rotate(90); 
_cb.ConcatCTM(foo); 

J'ai aussi essayé de le dessiner avec System.Drawing.Graphics, mais la qualité est VER Y pauvre.

Une solution? Merci.

Répondre

4

a trouvé la réponse:

Utilisez quelque chose comme ceci:

Imports System.Drawing, System.Drawing.Drawing2D 
Dim transf as new Matrix 
transf.RotateAt(30,New PointF(100,100), MatrixOrder.Append) 
writer.DirectContent.Transform(transf) 

transf.Invert() 
writer.DirectContent.Transform(transf) 

Tourner la toile, écrire un texte, faites-le pivoter en arrière.

+1

"... et le faire pivoter". Vous pouvez également appeler 'directContent.saveState()', transformer et dessiner votre texte, puis appeler 'directContent.restoreState()'. Moins de travail pour l'ordinateur, moins d'octets dans votre contenu et non soumis à des erreurs de calcul à virgule flottante qui pourraient s'agrandir à mesure que vous transformez les choses d'avant en arrière et d'avant en arrière. –

+0

Comment allez-vous faire cela? – shinji14

+0

@Mark veuillez clarifier –

4

En fait, le moyen le plus simple est similaire à votre premier essai. Vous avez juste besoin d'ajouter un appel à beginText() et endText() comme celui-ci

_cb.SetFontAndSize(BaseFont.CreateFont(), 12f); 
_cb.BeginText(); 
_cb.ShowTextAligned(Element.ALIGN_CENTER, "Hello World", 50, 50, 90); 
_cb.EndText(); 
_cb.Stroke(); 

Voici la documentation ShowTextAligned

10

J'ai essayé beaucoup de méthodes à partir du Web pour cette rotate problème. Mais aucun d'eux n'a travaillé. Finalement, j'ai trouvé une solution simple. Peut-être que nous pouvons le faire comme ça. Nous pouvons dessiner une table sans frontières, et juste avec une cellule. Et nous ajoutons du texte dans la cellule, enfin tourner la cellule. Tout va bien alors.

 table = new PdfPTable(1); 
     table.TotalWidth = 72; 
     paragraph = new Paragraph("123"); 
     cell = new PdfPCell(paragraph); 
     cell.Rotation = 270; 
     cell.BorderWidth = 0; 
     table.AddCell(cell); 
     table.WriteSelectedRows(0, -1, 72, 72, writer.DirectContent); 

En outre, la méthode WriteSelectedRows peut positionner cette cellule.

+0

C'est une très bonne réponse et il est même possible d'utiliser l'alignement pour la cellule comme "cell.HorizontalAlignment = PdfContentByte.ALIGN_CENTER". La police peut également être définie pour le paragraphe comme ceci "new Paragraph (" 123 ", )". –