ScreenshotNeo

BlogComparisons

Html2Pdf.app vs DocRaptor for Website PDF Generation

Compare HTML2PDF.app and DocRaptor by rendering engine, API workflow, pricing, async jobs, and data handling—and choose the right fit for your PDFs.

By the ScreenshotNeo team4 October 202612 min read

HTML2PDF.app and DocRaptor both turn a URL or supplied HTML into a PDF through a hosted API. Choose based on how your pages render and how you pay: HTML2PDF.app documents a headless Chromium renderer and usage credits based on PDF size; DocRaptor documents the Prince PDF engine, monthly document quotas, and plan-specific overage charges. Neither service is established as a visual-fidelity, speed, or reliability winner by the available evidence. Test your own representative pages before choosing.

This comparison uses vendor documentation and pricing accessed on October 3, 2026. Features, prices, and engine versions can change. It does not report a head-to-head test.

1. Quick comparison

Question HTML2PDF.app DocRaptor
Rendering engine Headless Chromium, according to its documentation. Prince PDF engine, with selectable pipelines that combine Prince and JavaScript-engine versions.
Input A public URL or raw HTML in the html field. A URL or raw HTML/XML content in a JSON request.
Typical synchronous output PDF binary response. PDF binary response.
Async workflow Callback URL; callback payload includes a base64-encoded PDF. Async job with a status ID and optional callback URL; status can be polled.
Billing unit Credits based on generated PDF size: one credit per 5 MB chunk, subject to plan limits. Monthly document quota, with plan-specific overage charges.
Useful when Your workload suits size-based credits and your pages render as expected in Chromium. You want a document quota model or need to evaluate Prince and its PDF-oriented behavior for your documents.
Key checks Media mode, fonts and other resources, JavaScript timing, file-size cap, concurrency, and callback idempotency. Pipeline and JavaScript settings, sync/async duration, hosted-document access and retention, and overage cost.

These are documented workflow differences, not a claim that one renderer produces better output for every site. HTML2PDF.app describes Chromium support for modern HTML, CSS, and JavaScript; DocRaptor documents Prince and versioned pipelines. Measure the pages and styles that matter to your application.

2. Rendering engines and page fidelity

HTML2PDF.app: Chromium rendering

HTML2PDF.app documents headless Chromium as its rendering engine. That can be a natural fit for pages whose print output depends on browser HTML, CSS, and JavaScript behavior. The output still depends on the selected CSS media mode, accessible fonts and resources, and when asynchronous page content finishes loading. Check those details against your site rather than assuming that a successful API response means every asset rendered.

Read the HTML2PDF.app documentation for its current request fields and rendering controls.

DocRaptor: Prince and pipeline selection

DocRaptor documents the Prince PDF engine and a pipeline setting that selects Prince and JavaScript-engine versions. In the API reference accessed for this article, pipeline 10.1 is the default and maps to Prince 15.1 and JavaScript engine 2. Treat those version details as time-sensitive and verify the current pipeline before depending on them.

DocRaptor documents both a JavaScript parser and Prince’s separate JavaScript engine. Its JavaScript option is disabled by default in the documented settings. Avoid enabling multiple script execution paths casually: first determine which one the page needs, then check whether scripts run twice or content is captured before it is ready. See the DocRaptor API reference.

How to make a fair rendering decision

Build a small, repeatable test set containing a plain page, a page with web fonts and remote images, a JavaScript-rendered page, a long document with page-break rules, and a page with your intended print CSS. Submit the same inputs and equivalent settings to each service. Inspect missing assets, pagination, headers and footers, layout, output size, completion time, and errors. Record the date and configuration; repeat timing measurements under the same conditions before making a performance claim.

3. API workflows and runnable examples

Keep API keys on a server or in a trusted job runner. Do not embed credentials in browser JavaScript or commit them to a public repository. The examples below show synchronous PDF-byte responses. Replace placeholders with your own credentials and an accessible URL. Check each provider’s current docs for any account-specific options or required fields.

HTML2PDF.app with cURL

curl -X POST "https://api.html2pdf.app/v1/generate" \
  -H "Content-Type: application/json" \
  -d '{"apiKey":"YOUR_API_KEY","html":"https://example.com/report"}' \
  --output report.pdf

