2016-09-23 46 views
2

我想在pdf中设置字段名称(不是现有的pdf),以便在需要时可以获取该字段的坐标。 我们可以在没有pdfstamper的情况下做到这一点吗?如何在pdf中设置字段名称-java

在此先感谢

回答

1

你说你要从头开始创建PDF(不是现有的PDF),并希望该PDF有一个字段。

从零开始创建PDF不涉及PdfStamper,因此对于“我们能否在PdfStamper中实现这个目标”这个问题的答案是“是的,您可以。”

如果你想利用iText 5,你应该看看下面的例子:

其中的一个例子是写在答案问题Add PdfPCell to Paragraph

在这个考试中PLE,我们创建了一个Paragraph其中一些Chunk对象字段:

enter image description here

你可以使用getFieldPositions()方法这些字段的坐标。即在FAQ解释说:How to find the absolute position and dimension of a field?

如果你正在考虑利用iText 7.0.1,的你会发现,这些类是很容易理解,因为同一类用于无论您是使用一种形式划伤或填写现有表格,请参阅iText 7 jump-start tutorialchapter 4

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); 
     } 
    } 
} 
+0

我已经通过您的'创建表单字段'的建议,因为我提到'GenericField.java'。我想添加一个没有指定任何矩形坐标的字段名的段落,这可能吗?这样我就可以使用getFieldPositions(fieldName)来获取坐标。 – Nid

+0

在为字段创建窗口小部件注记时,您总是需要指定坐标。这就是为什么我们使用'onGenericTag'或'PdfPCellEvent'。该段落总是添加在特定的坐标处。您需要使用这些坐标来添加该字段。 –

相关问题