PDFPipe

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 500 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 →