Read more about SimplePDF Embed »
Join Our Discord
·
Follow us on Twitter
simplePDF-iframe-example.mp4
- ⚛️ React component -
@simplepdf/react-embed-pdf - 🚀 Script tag -
@simplepdf/web-embed-pdf - 🛠 Iframe API -
postMessageevents - 🤖 SimplePDF Copilot - AI form-filling reference implementation
- Edit, sign, and fill PDFs in the browser: text, checkboxes, pictures, signatures
- Auto-detection of pre-existing PDF form fields
- Page manipulation: add, remove, rotate, re-arrange
- White-label and headless mode (Pro plan+)
- Webhooks, API, bring-your-own-storage: S3, Azure Blob Storage, SharePoint
- AI Copilot that fills forms step-by-step (opt-in)
- Tiny footprint (~5KB gzipped) - the editor lazy-loads on user interaction
PHI never leaves the browser unless you explicitly enable submissions. BAA available, end-users need no signup, and submitted documents can land directly in your own S3, Azure Blob Storage, or SharePoint. Used in production by health-tech platforms.
Learn more about SimplePDF for healthcare »
AI that helps users fill PDF forms step by step, inside the SimplePDF editor.
Copilot is a turn-key, MIT-licensed reference implementation. Users answer in plain language; Copilot maps answers to the right fields, asks for what's missing, and the user reviews and signs. Fork it, wire up your AI provider, and ship it inside your product without writing the iframe bridge, tool plumbing, or streaming chat from scratch.
Privacy by design:
- PDF data stays in the browser. The SimplePDF iframe never uploads document bytes.
- Chat traffic flows through your server. You control the provider, the keys, and the logs.
- Submissions go direct to your storage (S3, Azure Blob Storage, or SharePoint).
Links:
- 🎬 Live demo on a healthcare form
- 📖 Copilot README - architecture, fork points, deploy targets
- 🤖
skills/fork-and-go/SKILL.md- point Claude Code or Codex at it for a guided setup
Privacy & data model
SimplePDF Embed operates in two modes:
- All data stays in the browser - documents never leave the user's device
- Processed entirely client-side, no server communication
- No account or signup required
- Includes "Powered by SimplePDF" branding
- Submissions are not collected - users can only download their work
- Submissions stored and accessible via your dashboard
- Webhooks for form automation (Basic plan+) - learn more
- White-label: remove "Powered by SimplePDF", add your own logo, headless mode (Pro plan+) - learn more
- Bring-your-own-storage: S3-compatible or Azure Blob Storage (Pro plan+), SharePoint (Premium plan) - learn more
- BAA available for healthcare customers
| Aspect | Free editor | Paid plans |
|---|---|---|
| Document storage | Browser only | Server (configurable) |
| Submissions collected | No | Yes (Basic plan+) |
| Branding | "Powered by SimplePDF" | Customizable (Pro plan+) |
| Webhooks | Not available | Available (Basic plan+) |
| BYOS (S3/Azure/SharePoint) | Not available | Available (plan-dependent) |
| Price | Free | Paid plans |
Branding & white-labeling
Without a SimplePDF account, the editor displays "Powered by SimplePDF" branding.
With a Pro plan, you can:
- Remove "Powered by SimplePDF" entirely
- Add your own company logo
- Customize colors and appearance
- Enable headless mode (no sidebar, programmatic controls only)
To remove/customize branding:
- Subscribe to a Pro plan
- Go to your Dashboard
- Upload your logo or remove the sidebar entirely
- Use your
companyIdentifierin the embed code:
// React - branding configured in your dashboard settings
<EmbedPDF companyIdentifier="yourcompany">
<button>Edit PDF</button>
</EmbedPDF><!-- Script tag - branding configured in your dashboard settings -->
<script
src="https://unpkg.com/@simplepdf/web-embed-pdf"
companyIdentifier="yourcompany"
defer
></script>Note: Branding is configured through your SimplePDF dashboard, not via code props. The companyIdentifier links your embed to your dashboard settings.
For detailed customization options, see: Customize the PDF Editor and Add Branding
Architecture
SimplePDF Embed uses a fully client-side architecture for PDF processing:
+-----------------------------------------------------+
| User's Browser |
| +-----------------+ +-------------------+ |
| | Your App |-------->| SimplePDF | |
| | | | Iframe | |
| +-----------------+ +-------------------+ |
| | | |
| v v |
| postMessage PDF editing / filling |
| Events |
+-----------------------------------------------------+
| (Only on paid plans)
v
+-----------------------------------------------------+
| SimplePDF Servers |
| Submission storage, webhooks, etc. |
+-----------------------------------------------------+
| (BYOS - paid plans, optional)
v
+-----------------------------------------------------+
| Your Own Storage (S3/Azure Blob Storage/SharePoint)|
| For HIPAA compliance, data residency, etc. |
+-----------------------------------------------------+
| Benefit | Description |
|---|---|
| Privacy | Documents never leave the browser (free editor) |
| Security | No server-side attack surface for document processing |
| Performance | No upload/download latency for editing |
| Offline capable | Works without internet after initial load |
| Cost efficient | No server resources for document processing |
| GDPR friendly | Data minimization - no server storage by default |
| Limitation | Description | Workaround |
|---|---|---|
| No server-side PDF generation | Cannot generate PDFs from templates server-side | Use client-side field detection via detectFields() |
| No bulk processing | Cannot process multiple PDFs in batch | Process sequentially or use dedicated server-side library |
| No programmatic PDF retrieval | Cannot get modified PDF as Blob/Base64 in JS | Use webhooks + server storage for programmatic access |
| No persistent storage | PDFs don't persist without user action | Use a paid plan for server-side submission storage |
| Browser memory limits | Very large PDFs (100+ MB) may cause issues | Recommend splitting large documents |
Good fit:
- End-user PDF form filling
- Document signing workflows
- PDF annotation and commenting
- Privacy-sensitive document handling
- Embedding PDF editing in web apps
Consider alternatives for:
- Server-side PDF generation from templates
- Bulk PDF processing pipelines
- Automated document workflows (without user interaction)
- Extracting raw PDF bytes programmatically
Retrieving PDF data
Use getDocumentContent() to extract text from the PDF. See the React or Iframe documentation for implementation details.
Use submit({ downloadCopyOnDevice: true }) to trigger a browser download of the modified PDF.
SimplePDF handles PDF generation and storage so you don't have to. When users submit, the filled PDF is automatically generated and stored - either on SimplePDF's servers or your own storage.
| Method | How it works | Use case |
|---|---|---|
submit with downloadCopyOnDevice: true |
Browser downloads the PDF | End-user saves their work |
submit with downloadCopyOnDevice: false |
PDF sent to SimplePDF servers | Server-side collection via webhooks |
| S3/Azure/SharePoint integration | PDF stored in your storage | Programmatic access via your storage |
Available integrations:
- Webhooks: get notified when submissions are received - Configure webhooks
- Bring-your-own-storage (BYOS): store submissions directly in your storage - S3 setup / Azure setup / SharePoint setup
Page manipulation
SimplePDF includes built-in page manipulation capabilities:
| Feature | How to access |
|---|---|
| Re-arrange pages | Drag and drop pages in the thumbnail sidebar |
| Add pages | Click "+" button in thumbnail sidebar or use "Add Page" menu |
| Remove pages | Right-click page thumbnail → "Delete page" |
| Rotate pages | Right-click page thumbnail → "Rotate" options |
Page manipulation is enabled by default - no configuration required. Users access these features through the page thumbnail sidebar on the left side of the editor.
Using viewer mode (free):
// React
<EmbedPDF companyIdentifier="react-viewer" ... /><!-- Script tag -->
<script ... companyIdentifier="viewer"></script>Using Pro plan customization:
With a Pro plan, you can selectively disable page manipulation while keeping editing features enabled. In your dashboard:
- Toggle "Allow moving, rotating, deleting pages" to disable re-arrange/rotate/delete
- Toggle "Allow adding new pages" to disable page insertion
See: Customize the PDF Editor and Add Branding
Page manipulation and editor actions are available programmatically through the iframe postMessage API and the React component. Full event reference: React | Iframe.
FAQ
Yes. The embed editor is free with no usage limits. It includes "Powered by SimplePDF" branding, which can be customized or removed with a Pro plan.
Free editor: It stays in their browser. The document(s) that they load and the data they fill in never leave their computer: SimplePDF privacy policy.
Paid plans: Users are notified that the document and the data they submit is sent to the server. This is part of the paid offering: automated form submissions, webhooks, BYOS, and dashboard access.
The library is a thin wrapper around an iframe that loads SimplePDF on-demand (whenever the user clicks the wrapped link). The footprint for the wrapper is tiny; the editor itself is bigger but only loads when the user opens it. Think "lazy-loading".
Yes. Use viewer mode to display PDFs without any editing capabilities.
React:
<EmbedPDF
companyIdentifier="react-viewer"
mode="inline"
documentURL="https://example.com/document.pdf"
style={{ width: 900, height: 800 }}
/>Script tag:
<script
src="https://unpkg.com/@simplepdf/web-embed-pdf"
companyIdentifier="viewer"
defer
></script>Iframe:
<iframe src="https://viewer.simplepdf.com/editor?open=PDF_URL"></iframe>Disabled in viewer mode: annotation tools, form field editing, page manipulation, submit. Available in viewer mode: PDF viewing and navigation, zoom, page thumbnails, download original PDF.