No new container format. No viewer lock-in. The PDF travels as-is; tools that understand bim-pdf read the embedded element data, marks, levels, and IFC subset alongside the drawing.
What BIM to PDF Means
BIM models -- whether authored in Revit or described in IFC -- carry rich structured data: element types, dimensions, materials, levels, and relationships between objects. A standard PDF export discards all of that and produces a flat drawing.
"BIM to PDF" describes the goal of exporting a BIM model into a PDF that retains queryable element data alongside the visible geometry. The result looks identical to any PDF viewer and carries the BIM layer as an invisible, additive attachment -- present for tools that know how to read it, harmless to those that do not.
bim-pdf is the open format spec that defines how that BIM data is structured, named, and embedded.
Exporting Revit and IFC BIM Data to PDF
Revit's built-in PDF export produces a flat drawing with no element data. The bim-pdf Revit add-in fills that gap: it exports a normal Revit sheet to PDF while embedding BIM elements -- walls, columns, doors, slabs, and more -- as structured JSON sidecars attached to the file.
Each element carries its class (from the v1.0 registry), label, level, and mark. A spatial overlay (marks.json) links every element to its bounding box on the sheet, so downstream tools can query "which wall is at this location" without re-parsing geometry.
IFC models map to the same element-class registry. The optional ifc-subset.json sidecar carries raw IFC entity data alongside the normalized elements.json anchor, enabling cross-tool interoperability without requiring a separate file format or container.
bim revit export PDF with data
The bim revit export command (and the matching Revit add-in button) produces a bim-pdf in one step: a compliant PDF sheet with up to six BIM sidecars embedded -- elements, marks, scales, levels, title block, and IFC subset.
Embedded BIM Metadata and IFC Elements in PDF
PDF supports file attachments through its standard EmbeddedFiles mechanism -- no format extension, no PDF structure modification. bim-pdf uses this to embed JSON sidecars alongside the page geometry.
The anchor is always elements.json: a list of every BIM element with its class, label, and provenance. Additional sidecars are optional and additive -- marks link elements to page positions, scales calibrate real-world dimensions, levels define building floors, and ifc-subset carries IFC entity data for cross-tool use.
Any PDF library that supports EmbeddedFile streams can read or write a bim-pdf. No proprietary parser, no SDK, no account required.
Open BIM PDF format
The bim-pdf spec is public and unencumbered. Any tool can produce or consume it: read the spec, embed the sidecars, and it works. The element-class registry (v1.0) is stable; new sidecars are additive and do not break existing readers.
Vendor-Neutral BIM Interchange Format
A bim-pdf file is a handoff artifact, not a proprietary export. It opens in any compliant PDF reader without plugins. The BIM data layer is additive -- removing the attachments leaves a valid, complete PDF. No viewer lock-in, no cloud round-trip, no license check.
Because the format builds on standard PDF EmbeddedFiles, it is implementation-neutral: Python, JavaScript, C#, or any language with a PDF library can produce or consume it. The JSON schemas are open, the class registry is versioned and stable, and the format carries no account or authentication dependency.
This makes bim-pdf viable as a neutral interchange format between Revit, IFC, and downstream AEC workflows -- a PDF that travels like a PDF but carries BIM data wherever it goes.
Try it: free Revit add-in
See bim-pdf on your own model. The bim-pdf Revit add-in adds an Export bim-pdf button with a live sheet preview — it writes a normal PDF of your sheets with the BIM data layer baked in: elements, marks, scales, levels, and title-block metadata, all in the v1.0 format below. Free to use, for Revit 2025 and 2026.
💾 Download for Revit 2025 / 2026Unzip, run Install.ps1, restart Revit, then click Export bim-pdf on the bim-pdf ribbon. The result opens in any PDF viewer — and lights up element-by-element in a bim-pdf-aware viewer.
Element Classes
Every element carries a class field drawn from the v1.0 registry. Use other with a required class_hint for anything outside the registry.
Structural
wallcurtain-wallslabfloorcolumnbeambracefooting
slab = structural deck or slab-on-grade. floor = interior finish assembly.
Envelope
roofdoorwindowcurtain-panelcurtain-mullion
Interior
ceilingroomstairramp
FF&E
furniturecaseworkequipment
Fallback
other
Requires class_hint: the producer’s native category name. MEP excluded from v1.0.
Sidecar Documents
Sidecars are JSON files embedded as PDF attachments. elements.json is the anchor; all other sidecars are optional and listed in dependency order.
| Filename | Purpose | Key fields |
|---|---|---|
elements.json | BIM element list + document metadata. Anchor for all other sidecars. | bim-pdf, meta (project_id, document_id, exported_at, producer), source (format, version, id_strategy), class_registry, elements[] |
marks.json | Spatial overlay linking elements to page regions. Requires elements.json. | coordinate_space, marks[] (element_id, page, bbox [x0 y0 x1 y1 in PDF points], view_type) |
scales.json | Per-page calibration. Maps PDF points to real-world units. | Keyed by 1-indexed page number. Each entry is a CalibrationScale (pixel-distance + real-distance + unit) or RatioScale (ratio + unit). |
levels.json | Building level definitions with elevation. | levels[] (id [UUID v5], name, elevation [Quantity]) |
titleblock.json | Sheet metadata plus structured sheet-info blocks for zoning, legends, notes, and tabulations. | sheets[] (legacy sheet_number/sheet_name fields plus titleblock, zoning_data_block, area_tabulation[], legend[], notes[]) |
annotations.json | Human and agent markup. Requires elements.json. | annotations[] (id, page, type [polygon/rectangle/text/callout/cloud/stamp/...], author [human|agent], created_at, element_id, style, measurement) |
ifc-subset.json | IFC data subset for cross-tool interop. Optional; omit if not available. | Raw IFC entity subset keyed by element id. Schema is open in v1.0. |
How to Implement
To produce a bim-pdf, embed sidecars as standard PDF file attachments using the PDF EmbeddedFiles names tree. Any PDF library that supports /EmbeddedFile streams works.
// Minimal elements.json
{
"bim-pdf": "1.0",
"meta": {
"project_id": "uuid-v4",
"document_id": "uuid-v4",
"exported_at": "2026-01-01T00:00:00Z",
"producer": "my-tool/1.0"
},
"source": {
"format": "revit",
"version": "2024",
"id_strategy": "revit-stable-element-id"
},
"class_registry": "1.0",
"elements": [
{ "id": "1234", "class": "wall", "label": "Exterior CMU 8\"", "level": "Level 1" }
]
}
Embed the JSON as a file attachment named exactly elements.json. Add additional sidecar files as needed. The attachment name is the sidecar identifier — do not rename.
To read a bim-pdf, extract file attachments by name. No special PDF structure required beyond standard EmbeddedFiles support.
Consumers
Tools in the bim-cli ecosystem produce and consume bim-pdf files:
| Tool | Description |
|---|---|
bim revit export | Export a Revit sheet to bim-pdf — produces a PDF with 6 BIM sidecars embedded |
bim pdf pack | Embed sidecar JSON files into an existing PDF |
bim pdf extract | Extract sidecar JSON files from a bim-pdf |
bim pdf list | List embedded attachments in a PDF |
bim pdf validate | Validate a bim-pdf: schema correctness, cross-references, class registry |
bim pdfv open | Open in pdfv viewer: BIM element overlay, element panel, marks filtered by class |
Install via bimcli.com. No account required.
Format Principles
- PDF-first: any compliant PDF reader opens the file without modification.
- Additive: sidecars are attachments — removing them leaves a valid PDF.
- Stable IDs: element IDs must not change across re-exports of the same model version.
- Progressive: only
elements.jsonis required. Implement one sidecar at a time. - Open: no registry, no auth, no license. Implement it and it works.