# PDFExporter.download()

```ts
download(filename?: string, options?: ExportOptions): Promise<DownloadResult>
```

Download PDF as a file. A download confirms itself in one line ("Saved · 6 pages, 1.2 MB"); [export.successToast](https://kernstra.com/docs/web-sdk/config/export/successtoast)`: false` drops the line. Needs `export`.

- Kind: method
- Since: 1.0.0

| Parameter | Type | Description |
| --- | --- | --- |
| `filename?` | `string` | The file name; [export.defaultFilename](https://kernstra.com/docs/web-sdk/config/export/defaultfilename) when omitted. |
| `options?` | `ExportOptions` | `{ flatten?, invalidateSignatures?, pages?, onProgress?, signal? }`. |

Returns `Promise<DownloadResult>`: `{ sizeBytes, pdfA? }` — the file's size in bytes and, for a document that claims PDF/A, whether the file saved still claims it: `'kept'` for a document nobody changed, `'dropped'` for a changed one, or a page range.

Throws:

- `FEATURE_NOT_LICENSED` when the license lacks `export`.
- `INVALID_ARGUMENT` when `pages` is empty or names a page the document does not have.
- `INVALID_STATE` when `flatten` is asked of a signed document without `invalidateSignatures`; from a viewer's exporter, when pending edits cannot be written or the document was reloaded under it.
- `PAGE_ERROR` when a page cannot be loaded for flattening.
- `EXPORT_FAILED` when the document cannot be written.
- `ABORTED` when `signal` aborts.
- `DOCUMENT_CLOSED` after `doc.close()`.

```ts
const result = await viewer.createExporter().download('signed.pdf', {
  flatten: true,
  onProgress: (done, total) => setProgress(done / total),
});
console.log(result.sizeBytes);
```

Part of [PDFExporter](https://kernstra.com/docs/web-sdk/api/pdfexporter) in the Kernstra Web SDK 1.0.0 API reference.

Web page: https://kernstra.com/docs/web-sdk/api/pdfexporter/download
