> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ploterr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# exportProjectPdf

> exportProjectPdf makes one PDF from the sheets of a project.

Each sheet becomes one page with vector linework.

## Import

```typescript theme={null}
import { exportProjectPdf, sheetsToPdf } from '@opengeometry/floorkit';
```

## Example

```typescript theme={null}
import { exportProjectPdf, type ProjectFile } from '@opengeometry/floorkit';

export async function downloadSheets(project: ProjectFile, sheetIds?: string[]): Promise<void> {
  const blob = await exportProjectPdf(project, sheetIds);
  const url = URL.createObjectURL(blob);
  const link = document.createElement('a');
  link.href = url;
  link.download = 'project-sheets.pdf';
  link.click();
  window.setTimeout(() => URL.revokeObjectURL(url), 1000);
}
```

## Notes

* Without `sheetIds`, Floorkit exports all sheets.
* The result is a `Blob`. Your app downloads it or uploads it.
* If a sheet shows raster views, prepare the images first and pass them in `rasterViews`.
* If Floorkit cannot draw a view, the promise rejects. You do not get a partial PDF.
* A deployed site needs a valid hostname key, including a non-commercial demo. See [Licensing](/floorkit/licensing).

## Signature

```typescript theme={null}
function exportProjectPdf(
  project: ProjectFile,
  sheetIds?: string[],
  options?: ProjectExportOptions,
): Promise<Blob>;
```

## Parameters

<ParamField path="project" type="ProjectFile" required />

<ParamField path="sheetIds" type="string[]" />

<ParamField path="options" type="ProjectExportOptions">
  Default: `&#123;&#125;`.
</ParamField>

## Returns

```typescript theme={null}
Promise<Blob>;
```

## sheetsToPdf

Every sheet as one multi-page PDF, in document order.

```typescript theme={null}
function sheetsToPdf(sheets: Sheet[], deps: PaperRenderDeps): Blob;
```

## Types

### ProjectExportOptions

```typescript theme={null}
interface ProjectExportOptions extends DrawProjectViewOptions {
  rasterViews?: RasterViewBatch;
  style?: ExportOptions['style'];
  projectName?: string;
  date?: string;
  templates?: PaperRenderDeps['templates'];
  paperStyles?: PaperRenderDeps['paperStyles'];
}
```

<ResponseField name="rasterViews" type="RasterViewBatch">
  Prepared committed raster content for named isometric, section and elevation views.
</ResponseField>

<ResponseField name="style" type="ExportOptions['style']">
  Per-call paper style override.
</ResponseField>

<ResponseField name="projectName" type="string">
  Title-block auto fields; the project model's name or id supplies the default name.
</ResponseField>

<ResponseField name="date" type="string" />

<ResponseField name="templates" type="PaperRenderDeps['templates']">
  Custom templates and style presets for this export.
</ResponseField>

<ResponseField name="paperStyles" type="PaperRenderDeps['paperStyles']" />

### ExportOptions

Per-call options for the exporter's methods.

```typescript theme={null}
interface ExportOptions {
  style?: PaperStyleInput;
}
```

<ResponseField name="style" type="PaperStyleInput">
  Draw this export in a paper style — a builtin id (`"ink-sketch"`), a document-registered id, or an
  inline overlay — for this call only, without touching the document. Outranks the document's, the
  sheet's and the viewport's own style; absent means "as the document says".
</ResponseField>

## Related

* [`DrawProjectViewOptions`](/floorkit/api/drawings/draw-project-view#drawprojectviewoptions)
* [`PaperRenderDeps`](/floorkit/api/drawings/paper-styles#paperrenderdeps)
* [`PaperStyleInput`](/floorkit/api/drawings/paper-styles#paperstyleinput)
* [`ProjectFile`](/floorkit/api/exports/project-file#projectfile)
* [`RasterViewBatch`](/floorkit/api/views/prepare-project-raster-views#rasterviewbatch)
* [`Sheet`](/floorkit/api/drawings/sheet-documents#sheet)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.