DocSpring vs DocRaptor
Compare a Prince rendering API for HTML you already have with stored templates and PDF filling.
Our take
DocRaptor is a wrapper around Prince, the best print engine there is for CSS paged media. If you publish reports with footnotes, running headers, and precise page breaks, and your application already produces the HTML, DocRaptor renders it better than a browser will. It is also cheap at low volume and has a long record of reliability.
It does one thing. There are no stored templates, no template language, no PDF form filling, no forms or signatures, no EU hosting, and no batch or merge. DocSpring renders HTML with Chromium rather than Prince. Chromium handles ordinary invoices and contracts well, but it supports less of the CSS paged-media specification, so complex print layouts need testing. Choose DocRaptor for demanding print typography. Choose DocSpring when you want to send data instead of HTML, fill existing PDFs, or collect signatures.
Print layouts with Prince
DocRaptor renders HTML with Prince, a specialist print engine. That makes it a serious option for publications with footnotes, running content, or demanding pagination. DocSpring generates HTML PDFs with a Chromium-based renderer and also fills existing PDF forms.
If your source is an official PDF that must keep its layout, DocSpring lets you map fields onto that file. If your source is HTML, test the actual layout in both engines. Browser-compatible CSS and Prince-specific print rules are not interchangeable.
Choose DocSpring for PDF forms and stored templates
You need to fill supplied PDFs and generate HTML documents through the same service. Store HTML/CSS with Liquid, send JSON data, and manage template drafts and published versions.
Choose DocRaptor for demanding print layouts
Your application produces HTML and needs Prince's paged-media features. A technical report with footnotes and carefully controlled page breaks is a better evaluation document than a one-page receipt.
Feature comparison
Follow the feature links for details in DocSpring's documentation. Sources for each DocRaptor cell are listed at the end of the page.
Scroll the table sideways to see both products.
| What you need | DocSpring | DocRaptor |
|---|---|---|
| Templates | ||
| Fill an existing PDF | Yes Overlay fields on your PDF. Import existing form fields or place your own. | No No PDF form filling. Each request sends HTML or a URL and Prince renders a new document. |
| Visual document design | No Use an existing PDF or write HTML/CSS. The field editor does not design the document layout. | No No visual designer. You write the HTML and CSS in your own tools. |
| HTML to PDF | Yes HTML/CSS and Liquid templates, with code editors and a PDF preview. | Yes: Prince Converts HTML, CSS, and JavaScript with Prince, including paged-media CSS, footnotes, and running headers. |
| Repeat a list of items | Yes Liquid loops create growing tables in HTML templates. Fields on an uploaded PDF can address array items without changing the page layout. | Conditions apply: In your app No template language. Your application renders repeated rows into the HTML before each request. |
| Conditional content | Yes Show or require PDF fields with conditional rules. Use Liquid conditions for HTML content. | Conditions apply: In your app Conditional content is resolved in your application before sending the HTML. |
| Template versioning | Yes Edit drafts, publish numbered versions, and pin API requests to a version. | No No stored templates, so nothing to version. Pipeline versioning pins the rendering engine, not your layout. |
| Editable PDF output | Yes Keep text and checkbox fields editable, or flatten the filled content. | Yes HTML form elements become fillable PDF fields with a Prince-specific CSS property. |
| HTML rendering engine | Yes: Chromium Browser-based rendering of HTML/CSS templates. | Yes: Prince Prince supports CSS Paged Media features that browser engines do not. |
| HTML template language | Yes: Liquid Store template logic with the layout and supply JSON data when generating a document. | No No stored templates or template language. Your application sends finished HTML with every request. |
| API integration | ||
| Synchronous generation | Yes Use sync.api.docspring.com to receive submission JSON and a PDF download URL in one request. | Yes Synchronous creation is the default and returns the PDF bytes, with a 60 second limit. |
| Asynchronous generation | Yes Send wait=false to return immediately. Receive a webhook or check the submission status later. | Yes Set async=true to queue the job for up to 10 minutes, then poll the status URL. |
| Webhooks | Yes Receive notifications about PDF generation and Data Request events. | Yes A callback URL receives a POST after an asynchronous job succeeds. Failures are not sent to the callback. |
| Batch PDF generation | Yes Generate up to 50 PDFs in a request with different templates and data. | No One document per request. Run parallel requests for volume. |
| Combine PDFs | Yes Combine generated PDFs and other PDF files into one document. | No No PDF merging. DocRaptor's own comparison pages list it as unsupported. |
| Integrations | ||
| AWS S3 | Yes Automatically upload generated PDFs to your own S3 bucket. | No No S3 delivery. Responses are PDF bytes, or a DocRaptor-hosted URL with the paid hosting add-on. |
| Zapier | Yes: Beta Generate PDFs and start signing workflows through the beta integration. | No No Zapier app. DocRaptor's guide uses Webhooks by Zapier to call the API. |
| n8n | Yes Community node for PDF generation and signing workflows. | No No n8n node. The integrations page lists Zapier, Drupal, and Kotive only. |
| Make.com | Coming soon DocSpring integration is planned. | No No Make app. Call the REST API with a generic HTTP module. |
| Pipedream | Coming soon DocSpring integration is planned. | Conditions apply: Auth only Pipedream lists DocRaptor for API-key authentication but has no prebuilt actions or triggers. |
| Forms and e-signatures | ||
| Embed the template editor | Yes Embed the PDF field editor and choose which controls your users can access. | No No template editor exists to embed. |
| Collect data with forms | Yes Generate web forms from your PDF template fields, or let people fill in the PDF visually. | No No hosted data collection. Generated PDFs can contain fillable fields, but nothing captures submissions. |
| Electronic signatures | Yes Data Requests support ESIGN/UETA signing workflows. Your app supplies authentication details and sends notifications. | No No e-signature workflow. |
| Embedded signing | Yes Show the signing form in your app with a one-time authentication token. | No No signing feature. |
| Security and deployment | ||
| SOC 2 Type II | Yes Completed audit. Request the report through our Trust Portal. | Yes SOC 2 Type II, audited against the Security trust services criteria. |
| GDPR compliance | Yes GDPR compliant. Our Trust Portal lists security controls and policies. | Yes GDPR compliant, DPA on request, and a participant in the EU-US Data Privacy Framework. |
| HIPAA compliance | Yes HIPAA compliant. Sign a BAA before submitting protected health information; contact [email protected]. | Conditions apply: Paid plans Available on any paid plan. Enable HIPAA mode, which disables document hosting, then sign the BAA. |
| ISO 27001 | No Not certified. DocSpring's security controls are audited under SOC 2 Type II. | No No ISO 27001 certification is published. |
| Automatic document deletion | Yes Set an expiry per template for submission data, generated PDFs, and uploaded images. | Yes Retention is configurable from 7 days down to deleting input on conversion and output within 15 minutes. |
| US and EU hosting | Yes Choose the US or EU service region. | No US only. Hosted in the AWS US-East region with no EU option. |
| Self-hosting | Yes: Enterprise Self-hosted enterprise licenses are available. | Not published No self-hosted option is published. DocRaptor is described only as a hosted API. |
"Not published" means the vendor's public materials do not say either way, usually because it is handled on request. A dedicated integration is different from connecting an API through a generic HTTP action. Plan requirements and product boundaries are noted in the cells.
Test a multi-page invoice, not just a screenshot
Start with an invoice that grows from two rows to several pages. Keep the data, fonts, and page dimensions the same in both versions so differences in pagination are easy to spot.
In DocSpring
Create an HTML template, define the items in your data schema, and use a Liquid loop to render the rows. Preview sample data before publishing a version. Send JSON to generate each invoice.
Use print CSS and the template's header and footer settings. Check the final page count with long item descriptions and a table that ends close to the bottom of a page.
In DocRaptor
Render the invoice HTML in your application, then submit it as document_content or supply a document URL. Configure the Prince options required by the layout.
The synchronous response is the PDF itself. For longer jobs, keep the status ID and fetch the output when the job finishes. A success callback does not replace checking failed jobs.
A Liquid invoice in DocSpring
Create an HTML template with this content and a schema containing customer_name and the items array. The request below supplies two items; use a longer array to exercise pagination.
<h1>Invoice for {{ customer_name | escape }}</h1>
<table>
<tr><th>Description</th><th>Amount (USD)</th></tr>
{% for item in items %}
<tr>
<td>{{ item.description | escape }}</td>
<td>{{ item.amount | currency }}</td>
</tr>
{% endfor %}
</table>
curl --fail-with-body \
"https://sync.api.docspring.com/api/v1/templates/${DOCSPRING_TEMPLATE_ID}/submissions" \
--user "${DOCSPRING_TEST_TOKEN_ID}:${DOCSPRING_TEST_TOKEN_SECRET}" \
--header 'Content-Type: application/json' \
--data '{
"test": true,
"data": {
"customer_name": "Mira Patel",
"items": [
{ "description": "Annual inspection", "amount": 120 },
{ "description": "Replacement filter", "amount": 35 }
]
}
}'
Set the environment variables to your template ID and test API credentials. Accounts in our EU region send requests to sync.api-eu.docspring.com instead. The response includes a download URL for a watermarked PDF. See the request and response guide.
If you rely on Prince-specific footnotes, page selectors, or other print rules, test those first. Recreating the invoice successfully does not prove a complex publication will render identically.
Cheap per document, with nothing else included
DocSpring
The Starter plan is $49 per month for 50 live PDFs, then 25c per additional PDF. Larger plans lower the per-PDF price. Every plan includes unlimited templates, users, and watermarked test PDFs, and there is a free trial with no card required.
See all DocSpring plansDocRaptor
DocRaptor's free plan includes 5 production documents a month. Paid plans start at $15 per month for 125 documents on Basic, then $29 for 325, $75 for 1,250, and $149 for 5,000. Overage runs from 12 cents per document on Basic down to 3 cents on the $149 plan. Every plan includes unlimited watermarked test documents.
A document counts once regardless of page count or file size, which is generous for long reports. Document hosting costs extra, and there is no EU region at any price.
DocRaptor pricing pageA 40-page report and a one-page invoice each count as one document. For 2,000 reports a month, DocRaptor's $75 plan plus overage comes to about $120. DocSpring's Professional plan is $99 for 1,000 PDFs, then 10c per PDF, so the same volume costs more. DocSpring's plan includes stored templates, form filling, forms, signing, and EU hosting that DocRaptor does not offer at all. Test the largest report against both renderers before deciding.
Moving HTML generation from DocRaptor to DocSpring
Keep the original HTML, CSS, fonts, and representative outputs. Move the dynamic parts of your application template into Liquid if you want DocSpring to store the template. Keep calculations in your application when that makes them easier to test.
Replace Prince-specific settings with supported CSS or DocSpring template settings. Pay particular attention to footnotes, page numbering, table breaks, margins, and font metrics. Some layouts need redesigning rather than a mechanical conversion.
Change response handling from raw PDF bytes to submission JSON and a download URL. For background jobs, map your existing status handling to DocSpring submissions and webhooks. Test rendering failures as well as completed documents.
Questions about DocRaptor alternatives
Will the same HTML produce the same PDF?
Not necessarily. Prince and Chromium handle some print CSS differently, and font measurements can change line and page breaks. Compare representative output before migrating, especially if your document uses Prince-specific features.
Can DocRaptor fill an existing government form?
No. Its API renders a new document from HTML. DocSpring keeps the original PDF as the background and places data into mapped fields, which avoids rebuilding the form in HTML.
Does DocRaptor offer EU hosting?
No. DocRaptor is hosted in the AWS US-East region. DocSpring offers a choice of US or EU region.
About this comparison
We reviewed DocSpring's documentation and implementation alongside DocRaptor's published product, API, pricing, and security information. Prices and plan limits were checked on the review date shown at the top of the page. The workflows describe documented behavior; they are not performance benchmarks. Features and plans can change after the review date.
Sources
- DocRaptor API documentation
- DocRaptor plans and pricing
- DocRaptor security and privacy
- DocRaptor HIPAA compliance guide
- DocRaptor PDF forms guide
- DocRaptor integrations and Zapier guide
Spotted something that needs correcting? Send us the detail and a source.
Related comparisons
Product names, logos, and brands are the property of their respective owners and are used here for identification and comparison only. Their use does not imply any affiliation with or endorsement by those companies.
Test your HTML template in DocSpring
Upload a PDF or create an HTML template, then send a test request.