Hey Bubblers! 
I’d like to share a plugin I’ve been working on for the past few weeks — PDF Builder, a fully visual, drag-and-drop PDF editor that runs 100% inside your Bubble app.
No iframes. No external SaaS. No monthly fees. Everything runs client-side.
View demo page
View demo in editor
Plugin Page
What it looks like
(Screenshot: the editor in action with the Variables example template — Certificate of Completion)
What it does
PDF Builder gives your users a real document editor right inside your Bubble app. Think of it as a lightweight Google Docs / Canva for PDFs — but wired directly into your Bubble data.
Core features:
| Feature | Details |
|—|—|
|
Visual canvas | Drag, resize, reposition elements freely |
|
Text blocks | Full typography: font, size, weight, color, alignment, line-height, letter-spacing, underline, strikethrough |
|
Shapes & Lines | Rectangles with fill, border, border-radius; lines with custom stroke |
|
Images | Upload from local file, choose object-fit mode |
|
Multi-page | Page thumbnails, add/remove pages |
|
Zoom + Grid | Zoom controls and snap-to-grid alignment guides |
Dynamic Variables — the killer feature
The thing I’m most excited about: {{variables}}.
Type {{name}} or {{company}} anywhere inside a text element. The variable shows up as a red dashed pill — a visual cue that it needs a value.
You have two ways to fill them:
1. Pass values from Bubble (no modal, instant export):
context property = { "name": "Current User's Name", "company": "Current User's Company" }
The canvas preview resolves the variables live. When you export, the PDF is generated instantly with the real values — no interruption for the user.
2. Let the user fill them in at export time:
If context is not set, clicking “Export PDF” triggers a modal that lists every detected variable and asks the user to fill in each value before generating the file.
This makes PDF Builder a great fit for:
-
Certificates of completion -
Contracts with dynamic fields -
Invoices and quotes -
Personalized letters
Save & Restore
The editor serializes the entire document (all pages, elements, settings) into an encoded string you can save to any Bubble text field.
On document_saved → Save document_data to your DB
On page load → Pass saved value to the data property
The editor reconstructs the document automatically — no extra workflow needed.
PDF Export
When the user clicks Export PDF:
-
Variables are resolved (from
contextor the fill-in modal) -
jsPDF renders every element pixel-perfectly
-
A
pdf_generatedevent fires with a blob URL ready to open or upload
On pdf_generated → Open pdf_url in a new tab
Quick Setup (4 steps)
-
Add the PDF Builder element to your page (full-width recommended, min 600px height)
-
Create a
pdf_datafield (Long Text) on your data type -
Wire
document_saved→ savedocument_datatopdf_data -
Set property
data=Current Thing's pdf_datato restore on load
That’s it. Your users have a full PDF editor.
Bilingual
The interface supports English (en-US) and Portuguese (pt-BR), switchable at runtime via the locale property.
I’d love your feedback!
This is my first visual editor plugin for Bubble and I’d love to hear from the community:
-
What document types would you use this for?
-
Any features you’d love to see added? (comments? rich text? QR codes?)
-
Any bugs or edge cases you run into?
Drop a reply below or DM me — all feedback is welcome. Thanks for checking it out! ![]()
