In order to embed an image in a PDF generated by Flying Saucer,
1)  Convert the image to a base64 encoded string.
Path path = Paths.get("src/main/resources/static/images/mastercard.png");
String base64Image = convertToBase64(path);
Function to convert image stored in a path like shown above, to a base64 encoded string
private String convertToBase64(Path path) {
    byte[] imageAsBytes = new byte[0];
    try {
      Resource resource = new UrlResource(path.toUri());
      InputStream inputStream = resource.getInputStream();
      imageAsBytes = IOUtils.toByteArray(inputStream);
    } catch (IOException e) {
      System.out.println("\n File read Exception");
    }
    return Base64.getEncoder().encodeToString(imageAsBytes);
  }
2) Set the base64 encoded image in the thymeleaf context
    Context context = new Context();
    String image = "data:image/png;base64, " + base64Image;
    context.setVariable("image",  image);
    String html = templateEngine.process("template", context);
3) In HTML, set the value of image as shown below:
<img th:src="${image}" style="width: 200px; height=100px"/>
4) Finally, render the HTML template to PDF
  ITextRenderer renderer = new ITextRenderer();
  renderer.setDocumentFromString(html); // html -> String created in Step 2
  renderer.layout();
  final ByteArrayOutputStream baos = new ByteArrayOutputStream();
  renderer.createPDF(baos)
Now you have the byteArrayOutputStream of the generated PDF, with which you can choose to store them to a file server or serve it to a client in a format of your choice.