Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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
如何在pdf-java中设置字段名_Java_Itext - Fatal编程技术网

如何在pdf-java中设置字段名

如何在pdf-java中设置字段名,java,itext,Java,Itext,我想在pdf(而不是现有pdf)中设置字段名,以便在需要时获得该字段的坐标。 我们能在没有pdfstamper的情况下实现这一点吗 提前感谢您说您想从头创建一个PDF(而不是现有的PDF),并且希望此PDF有一个字段 从头开始创建PDF不涉及PdfStamper,因此“我们能在没有PdfStamper的情况下实现这一点”的问题的答案是“是的,你能。” 如果您正在考虑使用iText 5,您应该看看以下示例: 其中一个例子就是为了回答这个问题而写的 在本例中,我们创建了一个段落,其中一些区块

我想在pdf(而不是现有pdf)中设置字段名,以便在需要时获得该字段的坐标。 我们能在没有pdfstamper的情况下实现这一点吗


提前感谢

您说您想从头创建一个PDF(而不是现有的PDF),并且希望此PDF有一个字段

从头开始创建PDF不涉及
PdfStamper
,因此“我们能在没有
PdfStamper
的情况下实现这一点”的问题的答案是“是的,你能。”

如果您正在考虑使用iText 5,您应该看看以下示例:

其中一个例子就是为了回答这个问题而写的

在本例中,我们创建了一个
段落
,其中一些
区块
对象是字段:

您可以使用
getFieldPositions()
方法获取这些字段的坐标。常见问题解答对此进行了解释:

如果您正在考虑使用iText 7.0.1,您会发现这些类更容易理解,因为无论您是从头创建表单还是填写现有表单,都会使用相同的类,请参阅


我已经看过了你关于“创建表单字段”的建议,因为我提到了“GenericField.java”。我想添加一个带有字段名的段落,但不指定任何矩形坐标,这可能吗?因此,我可以使用getFieldPositions(fieldName)获取坐标。在为字段创建小部件注释时,始终需要指定坐标。这就是为什么我们使用
onGenericTag
PdfPCellEvent
。段落始终添加在特定坐标处。您需要使用这些坐标来添加字段。
public class GenericFields extends GenericTest {
    public static final String DEST = "./target/test/resources/sandbox/events/generic_fields.pdf";

    public static void main(String[] args) throws Exception {
        File file = new File(DEST);
        file.getParentFile().mkdirs();
        new GenericFields().manipulatePdf(DEST);
    }

    @Override
    protected void manipulatePdf(String dest) throws Exception {
        PdfDocument pdfDoc = new PdfDocument(new PdfWriter(dest));
        Document doc = new Document(pdfDoc);
        Paragraph p = new Paragraph();
        p.add("The Effective Date is ");
        Text day = new Text("     ");
        day.setNextRenderer(new FieldTextRenderer(day, "day"));
        p.add(day);
        p.add(" day of ");
        Text month = new Text("     ");
        month.setNextRenderer(new FieldTextRenderer(month, "month"));
        p.add(month);
        p.add(", ");
        Text year = new Text("            ");
        year.setNextRenderer(new FieldTextRenderer(year, "year"));
        p.add(year);
        p.add(" that this will begin.");
        doc.add(p);
        doc.close();
    }


    protected class FieldTextRenderer extends TextRenderer {
        protected String fieldName;

        public FieldTextRenderer(Text textElement, String fieldName) {
            super(textElement);
            this.fieldName = fieldName;
        }

        @Override
        public void draw(DrawContext drawContext) {
            PdfTextFormField field = PdfTextFormField.createText(drawContext.getDocument(), getOccupiedAreaBBox(), fieldName);
            PdfAcroForm.getAcroForm(drawContext.getDocument(), true).addField(field);
        }
    }
}