iTextSharp:如何缩放字体以使多行填充矩形

iTextSharp:如何缩放字体以使多行填充矩形,text,itextsharp,word-wrap,Text,Itextsharp,Word Wrap,使用iTextSharp,我必须用文本填充给定的矩形,包括高度和宽度。文本可以换行,我必须找到正确的字体大小来填充矩形 包装文本不是问题,我有一个递归函数,返回所有可能的包装配置数组 gdi+没有问题,但是使用iTextSharp时,我无法在文本包装后找到文本的高度(即包含“\n”) 有什么帮助吗 我发现这篇文章非常有用,它从另一个角度补充了我的问题: 添加:示例代码: string text = "Lorem Ipsum è un testo segnaposto utili

使用iTextSharp,我必须用文本填充给定的矩形,包括高度和宽度。文本可以换行,我必须找到正确的字体大小来填充矩形

包装文本不是问题,我有一个递归函数,返回所有可能的包装配置数组

gdi+没有问题,但是使用iTextSharp时,我无法在文本包装后找到文本的高度(即包含“\n”)

有什么帮助吗

我发现这篇文章非常有用,它从另一个角度补充了我的问题:

添加:示例代码:

        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实现了throuble,它渲染为与我的rect3不同的矩形

EDIT2:使用这个似乎可以解决问题,但我真的不明白为什么我必须强制leadong使用fontsize:
columnText4.SetSimpleColumn(rect3.Left,rect3.Bottom,rect3.Right,rect3.Top,fontSize2,Element.ALIGN_Left)

使用ColumnText.FitText(字体、字符串文本、矩形矩形、浮点maxFontSize、int运行方向)。它返回字体大小。

下载了源文件,并非所有文件都是正确的,但我不理解这一点:

段落使用1.5*fontsize作为前导

setText忽略前导并使用默认值(16f=12f x 1.5)

因此,如果我想使用setText,我必须提供引导。但是函数FitText使用1*fontsize前导计算fontsize,因此使用默认的1.5前导是不正确的,而另一个函数使用默认的16f


我设法用一个额外的参数扩展FitText:乘数(1、1.5等)。这节省了我的时间。

我忘了提到我使用了库的版本4,这个函数似乎不存在。这就是使用多年版本的问题。看看新版本中的代码,它只有大约20行,并根据您的需要进行调整。这个函数似乎可以工作,至少它可以进行一些字体计算,但是,我想,我正忙于引导。。。我将用一些代码更新主要问题还有一个小问题:函数在一个词中间打断我的字符串,而不是在空格上…这是正常的吗?有没有合适的分词方法?