> ## 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.

# Export a PDF

> Get your sheets as one PDF file with vector linework.

export const LiveExample = ({path, title = 'Live example', height = 460}) => {
  return <Frame>
      <iframe src={`https://floorkit-examples.ploterr.com/floorkit/${path}?embed=1`} ref={frame => {
    if (!frame || !['localhost', '127.0.0.1'].includes(window.location.hostname)) return;
    const local = `http://localhost:5555/${path}?embed=1`;
    if (frame.src !== local) frame.src = local;
  }} title={title} loading="lazy" allow="fullscreen" style={{
    width: '100%',
    height: `${height}px`,
    border: 0,
    display: 'block'
  }} />
    </Frame>;
};

`exportPdf` of the project manager makes one PDF from the sheets of your project. Each sheet is one page. The linework is vector, so it stays sharp at each zoom level and in print.

<LiveExample path="guides/export-a-pdf" />

## Before you start

You have a project with a sheet from [Compose a sheet](/floorkit/guides/compose-a-sheet).

## Open the project

A `ProjectManager` holds the project with its sheets and builds the building.

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

export function openSheets(project: ProjectFile): ProjectManager {
  return new ProjectManager(project);
}
```

## Export and download

```typescript theme={null}
export async function downloadPdf(manager: ProjectManager): Promise<void> {
  const pdf = await manager.exportPdf();
  const url = URL.createObjectURL(pdf);
  const link = document.createElement('a');
  link.href = url;
  link.download = 'drawings.pdf';
  link.click();
  URL.revokeObjectURL(url);
}
```

## Export some sheets

Give the ids of the sheets that you want.

```typescript theme={null}
export function exportOneSheet(manager: ProjectManager): Promise<Blob> {
  return manager.exportPdf(['sheet-a101']);
}
```

## Set the title block text

```typescript theme={null}
export function exportWithTitle(manager: ProjectManager): Promise<Blob> {
  return manager.exportPdf(undefined, {
    projectName: 'Garden house',
    date: '2026-10-06',
  });
}
```

## Rules

* The export uses the current building and the current sheets of the manager. You do not copy the building into the project first.
* The result is a `Blob`. You can download it, as shown here, or send it to your server.
* If Floorkit cannot draw one of the views, the promise rejects. You do not get a partial file.
* After `dispose()` of the manager, the promise rejects.
* A deployed site needs a valid hostname key for exports, including a non-commercial demo. See [Licensing](/floorkit/licensing).

## Without the manager

If your app makes the `BuildingSession` itself, use `exportProjectPdf` with a project that holds the current building. See the [exportProjectPdf API](/floorkit/api/exports/export-project-pdf).

## Next

<CardGroup cols={2}>
  <Card title="Export a GLB" icon="cube" href="/floorkit/guides/export-a-glb">
    Get the 3D model as a file.
  </Card>

  <Card title="ProjectManager API" icon="code" href="/floorkit/api/editor/project-manager">
    See each member of the manager and the project commands.
  </Card>
</CardGroup>


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