# # 表单数据处理

表单数据处理是 SDK 的一个关键部分，包括从 PDF 表单中导出数据、向表单填写数据以及将数据导出到其他格式等功能。本章节将介绍如何使用这些功能。

## # 数据导出

Foxit PDF SDK for Web 支持从 PDF 表单中导出数据到指定的文件格式。支持的格式包括：

- `xfdf` (XML Forms Data Format)
- `fdf` (Forms Data Format)
- `csv` (Comma-Separated Values)
- `json` (JavaScript Object Notation)
- `text` (Plain Text)
- `xml` (eXtensible Markup Language)

以下是如何使用 `exportToFile`
(opens new window) 方法的示例：

    const doc = pdfViewer.getCurrentPDFDoc();
    const form = doc.getPDFForm();
    const blob = await form.exportToFile(PDFViewCtrl.commons.FileFormat.json, {});

在这个示例中，`PDFViewCtrl.commons.FileFormat` 是一个常量枚举，用于指定要导出的文件格式，第二个参数我们没有设定任何属性，这意味着将导出所有的表单数据。

如果您想要导出指定的表单字段，可以设置 `fieldNames` 和 `isExcludeFields` 属性，如下所示：

    const doc = pdfViewer.getCurrentPDFDoc();
    const form = doc.getPDFForm();
    const blob = await form.exportToFile(PDFViewCtrl.commons.FileFormat.json, {
        fieldNames: ['Text Field0', 'Check Box0'],
        isExcludeFields: true
    });

在这个示例中，我们设置了 `isExcludeFields` 为 `true`，从而排除了 `Text Field0` 和 `Check Box0` 这两个字段，其余的字段将被导出。如果您只想导出 `Text Field0` 和 `Check Box0`，则无需设置 `isExcludeFields` 或者将 `isExcludeFields` 设置为 `false`:

    const doc = pdfViewer.getCurrentPDFDoc();
    const form = doc.getPDFForm();
    const blob = await form.exportToFile(PDFViewCtrl.commons.FileFormat.json, {
        fieldNames: ['Text Field0', 'Check Box0']
    });

## # 数据导入

Foxit PDF SDK for Web 支持从指定的文件格式导入数据到 PDF 表单中。以下是如何使用 `importFromFile`
(opens new window) 方法的示例：

    const doc = pdfViewer.getCurrentPDFDoc();
    const form = doc.getPDFForm();

    const response = await fetch('formData.xfdf');
    const xfdfData = await response.blob();
    await form.importFromFile(xfdfData, PDFViewCtrl.commons.FileFormat.xfdf);

以上示例展示了如何从一个 XFDF 文件加载数据并将其导入到当前打开的 PDF 表单中。

如果导入的是 `csv` 或 `text` 格式的数据，则需要确认文件中使用的分隔符。您可以通过设置 `delimiter` 参数来指定，默认情况下，`csv` 文件使用的分隔符为 `,`，`text` 文件使用的分隔符为 `\n`。

    const doc = pdfViewer.getCurrentPDFDoc();
    const form = doc.getPDFForm();

    const response = await fetch('formData.csv');
    const csvData = await response.blob();
    await form.importFromFile(csvData, PDFViewCtrl.commons.FileFormat.csv, {
        delimiter: ','
    });

    const doc = pdfViewer.getCurrentPDFDoc();
    const form = doc.getPDFForm();

    const response = await fetch('formData.txt');
    const textData = await response.blob();
    await form.importFromFile(textData, PDFViewCtrl.commons.FileFormat.text, {
        delimiter: '\n'
    });

## # 重置表单

Foxit PDF SDK for Web 提供了 `PDFForm.resetForm`
(opens new window) 接口，用于将表单字段值重置为默认值。

`PDFForm.resetForm`
(opens new window) 方法定义：

    async resetForm(fieldNames: string[], isExclude: boolean = false): Promise<void>;

参数说明：

1. `fieldNames`: 需要被重置的表单字段名称， 如果为空， 则重置所有表单字段。
2. `isExclude`: 是否要排除在 `fieldNames` 列表中指定的字段。默认值为 `true`，表示 `fieldNames` 列表中的字段将不会被重置。如果设置为 `false`, 则 `fieldNames` 列表中的字段将会被重置。

如果您想要重置特定的表单字段，可以通过设置 `fieldNames` 参数为需要重置的字段名称，并且将 `isExclude` 参数设为 `false`。以下是一个使用示例：

    const doc = pdfViewer.getCurrentPDFDoc();
    const form = doc.getPDFForm();
    await form.resetForm(
        ['Text Field0', 'Combo Box0'],
        false
    )

如果您想要重置所有表单字段，可以将 `fieldNames` 指定为空数组 `[]`， 并且将 `isExclude` 指定为 `true`，示例如下：

    const doc = pdfViewer.getCurrentPDFDoc();
    const form = doc.getPDFForm();
    await form.resetForm(
        [],
        true
    )