eBook – Guide Spring Cloud – NPI EA (cat=Spring Cloud)
announcement - icon

Let's get started with a Microservice Architecture with Spring Cloud:

>> Join Pro and download the eBook

eBook – Mockito – NPI EA (tag = Mockito)
announcement - icon

Mocking is an essential part of unit testing, and the Mockito library makes it easy to write clean and intuitive unit tests for your Java code.

Get started with mocking and improve your application tests using our Mockito guide:

Download the eBook

eBook – Java Concurrency – NPI EA (cat=Java Concurrency)
announcement - icon

Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.

Get started with understanding multi-threaded applications with our Java Concurrency guide:

>> Download the eBook

eBook – Reactive – NPI EA (cat=Reactive)
announcement - icon

Spring 5 added support for reactive programming with the Spring WebFlux module, which has been improved upon ever since. Get started with the Reactor project basics and reactive programming in Spring Boot:

>> Join Pro and download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Jackson – NPI EA (cat=Jackson)
announcement - icon

Do JSON right with Jackson

Download the E-book

eBook – HTTP Client – NPI EA (cat=Http Client-Side)
announcement - icon

Get the most out of the Apache HTTP Client

Download the E-book

eBook – Maven – NPI EA (cat = Maven)
announcement - icon

Get Started with Apache Maven:

Download the E-book

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

eBook – RwS – NPI EA (cat=Spring MVC)
announcement - icon

Building a REST API with Spring?

Download the E-book

Course – LS – NPI EA (cat=Jackson)
announcement - icon

Get started with Spring and Spring Boot, through the Learn Spring course:

>> LEARN SPRING
Course – RWSB – NPI EA (cat=REST)
announcement - icon

Explore Spring Boot 3 and Spring 6 in-depth through building a full REST API with the framework:

>> The New “REST With Spring Boot”

Course – LSS – NPI EA (cat=Spring Security)
announcement - icon

Yes, Spring Security can be complex, from the more advanced functionality within the Core to the deep OAuth support in the framework.

I built the security material as two full courses - Core and OAuth, to get practical with these more complex scenarios. We explore when and how to use each feature and code through it on the backing project.

You can explore the course here:

>> Learn Spring Security

Course – LSD – NPI EA (tag=Spring Data JPA)
announcement - icon

Spring Data JPA is a great way to handle the complexity of JPA with the powerful simplicity of Spring Boot.

Get started with Spring Data JPA through the guided reference course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (cat=Spring Boot)
announcement - icon

Refactor Java code safely — and automatically — with OpenRewrite.

Refactoring big codebases by hand is slow, risky, and easy to put off. That’s where OpenRewrite comes in. The open-source framework for large-scale, automated code transformations helps teams modernize safely and consistently.

Each month, the creators and maintainers of OpenRewrite at Moderne run live, hands-on training sessions — one for newcomers and one for experienced users. You’ll see how recipes work, how to apply them across projects, and how to modernize code with confidence.

Join the next session, bring your questions, and learn how to automate the kind of work that usually eats your sprint time.

Course – LJB – NPI EA (cat = Core Java)
announcement - icon

Code your way through and build up a solid, practical foundation of Java:

>> Learn Java Basics

1. Overview

Java provides several libraries and APIs for working with XML and PDF documents. Converting XML to PDF in Java involves parsing the XML data, applying styles and formatting, and generating the PDF output.

This article explores different methods and libraries to convert XML to PDF in Java.

2. Understanding the Conversion Process

Before discussing implementation details, let’s highlight the essential steps to convert XML to PDF. This process typically entails two primary steps:

  1. The first step is XML parsing, where the XML content is analyzed, and its structure and textual data are extracted. In Java, developers have access to various XML parsing libraries such as DOM (Document Object Model), SAX (Simple API for XML), and StAX (Streaming API for XML).
  2. The second step involves PDF generation. This step includes creating PDF components such as paragraphs, tables, images, and other elements. These components are then organized and formatted according to the structure defined within the XML document.

3. Using Apache FOP (Formatting Objects Processor)

Apache FOP is a robust open-source library for converting XML data into various output formats, including PDF. Furthermore, FOP transforms XML content according to XSL-FO stylesheets, ultimately generating high-quality PDF documents.

3.1. How Apache FOP Works

Apache FOP works through the following key stages:

  • XML Parsing: Apache FOP begins by parsing the input XML data. This process involves extracting the structure and content of the XML document, which typically represents the data to be presented in the final PDF output.
  • XSL-FO Transformation: FOP applies an XSL-FO stylesheet to format XML elements into corresponding PDF elements like paragraphs, tables, and images, ensuring adherence to specified styles and layout rules.
  • PDF Rendering: After transforming the content into XSL-FO format, Apache FOP renders it into a visually appealing PDF document that accurately reflects the original XML content.
  • Output Generation: Finally, FOP generates a standalone PDF file encapsulating the formatted content, ready for saving, display, or distribution, suitable for various printing and viewing purposes.

3.2. Example: Converting XML to PDF using Apache FOP

To use the Apache FOP library and its features for converting XML to PDF, it is necessary to integrate the Apache FOP dependency into our project’s build configuration.

If we’re using Maven, we can achieve this by including the FOP dependency in our pom.xml file:

<dependency>
    <groupId>org.apache.xmlgraphics</groupId>
    <artifactId>fop</artifactId>
    <version>2.9</version>
</dependency>

Now, let’s create a method to convert XML to PDF using Apache FOP in Java:

