C# iTextSharp填充现有pdf,但多行文本字段赢了';t包装

C# iTextSharp填充现有pdf,但多行文本字段赢了';t包装,c#,pdf,itext7,C#,Pdf,Itext7,我在Adobe Acrobat Pro 2017中创建/编辑了一份PDF。目标是在我们的网站上动态填写。除了一部分以外,它在所有方面都是成功的;其中一个表单字段无法按预期包装文本 var TheForm=PdfAcroForm.GetAcroForm(文档,true); var Fields=TheForm.GetFormFields(); //*只是尝试一些东西,没有成功 //字段[“MyField”].SetFieldFlag(PdfTextFormField.FF_MULTILINE).S

我在Adobe Acrobat Pro 2017中创建/编辑了一份PDF。目标是在我们的网站上动态填写。除了一部分以外,它在所有方面都是成功的;其中一个表单字段无法按预期包装文本

var TheForm=PdfAcroForm.GetAcroForm(文档,true);
var Fields=TheForm.GetFormFields();
//*只是尝试一些东西,没有成功
//字段[“MyField”].SetFieldFlag(PdfTextFormField.FF_MULTILINE).SetFontSizeAutoScale();
//#这将正确设置值,但不会换行
字段[“MyField”].SetValue(“整个现场办公室-薪材”);
//#证明该字段是多行的,这在调试中是正确的
var helpme=Fields[“MyField”].IsMultiline();
//#证明字段设置正确,只是显示屏不会自动换行
var grrrrr=Fields[“MyField”].GetValue();
//#将PDF设置为只读并删除表单字段
form.flattfields();
这是我用Acrobat Reader 2017手动输入的PDF表单输出

这是代码的输出

这是一个希望匿名的文件版本 (这不是什么大秘密,只是保持安静)

另外,这可能是一个相关的问题,我现在正在探讨这个问题

iText 7尚未确定整个文本适合表单字段的字体大小:

/// <summary>Adjust font in case autosize.</summary>
private float GetFontSize(PdfArray bBox, String value) {
    if (this.fontSize == 0) {
        //We do not support autosize with multiline.
        if (IsMultiline() || bBox == null || value == null || String.IsNullOrEmpty(value)) {
            return DEFAULT_FONT_SIZE;
        }
        else {
            return Math.Max(ApproximateFontSizeToFitBBox(this.font, bBox.ToRectangle(), value), MIN_FONT_SIZE);
        }
    }
    return this.fontSize;
}
///在自动调整大小的情况下调整字体。
私有浮点GetFontSize(PdfArray bBox,字符串值){
如果(this.fontSize==0){
//我们不支持使用多行自动调整大小。
如果(IsMultiline()| | bBox==null | | value==null | | String.IsNullOrEmpty(value)){
返回默认字体大小;
}
否则{
返回Math.Max(近似于ntsizetofitbbox(this.font,bBox.ToRectangle(),value),最小字体大小);
}
}
返回此.fontSize;
}
PdfFormField
helper方法)

(如您所见,
DEFAULT\u FONT\u SIZE
用作字体大小。此值定义为
12

特别是iText 7不支持您在表单字段上设置的不滚动表单字段标志

因此,“外地办事处范围-Fuelwood”分为两行。但是,由于字段小部件外观流包含沿字段小部件边框的剪辑路径,因此您只能看到第一行。此剪辑路径还允许您仅查看展平视图中的第一行,但您可以将光标导航到第二行并在其中选择文本


因此,要填充多行字段,请将其字体大小设置为一个可能会完成此工作的值,即允许所有可能的输入都适合小部件区域。或者,如果您对PDF表单没有控制权,请在填充之前删除多行标志,使iText自动调整为一行。

请共享相关PDF以允许复制问题。或者,如果是机密信息,请创建另一个仅包含与问题PDF中相同的问题字段的问题字段。@mkl谢谢。我添加了一个链接。我将在下周初对此进行调查。我讨厌答案这么短。这很好。我在Adobe中编辑了表单,并取消选中了这些字段的“多行”框。字体(我从未设置大小)在展平时正确调整。非常感谢你。