# # 导入和导出

## # 注释

Annotation 数据导入导出支持三种文件格式: XFDF, FDF 和 JSON。下面的表格列出了当前不支持导入/导出的注释。

文件类型 | 是否所有的注释都支持 | 不支持的注释
--- | --- | ---
XFDF/FDF | 大部分 | Screen Image, Link, Sound
JSON | 大部分 | Screen Image, Link, Sound

### # API

下面表格列出了 Foxit PDF SDK for Web 提供的用于导入/导出注释数据文件的 APIs。

方法 | XFDF/FDF | JSON | JSON
--- | --- | --- | ---
Import | PDFDoc.importAnnotsFromFDF() | PDFDoc.importAnnotsFromJSON(annotsJson) | PDFPage.AddAnnot(annotJson)
Export | PDFDoc.exportAnnotsToFDF() | PDFDoc.exportAnnotsToJSON() | Annot.exportToJson()

建议使用相对应的方法导入和导出数据。例如，如果调用 `PDFDoc.exportAnnotsToJSON()` 导出数据，则最好使用 `PDFDoc.importAnnotsFromJSON(annotsJson)` 导入数据。

备注： 使用以下方法将导出的 JSON 数据通过 `PDFPage.addAnnot` 方法添加到文档中会导致某些注释（如 Stamp 和 FileAttachment）的二进制数据流丢失。这是因为 `PDFPage.addAnnot` 方法不支持包含二进制流的 json 数据。 因此 `PDFDoc.exportAnnotsToJSON` 导出的数据包含二进制流，则不能传递给 `PDFPage.addAnnot` 方法。

    var pdfViewer = await pdfui.getPDFViewer();
    var test = {ExportDataFile:'http://pathToSourceFile.pdf',ImportDatafile:'http://pathToTargetFile.pdf'};
    var resp = await fetch(test.ExportDataFile);
    var file = await resp.blob();

    var pdfdoc = await pdfViewer.openPDFByFile(file);
    var annotJson = await pdfdoc.exportAnnotsToJSON();
    var newResp = await fetch(test.ImportDatafile);
    var newFile = await newResp.blob()

    var newPdfdoc = await pdfViewer.openPDFByFile(newFile);
    for(var i=0;i<annotJson.length;i++){
        var newPage = await newPdfdoc.getPageByIndex(annotJson[i].page);
        var newAnnot = await newPage.addAnnot(annotJson[i]);
    }

## # 表单

表单支持三种文件导入/导出的标准数据类型：XFDF, FDF 和 XML。

### # API

以下列出了 Foxit PDF SDK for Web 提供的用于导入/导出表单数据文件的 APIs。

- PDFDoc.exportFormToFile(fileType)
- PDFDoc.importFormFromFile(file, isXML)