The endpoint accepts the html field as a public URL or raw HTML. The service documents an authenticated POST to this endpoint and a PDF binary response for synchronous generation. Confirm the exact authentication and option names in the current API documentation before adapting this example to production.

HTML2PDF.app with Python

import requests

response = requests.post(
    "https://api.html2pdf.app/v1/generate",
    json={
        "apiKey": "YOUR_API_KEY",
        "html": "https://example.com/report",
    },
    timeout=120,
)
response.raise_for_status()
with open("report.pdf", "wb") as pdf_file:
    pdf_file.write(response.content)

HTML2PDF.app with Node.js

const response = await fetch("https://api.html2pdf.app/v1/generate", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    apiKey: process.env.HTML2PDF_API_KEY,
    html: "https://example.com/report",
  }),
  signal: AbortSignal.timeout(120_000),
});

if (!response.ok) {
  throw new Error(`HTML2PDF.app returned ${response.status}: ${await response.text()}`);
}
const pdf = Buffer.from(await response.arrayBuffer());
await import("node:fs/promises").then(({ writeFile }) => writeFile("report.pdf", pdf));

DocRaptor with cURL

DocRaptor documents HTTP Basic Authentication with the API key as the username and a blank password. This request sends JSON and writes the PDF response to disk.

curl --user "YOUR_API_KEY:" \
  -H "Content-Type: application/json" \
  -d '{"name":"report.pdf","document_type":"pdf","document_content":"https://example.com/report","test":true}' \
  "https://api.docraptor.com/docs" \
  --output report.pdf

The test field is shown for a test conversion; DocRaptor says test documents are free and unlimited, and test PDFs are watermarked. Remove or configure test mode according to the current API reference when producing documents for users. Consult DocRaptor’s API overview for authentication and request details.

DocRaptor with Python

import requests

response = requests.post(
    "https://api.docraptor.com/docs",
    auth=("YOUR_API_KEY", ""),
    json={
        "name": "report.pdf",
        "document_type": "pdf",
        "document_content": "https://example.com/report",
        "test": True,
    },
    timeout=90,
)
response.raise_for_status()
with open("report.pdf", "wb") as pdf_file:
    pdf_file.write(response.content)

DocRaptor with Node.js

