Migration
Move from PDFMonkey to Formfeed
PDFMonkey code templates are HTML with Liquid, and Formfeed runs Liquid too. The importer reads your templates through the PDFMonkey API and converts the places where their Ruby Liquid differs, so you review a report instead of rewriting templates.
Free plan with 100 units a month, no credit card
1. Import the templates
Open Templates, choose Import and PDFMonkey. Enter a secret API key and your workspace ID to list the templates, pick the ones to move and analyse them; Create drafts makes a Liquid template of each, with the sample data as its default data set. The key is used for that request only and never stored. The command line does the same with formfeed import pdfmonkey. Every conversion is in the migration guide.
- Converted. strftime date formats to date-fns, in_time_zone to the date helper's timezone, with_delimiter to number formatting with matching separators, slice_by to chunk, snippets and partials inlined.
- Mapped. Paper format, orientation, margins, the simple and the advanced header and footer with page numbers, SCSS compiled to CSS, Tailwind switched to Formfeed's Tailwind mode, image templates as image templates at 1200 × 630, which you change under Page setup.
- Reported. Filters without an equivalent, integer divisions that Ruby rounds down, $docPayload scripts and PDF form fields, each with the line and what to do instead.
2. Switch the API
Publish each imported draft first: the API renders the published version. Then replace the call to PDFMonkey's documents endpoint with a render that names the template by its slug (PDFMonkey's template identifier in lowercase with dashes) and sends the payload as data. Asynchronous renders with a webhook replace pending documents and their webhook events.
curl https://api-eu.formfeed.dev/v1/renders \
-H "Authorization: Bearer ff_live_..." \
-H "Content-Type: application/json" \
-d '{ "template": "order-confirmation", "data": { "order": { "id": "A-1" } } }'What is different
- An editor with diagnostics. Autocomplete from your sample data, errors while you type and a paginated preview with headers and footers.
- Three template languages. Liquid for your imported templates, Jinja2 and Handlebars when a team prefers them, all with the same helpers.
- Templates as files. Keep templates in your repository, preview them offline and test them in CI with the same engine the API uses.
- Invoices and codes built in. QR codes, barcodes, EPC payment codes and currency formatting without JavaScript libraries.
FAQ
- Can Builder templates be imported?
- No. PDFMonkey does not document the format of its visual Builder, so only code templates are imported. Builder templates are listed and skipped.
- What about snippets?
- PDFMonkey's API does not return snippet code. Paste the snippets the templates load into the import dialog, or pass them to the command line with --snippet; they are inlined into each template.
- Is my PDFMonkey API key stored?
- No. It is sent once to read the templates and discarded.