Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Itext 7-梳字段-填写表格_Itext_Itext7 - Fatal编程技术网

Itext 7-梳字段-填写表格

Itext 7-梳字段-填写表格,itext,itext7,Itext,Itext7,[编辑]我来这里是想问是否有人能帮我 在Itext 7中,我无法理解在获得这些字段后如何设置“字段梳” PdfWriter writer = new PdfWriter(out); InputStream stream = ((ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext()).getResourceAsStream("/resources/pdf/test.pdf"); Pdf

[编辑]我来这里是想问是否有人能帮我

在Itext 7中,我无法理解在获得这些字段后如何设置“字段梳”

PdfWriter writer = new PdfWriter(out);
InputStream stream = ((ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext()).getResourceAsStream("/resources/pdf/test.pdf");
PdfDocument pdf = new PdfDocument(new PdfReader(stream), writer);
PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true);
Map<String, PdfFormField> fields = form.getFormFields();

PdfFormField field = fields.get("ENTREPRISE");

    if(field instanceof PdfTextFormField){
        ((PdfTextFormField) field).setMaxLen(30);
        ((PdfTextFormField) field).setComb(true);
        ((PdfTextFormField) field).setMultiline(false);
        ((PdfTextFormField) field).setPassword(false);
        ((PdfTextFormField) field).setFileSelect(false);
        field.setValue(vo.getNomEntreprise());
    }     

奇怪的是,对于生成的表单(使用展平字段),一切都是完美的,但是如果我将表单设置为true#展平字段,字段中的文本显示为简单字符串,没有梳…

首先,一个小提示:使用友好的
PdfTextFormField#setComb
API比使用低级标志设置API更好。低级标志并不总是有意义的,例如,组合字段标志应应用于文本字段,而不仅仅是任意字段

因此,您应该执行此检查并相应地设置标志:

PdfFormField field = form.getField("ENTREPRISE");
if (field instanceof PdfTextFormField) {
    ((PdfTextFormField) field).setComb(true);
}
除此之外,阅读
setComb
方法的文档很有意义,其中说明了以下内容:

因此,您应该注意,您不能对字段进行梳理,例如,如果它是密码字段或多行字段,并且在任何情况下,您必须设置字段的最大长度,以便PDF查看器知道如何显示字段。您可以使用
PdfTextFormField#setMaxLen
实现这一点。因此,完整的代码:

if (field instanceof PdfTextFormField) {
    ((PdfTextFormField) field).setComb(true);
    ((PdfTextFormField) field).setMaxLen(20);
}

另外,这些只是代码中明显缺少的东西,但可能还有更多,附加您有问题的特定PDF总是很有价值的。

Hello@Alexey Subach!谢谢你们的回答:)我编辑了我的文章,做了一些小改动,但并没有效果。。我添加了如何关闭表单。。。以及生成的pdf(没有展平字段)。。事实上,当你点击一个字段时,你可以看到它们是梳子,但除此之外没有…:(:(我编辑了我的帖子!现在,当我将needApparences设置为true时,它是完美的,所有字段都是comb。不需要设置comb,maxlen,…已经由Adobe完成(当我创建pdf时)。但是现在,当我将FlattedFields设置为true时,所有comb都丢失了..):((我找到了解决方案!我使用的是旧版本的itext…需要使用更新版本^^再次感谢!
 * Meaningful only if the MaxLen entry is present in the text field dictionary
 * and if the Multiline, Password, and FileSelect flags are clear.
 * If true, the field is automatically divided into as many equally spaced positions,
 * or combs, as the value of MaxLen, and the text is laid out into those combs.
if (field instanceof PdfTextFormField) {
    ((PdfTextFormField) field).setComb(true);
    ((PdfTextFormField) field).setMaxLen(20);
}