EvoPdf Next · Self-hosted Service

The EvoPdf Next engine, for Java, Python, Node.js and anything that speaks HTTP

The .NET library runs natively on Windows, Linux and macOS. The Self-hosted Service wraps the same engine in a container you run on your own infrastructure and exposes it as a REST API, with thin client libraries for Java, Python, Node.js and .NET. Same rendering, same PDF/UA and PDF/A output, same perpetual license — and your documents never leave your network.

Draft page. Image name, port, endpoint paths, client package names and method names below are placeholders until the service ships.
How it fits

One engine, two ways to call it

If you write .NET, reference the NuGet package and call the library in-process. If you write anything else, run the service next to your application and call it over HTTP. The service is not a workaround for a missing platform — the library already runs everywhere — it is the same converter made reachable from other languages.

Your application

  • Java, Python, Node.js, .NET — or curl, PowerShell, a CI job
  • Sends HTML, a URL, or a Word / Excel / Markdown file plus options
  • Receives the PDF bytes

EvoPdf Next Service (your server)

  • One Docker container, Linux x64 / ARM64 or Windows
  • Every EvoPdf Next component behind REST endpoints
  • Licensed with your EvoPdf key; no external calls
Step 1

Run it with Docker

Pull the image, pass your license key, expose a port. Without a key the service runs in demo mode with watermarked output, exactly like the library.

$docker pull evopdf/next-service:latest
$docker run -d -p 8080:8080 -e EVOPDF_LICENSE_KEY=... --name evopdf-service evopdf/next-service
$curl http://localhost:8080/health

The image is built on the official Microsoft ASP.NET Core runtime and carries the same Linux dependencies as the library's Dockerfile. Run several replicas behind a load balancer to scale; conversions are stateless.

Also

  • docker-compose and Kubernetes manifests in the documentation
  • Windows container image for Windows Server hosts
  • Bind an internal port only; the service has no authentication of its own — put it behind your gateway
  • Configuration by environment variables: timeouts, concurrency, maximum request size
Step 2

Call it from your language

The client libraries are thin: they build the HTTP request, send your options, and hand back the PDF bytes. Anything the .NET API can set — page size, margins, headers and footers, PDF/UA and PDF/A — is a field in the options object.

EvoPdfClient client = new EvoPdfClient("http://localhost:8080");

var options = new HtmlToPdfOptions();
options.setPageSize(PageSize.A4);
options.setPdfStandard(PdfStandard.PDF_UA_2);

byte[] pdf = client.htmlToPdf().convertUrl("https://example.com", options);
Files.write(Path.of("page.pdf"), pdf);

Dependency: com.evopdf:evopdf-next-client. Java 11+.

from evopdf_next import EvoPdfClient, HtmlToPdfOptions

client = EvoPdfClient("http://localhost:8080")
options = HtmlToPdfOptions(page_size="A4", pdf_standard="PDF/UA-2")

pdf = client.html_to_pdf.convert_url("https://example.com", options)
open("page.pdf", "wb").write(pdf)

Package: pip install evopdf-next. Python 3.9+, sync and async clients.

import { EvoPdfClient } from "@evopdf/next-client";

const client = new EvoPdfClient("http://localhost:8080");

const pdf = await client.htmlToPdf.convertUrl("https://example.com", {
  pageSize: "A4",
  pdfStandard: "PDF/UA-2",
});
await fs.promises.writeFile("page.pdf", pdf);

Package: npm install @evopdf/next-client. Node 18+, TypeScript types included.

var client = new EvoPdfClient("http://localhost:8080");

byte[] pdf = await client.HtmlToPdf.ConvertUrlAsync("https://example.com",
    new HtmlToPdfOptions { PageSize = PageSize.A4, PdfStandard = PdfStandard.PdfUa2 });

File.WriteAllBytes("page.pdf", pdf);

For .NET applications that prefer a shared conversion server over an in-process library — for example many small services sharing one licensed engine. Package: EvoPdf.Next.Client.

# Convert a URL
curl -X POST http://localhost:8080/v1/html-to-pdf \
  -H "Content-Type: application/json" \
  -d '{{"url": "https://example.com", "pageSize": "A4", "pdfStandard": "PDF/UA-2"}}' \
  -o page.pdf

# Convert an HTML string
curl -X POST http://localhost:8080/v1/html-to-pdf \
  -H "Content-Type: application/json" \
  -d '{{"html": "<h1>Hello</h1>", "baseUrl": "https://example.com/"}}' \
  -o page.pdf

# Convert a Word document
curl -X POST http://localhost:8080/v1/word-to-pdf -F "file=@report.docx" -o report.pdf

One endpoint per component: /v1/html-to-pdf, /v1/html-to-image, /v1/word-to-pdf, /v1/excel-to-pdf, /v1/pdf-to-text, … The OpenAPI description is served by the container at /openapi.json.

Licensing

Same license as the library

The service is licensed with the EVO PDF Toolkit key. A Company License covers any number of service instances and any number of client applications, in any language, on your own infrastructure. There is no per-conversion fee and no hosted component to subscribe to.

Not a cloud API

The service runs where you run it. HTML, documents and generated PDFs stay inside your network, which is usually the reason a team cannot use a hosted conversion API in the first place. If you do want a hosted option, that is a separate product; this page is about the self-hosted one.

Not shipping yet

The .NET library is available today on NuGet for Windows, Linux and macOS. The Self-hosted Service and its clients are in development; if you want to be told when the first image is published, write to us.