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
| PDFPipe | iText | |
|---|---|---|
| Template format | HTML + CSS | Java/C# drawing API |
| Renders HTML | Yes, full browser engine | Via iText pdfHTML add-on only |
| License | No per-seat license | Commercial license required for SaaS/closed-source |
| CSS support | Complete | Partial (pdfHTML add-on) |
| JavaScript | Runs before capture | Not supported |
| Web fonts | Any URL, loaded automatically | Must embed manually |
| Pricing model | Per document (flat) | Per developer seat or enterprise deal |
| Languages | Any (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
// 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 →