void convertXMLtoPDFUsingFop(String xmlFilePath, String xsltFilePath, String pdfFilePath) throws Exception {
    FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());
    FOUserAgent foUserAgent = fopFactory.newFOUserAgent();

    try (OutputStream out = new BufferedOutputStream(Files.newOutputStream(new File(pdfFilePath).toPath()))) {
        Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, out);
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer(new StreamSource(new File(xsltFilePath)));
        Source src = new StreamSource(new File(xmlFilePath));
        Result res = new SAXResult(fop.getDefaultHandler());
        transformer.transform(src, res);
    }
}

The above example highlights the key steps involved in the conversion process, which include:

  • Initialization: we first initialize Apache FOP by creating instances of FopFactory and FOUserAgent.
  • Output Stream: we specify the output stream for the resulting PDF file.
  • FOP Instance Creation: a new Fop instance is created using the FopFactory, specifying the PDF output format.
  • XSLT Transformation: we create a Transformer instance from the XSLT stylesheet specified in the xsltFilePath parameter.
  • Transformation Application: the XML data defined in the xmlFilePath parameter is transformed using the XSLT stylesheet, and the resulting FO (Formatting Object) is sent to the FOP instance for rendering.
  • Output Generation: finally, the method generates the PDF output and saves it to the specified file path provided in the pdfFilePath parameter.

4. Using IText Library

The iText library is a robust and flexible solution for generating and managing PDF files. Its comprehensive capabilities enable seamless conversion of XML content into PDF documents, offering tailored customization and adaptability.

4.1. How IText Works

IText works through the following key stages:

  • HTML to PDF Conversion: iText converts XML data to PDF using HTML as an intermediate format. XML is transformed into HTML, leveraging iText’s HTML parsing capabilities for seamless integration into PDF documents.
  • XML Parsing and Rendering: iText parses XML content and renders it directly into PDF. It supports various XML formats like XHTML, SVG, and MathML and can apply CSS styles for precise control over layout and appearance.
  • PDF Generation: After parsing, iText generates PDF elements such as text, images, and tables. Developers can customize the output with headers, footers, and other elements, ensuring compliance with PDF standards for printing and viewing.

4.2. Converting XML to PDF using iText in Java

To use the iText library for PDF generation in Java, We must incorporate the iTextPDF dependency in our project configuration. For Maven, we can add the iText dependency to our pom.xml file:

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.3</version>
</dependency>

Here’s a simple example demonstrating how to convert XML to PDF using iText in Java:

public static void convertXMLtoPDFUsingIText(String xmlFilePath, String pdfFilePath) throws Exception {
    try (FileOutputStream outputStream = new FileOutputStream(pdfFilePath)) {
        Document document = new Document();
        PdfWriter.getInstance(document, outputStream);
        document.open();

        String xmlContent = new String(Files.readAllBytes(Paths.get(xmlFilePath)));
        document.add(new Paragraph(xmlContent));
        document.close();
    }
}

The above example illustrates a straightforward method for converting XML to PDF using iText in Java. First, we create a new PDF document object. Next, we open the document to write content. Following this, we read the XML content from the specified file path and embed it into the PDF document.

Finally, we close the document and the output stream, ensuring the saved PDF file contains the XML content in a structured format.

5. Conclusion

Exploring XML to PDF conversion with FOP and iText in this article has provided us with valuable knowledge and practical skills. Mastery of these techniques enables us to efficiently convert XML data into refined PDF documents, enhancing the functionality of our Java applications.

The code backing this article is available on GitHub. Once you're logged in as a Baeldung Pro Member, start learning and coding on the project.
Baeldung Pro – NPI EA (cat = Baeldung)
announcement - icon

Baeldung Pro comes with both absolutely No-Ads as well as finally with Dark Mode, for a clean learning experience:

>> Explore a clean Baeldung

Once the early-adopter seats are all used, the price will go up and stay at $33/year.

eBook – HTTP Client – NPI EA (cat=HTTP Client-Side)
announcement - icon

The Apache HTTP Client is a very robust library, suitable for both simple and advanced use cases when testing HTTP endpoints. Check out our guide covering basic request and response handling, as well as security, cookies, timeouts, and more:

>> Download the eBook

eBook – Java Concurrency – NPI EA (cat=Java Concurrency)
announcement - icon

Handling concurrency in an application can be a tricky process with many potential pitfalls. A solid grasp of the fundamentals will go a long way to help minimize these issues.

Get started with understanding multi-threaded applications with our Java Concurrency guide:

>> Download the eBook

eBook – Java Streams – NPI EA (cat=Java Streams)
announcement - icon

Since its introduction in Java 8, the Stream API has become a staple of Java development. The basic operations like iterating, filtering, mapping sequences of elements are deceptively simple to use.

But these can also be overused and fall into some common pitfalls.

To get a better understanding on how Streams work and how to combine them with other language features, check out our guide to Java Streams:

>> Join Pro and download the eBook

eBook – Persistence – NPI EA (cat=Persistence)
announcement - icon

Working on getting your persistence layer right with Spring?

Explore the eBook

Course – LS – NPI EA (cat=REST)

announcement - icon

Get started with Spring Boot and with core Spring, through the Learn Spring course:

>> CHECK OUT THE COURSE

Partner – Moderne – NPI EA (tag=Refactoring)
announcement - icon

Modern Java teams move fast — but codebases don’t always keep up. Frameworks change, dependencies drift, and tech debt builds until it starts to drag on delivery. OpenRewrite was built to fix that: an open-source refactoring engine that automates repetitive code changes while keeping developer intent intact.

The monthly training series, led by the creators and maintainers of OpenRewrite at Moderne, walks through real-world migrations and modernization patterns. Whether you’re new to recipes or ready to write your own, you’ll learn practical ways to refactor safely and at scale.

If you’ve ever wished refactoring felt as natural — and as fast — as writing code, this is a good place to start.

eBook Jackson – NPI EA – 3 (cat = Jackson)