iTextSharp: как масштабировать шрифт, чтобы сделать многострочным заполнение прямоугольника
Используя iTextSharp, я должен заполнить данный прямоугольник текстом, как по высоте, так и по ширине. Текст можно обернуть, я должен найти правильный размер шрифта для заполнения прямоугольника.
перенос текста не является проблемой. У меня есть рекурсивная функция, которая возвращает массив всех возможных настроек переноса.
Это не проблема с gdi+, но при использовании iTextSharp у меня возникают проблемы с определением высоты моего текста после переноса (т. Е. Содержит "\n")
Любая помощь?
Я нашел эту статью очень полезной, она решает мою проблему с другой точки зрения:
Центрированный многострочный текст с использованием 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();
Кроме того, у меня есть throuble даже с columnText4.SetSimpleColumn, которые отображаются в другой прямоугольник, чем мой rect3...
РЕДАКТИРОВАТЬ 2: использование этого, кажется, исправить, но я действительно не понимаю, почему я должен принудительно привести leadong как fontsize: columnText4.SetSimpleColumn (rect3.Left, rect3.Bottom, rect3.Right, rect3.Top, fontSize2, Element.ALIGN_LEFT);
2 ответа
Используйте ColumnText.FitText(шрифт шрифта, текст String, прямоугольник, float maxFontSize, int runDirection). Возвращает размер шрифта.
Скачал соусы, не все в порядке, НО я понимаю:
абзац использовать 1.5 * размер шрифта в качестве ведущего.
setText игнорировать ведение и использовать значение по умолчанию (16f = 12f x 1,5)
поэтому, если я хочу использовать setText, я должен обеспечить ведущий. НО функция FitText вычисляет размер шрифта с 1 * начальным размером шрифта, поэтому неправильно использовать его с начальным значением по умолчанию 1,5, а другая функция использует значение по умолчанию 16f...
Мне удалось расширить FitText с помощью дополнительного параметра: множителя (1, 1,5 и т. Д.). Это спасает мой день.