Skip to content

Comparison

A Java and .NET alternative to iText

iText is a well-established PDF library for Java and .NET. It provides deep control over PDF internals: forms, digital signatures, encryption, and low-level document structure. It also requires a commercial license for any closed-source or SaaS use, and its primary API is a drawing model rather than HTML rendering. PDFPipe is an HTTP call that renders real HTML with a browser and returns a PDF, with predictable per-document pricing and no license negotiation.

iText versus a dedicated PDF API

PDFPipeiText
Template formatHTML + CSSJava/C# drawing API
Renders HTMLYes, full browser engineVia iText pdfHTML add-on only
LicenseNo per-seat licenseCommercial license required for SaaS/closed-source
CSS supportCompletePartial (pdfHTML add-on)
JavaScriptRuns before captureNot supported
Web fontsAny URL, loaded automaticallyMust embed manually
Pricing modelPer document (flat)Per developer seat or enterprise deal
LanguagesAny (HTTP call)Java, .NET

The licensing problem

iText 7 is dual-licensed: AGPL for open-source projects and a commercial license for everything else. Any SaaS product, closed-source application, or company that does not want to open-source its code needs a commercial agreement. License costs are negotiated per seat or per project and are not publicly listed. PDFPipe charges per document rendered. The first 100 documents a month are free; paid plans start at $19. No negotiations, no per-developer fees.

HTML rendering in iText

iText does offer an HTML-to-PDF path through the pdfHTML add-on, but it is a separate module with its own license, its CSS support is partial, and JavaScript is not executed. It is a layout engine that reads HTML, not a browser renderer. PDFPipe uses an actual browser: the same rendering engine behind billions of web pages, with full CSS support and JavaScript execution.

Spring Boot example

java
// Spring Boot controller: no iText dependency required.
import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;

@RestController
public class PdfController {

    private final RestTemplate rest = new RestTemplate();

    @GetMapping(value = "/invoices/{id}.pdf", produces = "application/pdf")
    public ResponseEntity<byte[]> invoice(@PathVariable String id) {
        String html = buildInvoiceHtml(id); // your template method

        HttpHeaders headers = new HttpHeaders();
        headers.setBearerAuth(System.getenv("PDFPIPE_API_KEY"));
        headers.setContentType(MediaType.APPLICATION_JSON);

        var body = Map.of(
            "html", html,
            "options", Map.of("format", "A4")
        );

        ResponseEntity<byte[]> resp = rest.exchange(
            "https://api.pdfpipe.xyz/v1/pdf",
            HttpMethod.POST,
            new HttpEntity<>(body, headers),
            byte[].class
        );

        return ResponseEntity.ok()
            .contentType(MediaType.APPLICATION_PDF)
            .header("Content-Disposition", "attachment; filename=invoice-" + id + ".pdf")
            .body(resp.getBody());
    }
}

When to keep iText

iText is the right tool when you need low-level PDF operations that go beyond rendering: filling AcroForms, applying digital signatures, encrypting existing PDFs, or merging and splitting documents. For generating PDFs from HTML templates, a browser-based render API produces better output with far less code and no license cost.

Full Java and Spring Boot examples on the Java guide and Spring Boot guide.

See pricing →

Competitor pricing and features on this page were last reviewed on 21 September 2026. Vendors change their plans, so check their own pricing page before deciding. If something here is out of date, tell us and we will correct it.