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.
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
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.
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
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.
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.