C# itext7的文本缩放问题,隐藏边距?

C# itext7的文本缩放问题,隐藏边距?,c#,pdf,asp.net-core,itext7,C#,Pdf,Asp.net Core,Itext7,我试图从asp.netcore razor项目中获得这个c#函数,使用itext7(7.1.7)输出一个div,其中包含文本,该文本可以在给定的高度和宽度限制范围内缩放。但是,出于某种原因,似乎存在某种隐藏边距,即使边距设置为0,也无法将文本缩放到给定宽度和高度的边界。 目前,我收到的最大文本量只是应该的一半。 此外,段落或div实际上设置为最小宽度和最小高度 任何关于如何解决此问题的帮助都将不胜感激 public Div MakeScaledTxtDiv(string _displayTxt

我试图从asp.netcore razor项目中获得这个c#函数,使用itext7(7.1.7)输出一个div,其中包含文本,该文本可以在给定的高度和宽度限制范围内缩放。但是,出于某种原因,似乎存在某种隐藏边距,即使边距设置为0,也无法将文本缩放到给定宽度和高度的边界。 目前,我收到的最大文本量只是应该的一半。 此外,段落或div实际上设置为最小宽度和最小高度

任何关于如何解决此问题的帮助都将不胜感激

public Div MakeScaledTxtDiv(string _displayTxt ,PdfFont _Pdffont, float _maxHeight, 
                                            float _maxWidth, Canvas _canvas, bool _showBorder)
    {
        Div nameDiv = new Div();

        iText.Kernel.Geom.Rectangle posRect = new iText.Kernel.Geom.Rectangle(_maxWidth,_maxHeight);

        Paragraph txtPara = new Paragraph()
            .SetVerticalAlignment(VerticalAlignment.MIDDLE)
            .SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER);

        if (_showBorder)
            txtPara.SetBorder(new DashedBorder(1));

        if (_maxHeight > 0)
            txtPara.SetMaxHeight(_maxHeight);

        if (_maxWidth > 0)
            txtPara.SetMaxWidth(_maxWidth);

        txtPara
            .SetMargin(0f)
            .SetPadding(0f)
            .SetFont(_Pdffont)
            .Add(_displayTxt);

        float fontSizeToSet = 1;
        float fontSizeMax = 42;
        float curFontSize = fontSizeMax;

        bool m_bGoodfit = false;
        while (!m_bGoodfit)
        {
            txtPara.SetFontSize(curFontSize);

            ParagraphRenderer renderer = (ParagraphRenderer)txtPara.CreateRendererSubTree().SetParent(_canvas.GetRenderer());

            LayoutContext context = new LayoutContext(new LayoutArea(1, posRect));
            var fits = renderer.Layout(context).GetStatus();
            if (fits == LayoutResult.FULL)
            {
                fontSizeToSet = curFontSize;
                m_bGoodfit = true;
            }
            else
            {
                curFontSize -= 1;
                if (curFontSize == 1)
                {
                    fontSizeToSet = curFontSize;
                    m_bGoodfit = true;
                }
            }
        }

        txtPara.SetFontSize(fontSizeToSet);

        if (_maxHeight > 0)
        {
            nameDiv.SetMinHeight(_maxHeight)
                    .SetMaxHeight(_maxHeight)
                    .SetHeight(_maxHeight);
        }

        if (_maxWidth > 0)
        {
            nameDiv.SetMinWidth(_maxWidth)
                    .SetMaxWidth(_maxWidth)
                    .SetWidth(_maxWidth);
        }

        nameDiv
            .SetMargin(0f)
            .SetPadding(0f)
            .SetVerticalAlignment(VerticalAlignment.MIDDLE)
            .SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER);

        if (_showBorder)
            nameDiv.SetBorder(new DottedBorder(1));

        nameDiv.Add(txtPara).SetVerticalAlignment(VerticalAlignment.MIDDLE);

        return nameDiv;
    }

对我有效的方法是将下面代码中的乘数
0.7f
稍微大一点(代码引用自)

似乎随着乘数变大/变小,文本和字段底部边框之间的空间相应地增大/缩小。也许从
1.2f
开始,找到一个合适的

Paragraph linePara = new Paragraph().Add(lineTxt)
    .SetTextAlignment(iText.Layout.Properties.TextAlignment.CENTER).SetBorder(new DottedBorder(1))
    .SetMultipliedLeading(0.7f);
lineDiv.Add(linePara);

仅供参考,我遇到了您正面临的问题:

我试着把答案贴在那里,在这里遇到了同样的隐藏的底部保证金问题