const apiKey = process.env.DOCRAPTOR_API_KEY;
const basicAuth = Buffer.from(`${apiKey}:`).toString("base64");
const response = await fetch("https://api.docraptor.com/docs", {
  method: "POST",
  headers: {
    Authorization: `Basic ${basicAuth}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    name: "report.pdf",
    document_type: "pdf",
    document_content: "https://example.com/report",
    test: true,
  }),
  signal: AbortSignal.timeout(90_000),
});

if (!response.ok) {
  throw new Error(`DocRaptor returned ${response.status}: ${await response.text()}`);
}
const pdf = Buffer.from(await response.arrayBuffer());
await import("node:fs/promises").then(({ writeFile }) => writeFile("report.pdf", pdf));

For production, use a secret manager or environment configuration for API keys, validate that the response is a PDF before storing it, and handle non-2xx responses without treating their body as a document. Each provider may expose additional options for page format and rendering; use its current reference as the source of truth.

4. Options and configuration to compare

Need HTML2PDF.app DocRaptor What to verify
Page layout Documents page format and orientation. Configure using its PDF document options and supported CSS/engine behavior. Paper dimensions, portrait/landscape, margins, and the site’s print stylesheet.
Headers and footers Documented options include headers and footers. Evaluate the document’s supported print layout and engine options. Whether dynamic page numbers, repeated headers, and spacing match the required output.
Fonts and images Fonts and resources must be available to the renderer. Resources must be reachable and compatible with the chosen pipeline. Authentication, cross-origin access, font loading, redirects, and external-resource availability.
JavaScript content Chromium rendering; timing affects output. JavaScript settings and pipeline affect execution; JavaScript is disabled by default in documented options. Wait until data and fonts have loaded; don’t enable script paths without knowing which executes the page.
Protection Documentation lists encryption and permissions options. Check current document and account controls for your needs. Whether encryption, printing, copying, or access restrictions meet your requirements.
Async delivery callBackUrl callback includes base64 PDF data. Async status ID, polling, and optional callback. Callback authentication, retries, duplicate delivery, timeout handling, and storage of large payloads.

The specific parameter names and limits can change. Treat this table as a checklist, then map each requirement to the provider’s current official reference before shipping.

5. Async jobs, callbacks, and reliability

Use synchronous generation when the expected conversion comfortably fits your request budget and the caller can wait for PDF bytes. DocRaptor documents a 60-second synchronous limit and async jobs of up to 600 seconds. For longer work, its asynchronous status-ID workflow supports polling and optional callbacks. Verify current limits in the API reference.

HTML2PDF.app documents asynchronous generation with a callBackUrl. Its callback payload carries the PDF in base64, and its documentation says failed callback delivery may be retried up to three times. Make the receiver idempotent: identify each conversion, safely ignore or reconcile duplicate callbacks, validate the payload, and avoid generating multiple user-visible records for one job. Large base64 payloads are larger than their binary PDF and can stress request-body limits; persist them efficiently or use an appropriate queue.

  1. Create a durable job record before submitting work.
  2. Store the provider job or request identifier and the expected output owner.
  3. For callbacks, authenticate the sender using the provider’s supported method, validate the event, and make processing repeatable.
  4. For polling, use bounded backoff and stop at the documented job limit; do not poll continuously.
  5. Retry only transient failures, with a cap and an idempotency strategy to prevent duplicate documents or charges.
  6. Track conversion state, response status, elapsed time, output size, and sanitized error details.

6. Pricing and cost calculation

The services use different units, so compare your monthly document volume and typical PDF size together. Prices below were listed by the vendors when accessed on October 3, 2026; confirm current terms before purchase.

HTML2PDF.app listed plans

Plan Monthly price Credits Parallel conversions File-size note
Free $0 100 1 1 MB per PDF limit
Startup $9 1,000 3 Unlimited PDF size
Standard $25 5,000 10 Unlimited PDF size
Scale $39 10,000 20 Unlimited PDF size

HTML2PDF.app says a credit covers each 5 MB chunk of generated PDF and credits reset on the first day of each month. Its example says a 15 MB PDF consumes three credits. The Free plan’s separate 1 MB file cap still applies. For a rough estimate, divide each output size into 5 MB chunks using the vendor’s billing rule, then add those credits across your monthly workload. See the HTML2PDF.app pricing page.

DocRaptor listed plans

Plan Monthly price Documents Listed overage per document
Free $0 5 —
Basic $15 125 12¢
Professional $29 325 9¢
Premium $75 1,250 6¢
Max $149 5,000 3¢
Bronze $399 15,000 2.66¢
Silver $1,000 40,000 2.5¢
Enterprise Quoted Contact vendor Check terms

DocRaptor states that test documents are free and unlimited, though test PDFs are watermarked. Its overage documentation lists the rates shown above and a Gold rate of 2.25¢ per document. Gold was not included in the signup-page tier list accessed for this comparison, so confirm eligibility and current plan terms directly. Sources: DocRaptor signup and pricing and DocRaptor overage documentation.

Estimate your actual monthly cost

  1. Count expected successful production documents, not just requests initiated.
  2. For HTML2PDF.app, record output-size distribution and calculate credits in 5 MB chunks; include the Free-plan 1 MB cap if evaluating it.
  3. For DocRaptor, compare your document count to the plan quota and estimate any excess using the relevant overage rate.
  4. Include parallel-conversion needs, async work, storage or delivery costs in your own system, and retries.
  5. Recheck each vendor’s current price page and billing rules immediately before committing.

7. Data handling and privacy

HTML2PDF.app says generated PDFs are temporary and are not permanently stored, while noting that selected metadata and a supplied source URL may be retained in logs. DocRaptor offers hosted documents with public download URLs, and its API reference says retention depends on the account setting. A public URL can expose document contents to anyone who obtains it. Before sending confidential pages or HTML, review each vendor’s current retention, access, logging, processing, and deletion terms and configure access appropriately.

Also check the source page itself: rendering a URL may expose the service to whatever that URL serves, and private pages may require credentials or custom access behavior. Do not place secrets in URLs, HTML, or callback payloads unless your security design explicitly accounts for them.

8. Troubleshooting

Symptom Likely cause What to do
PDF is blank or content is missing The URL is not publicly reachable, scripts have not finished, or the page requires authentication. Check access from the rendering service’s environment; provide supported credentials or source HTML; wait for content to render and inspect provider errors.
Fonts or images are absent Resource URL is blocked, protected, redirected, slow, or unavailable to the renderer. Use reachable resource URLs, check redirects and access controls, and test font/image loading on a representative page.
Screen layout differs from expected print output Print CSS, media selection, paper settings, or engine behavior differs. Set intended page size and margins, check print-specific CSS and media mode, and compare both engines using the same inputs.
JavaScript content is missing or duplicated Capture occurred too early, JavaScript is disabled, or multiple execution paths ran. Identify the required engine and setting, wait for asynchronous data, and avoid enabling both DocRaptor JavaScript mechanisms without a reason.
Conversion times out Large or complex page, slow external resources, or synchronous duration limit. Reduce slow dependencies, simplify the source where possible, and use the asynchronous workflow for jobs that exceed the sync window.
Callback creates duplicate documents Delivery was retried or processing is not idempotent. Deduplicate by job/request ID, persist callback state, and make repeated events safe to process.
PDF response is actually an error Client saved a non-success response body as a PDF. Check HTTP status and content type before storing bytes; log a sanitized error body for diagnosis.
Unexpected bill or quota exhaustion HTML2PDF.app credits scale with file size; DocRaptor counts documents and applies overage charges. Measure output sizes and monthly volume, account for retries, and set application-side usage alerts or limits.
DocRaptor hosted link is accessible unexpectedly Hosted documents use public download URLs. Review account retention and access settings; avoid hosted delivery for sensitive files unless its access model meets your needs.

9. ScreenshotNeo as an alternative

If the actual requirement is a visual capture of a website as an image, consider ScreenshotNeo, a website screenshot API and MCP server from Yorker Media. It returns PNG, JPEG, WebP, or PDF from one GET request. For PDF output, the API supports paper size, margins, landscape, and page ranges. This is a screenshot-oriented alternative; choose a document-generation service when you need its document workflow or rendering behavior.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

Use ScreenshotNeo’s documentation for parameters and setup. It accepts cookie and consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits cost nothing, with page verdict and billing status in response headers. Its MCP server exposes take_screenshot, get_page_info, and capture_pdf to Claude, Cursor, and other MCP clients. The Free plan includes 1,000 screenshots per month without a card; paid plans start at $5 for 3,000 screenshots.

Sign up for ScreenshotNeo’s free plan: 1,000 screenshots a month, no card required.

10. Decision checklist

  • Choose HTML2PDF.app if Chromium is a fit for your pages and size-based credit billing fits your workload.
  • Choose DocRaptor if its Prince pipeline, document quota, async workflow, and current account terms fit your requirements.
  • Run the same representative pages through both before deciding on fidelity or speed; no comparative test is claimed here.
  • Model both PDF size and document count, then include overages, concurrency, and retries.
  • Review source access, callback security, document retention, and public-link exposure before sending sensitive content.

11. FAQ

Which service is better for a JavaScript-heavy page?

There is no universal answer in the available evidence. HTML2PDF.app documents Chromium; DocRaptor documents a Prince pipeline and JavaScript settings. Test your page and its loading sequence on both.

Can I convert HTML without publishing it at a public URL?

Both services document supplied HTML input. DocRaptor also documents HTML/XML content. Check current request size limits and supported fields before sending large or sensitive source documents.

Do their plan prices compare directly?

No. HTML2PDF.app bills credits by output size, while DocRaptor plans count documents and list overage prices. Estimate your own document count and size distribution.

Does either service guarantee that a PDF matches my browser exactly?

The reviewed documentation does not establish such a guarantee. Print CSS, engine differences, fonts, external assets, and script timing can all affect output.