从AcroForm提取数据

从PDF文档中提取表单字段

Aspose.PDF for Android via Java不仅允许您创建和填写表单字段,还使得从PDF文件中提取表单字段数据或表单字段信息变得容易。

假设我们事先不知道表单字段的名称。然后我们应该遍历PDF中的每一页,以提取关于PDF中所有AcroForms的信息以及表单字段的值。要访问表单,我们需要使用getForm方法。

public void extractFormFields () {
    // 打开文档
    try {
        document=new Document(inputStream);
    } catch (Exception e) {
        resultMessage.setText(e.getMessage());
        return;
    }
    // 从所有字段中获取值
    StringBuilder sb=new StringBuilder();
    for (com.aspose.pdf.Field formField : document.getForm().getFields()) {
        sb.append("字段名称: ");
        sb.append(formField.getPartialName());
        sb.append(" 值: ");
        sb.append(formField.getValue());
        sb.append('\n');
    }
    resultMessage.setText(sb);
}

如果您知道要提取值的表单字段的名称,那么可以使用 Documents.Form 集合中的索引器来快速检索此数据。

按标题检索表单字段值

表单字段的 Value 属性允许您获取特定字段的值。要获取值,请从 Document 对象的 form field collection 获取表单字段。此示例选择一个 TextBoxField 并使用 getValue 方法检索其值。


    public void extractFormDataByName () {
        // 打开文档
        try {
            document=new Document(inputStream);
        } catch (Exception e) {
            resultMessage.setText(e.getMessage());
            return;
        }

        com.aspose.pdf.TextBoxField textBoxField1
                =(com.aspose.pdf.TextBoxField) document.getForm().get("Last Name");

        resultMessage.setText("Last Name: " + textBoxField1.getValue());

    }

从 PDF 文件提取数据到 XML

Form 类允许您使用 ExportXml 方法将数据从 PDF 文件导出到 XML 文件。为了将数据导出到 XML,您需要创建一个 Form 类的对象,然后使用 FileStream 对象调用 ExportXml 方法。最后,您可以关闭 FileStream 对象并释放 Form 对象。以下代码片段向您展示如何将数据导出到 XML 文件。

public void extractFormFieldsToXML () {
        // 打开文档
        try {
            document=new Document(inputStream);
        } catch (Exception e) {
            resultMessage.setText(e.getMessage());
            return;
        }
        com.aspose.pdf.facades.Form form=new com.aspose.pdf.facades.Form();
        form.bindPdf(document);
        File file=new File(fileStorage, "output.xml");
        try {
            // 创建 xml 文件。
            FileOutputStream xmlOutputStream;
            xmlOutputStream=new FileOutputStream(file.toString());
            // 导出数据
            form.exportXml(xmlOutputStream);

            // 关闭文件流
            xmlOutputStream.close();
        } catch (IOException e) {
            resultMessage.setText(e.getMessage());
            return;
        }
        // 关闭文档
        form.dispose();
    }

导出数据到 PDF 文件的 FDF

要将 PDF 表单数据导出到 XFDF 文件,我们可以使用 Form 类中的 exportFdf 方法。

请注意,这是来自 com.aspose.pdf.facades 的一个类。尽管名称相似,但这个类的用途略有不同。

为了导出数据到 FDF,您需要创建一个 Form 类的对象,然后使用 OutputStream 对象调用 exportXfdf 方法。以下代码示例向您展示如何将数据导出到 XFDF 文件。

public void extractFormExportFDF () {
        // 打开文档
        try {
            document=new Document(inputStream);
        } catch (Exception e) {
            resultMessage.setText(e.getMessage());
            return;
        }

        File file=new File(fileStorage, "student.fdf");

        com.aspose.pdf.facades.Form form=new com.aspose.pdf.facades.Form(document);
        FileOutputStream fdfOutputStream;
        try {

            fdfOutputStream=new FileOutputStream(file.toString());

            // 导出数据
            form.exportFdf(fdfOutputStream);

            // 关闭文件流
            fdfOutputStream.close();

        } catch (IOException e) {
            resultMessage.setText(e.getMessage());
            return;
        }
        resultMessage.setText(R.string.success_message);
    }

将数据从 PDF 文件导出到 XFDF

要将 PDF 表单数据导出到 XFDF 文件,我们可以使用 Form 类中的 exportXfdf 方法。

为了将数据导出到 XFDF,您需要创建一个 Form 类的对象,然后使用 OutputStream 对象调用 exportXfdf 方法。以下代码片段向您展示了如何将数据导出到 XFDF 文件。

    public void extractFormExportXFDF () {
        // 打开文档
        try {
            document=new Document(inputStream);
        } catch (Exception e) {
            resultMessage.setText(e.getMessage());
            return;
        }

        File file=new File(fileStorage, "student.xfdf");

        com.aspose.pdf.facades.Form form=new com.aspose.pdf.facades.Form(document);
        FileOutputStream fdfOutputStream;
        try {

            fdfOutputStream=new FileOutputStream(file.toString());

            // 导出数据
            form.exportXfdf(fdfOutputStream);

            // 关闭文件流
            fdfOutputStream.close();

        } catch (IOException e) {
            resultMessage.setText(e.getMessage());
            return;
        }
        resultMessage.setText(R.string.success_message);
    }