使用iTextSharp我必须用高度和宽度的文本填充给定的矩形。文本可以换行,我必须找到正确的fontsize来填充矩形。
包装文本不是问题我有一个递归函数返回所有可能的包装配置的数组。
这对gdi +来说不是问题,但是使用iTextSharp我在找到文本高度时遇到问题(即包含“\ n”)
任何帮助?
我发现这篇文章非常有用,它从另一个角度来看我的问题:
Centered, multiline text using iTextSharp ColumnText
增加:示例代码:
string text = "Lorem Ipsum è un testo segnaposto utilizzato nel settore della tipografia e della stampa. Lorem Ipsum è considerato il testo segnaposto standard sin dal sedicesimo secolo, quando un anonimo tipografo prese una cassetta di caratteri e li assemblò per preparare un testo campione. È sopravvissuto non solo a più di cinque secoli, ma anche al passaggio alla videoimpaginazione, pervenendoci sostanzialmente inalterato. Fu reso popolare, negli anni ’60, con la diffusione dei fogli di caratteri trasferibili “Letraset”, che contenevano passaggi del Lorem Ipsum, e più recentemente da software di impaginazione come Aldus PageMaker, che includeva versioni del Lorem Ipsum.";
Rectangle rect3 = new Rectangle(1000f, 0f, 2000f, 1000f);
// Determine correct font size
Font font3 = new Font(FontFactory.GetFont(FontFactory.HELVETICA, 1000, Font.NORMAL, Color.BLACK));
float fontSize2 = FitText(font3, text, rect3, 1000, PdfWriter.RUN_DIRECTION_DEFAULT);
PdfContentByte contentByte = writer.DirectContent;
Chunk chunk = new Chunk(text, new Font(FontFactory.GetFont(FontFactory.HELVETICA, fontSize2, Font.NORMAL, Color.BLACK)));
Phrase text33 = new Phrase(chunk);
ColumnText columnText4 = new ColumnText(cb);
columnText4.SetSimpleColumn(rect3.GetLeft(0), 0,rect3.GetRight(0), rect3.GetTop(0));
columnText4.SetText(text33);
cb.SaveState();
cb.SetColorStroke(Color.RED);
cb.Rectangle(rect3.GetLeft(0), rect3.GetBottom(0), rect3.GetRight(0), rect3.GetTop(0));
cb.Stroke();
cb.RestoreState();
columnText4.Alignment = Element.ALIGN_LEFT;
columnText4.Go();
doc.Close();
此外,即使使用columnText4.SetSimpleColumn,我也遇到麻烦,它会渲染到不同的矩形而不是我的rect3 ...
EDIT2:使用它似乎可以修复,但我真的不明白为什么我必须强制使用leadong作为fontsize: columnText4.SetSimpleColumn(rect3.Left,rect3.Bottom,rect3.Right,rect3.Top, fontSize2 ,Element.ALIGN_LEFT);
答案 0 :(得分:2)
使用ColumnText.FitText(Font font,String text,Rectangle rect,float maxFontSize,int runDirection)。它返回字体大小。
答案 1 :(得分:0)
下载了这些东西,并非一切都是合理的,但我没有理解这一点:
段使用1.5 * fontsize作为前导。
setText忽略前导并使用默认值(16f = 12f x 1.5)
所以,如果我想使用setText,我必须提供领先优势。但FitText函数使用1 * fontsize前导计算字体大小,因此使用默认值为1.5的前导是不正确的,另一个函数使用默认的16f ...
我使用额外的参数扩展了FitText:乘数(1,1.5等)。这节省了我的一天。