Java function to create a PDF document with an embedded image

In this post I will show a Java function that pastes an image into a brand new PDF. The input and output of this function will be Base64 encoded.

Why did I need it? The client requested that the images attached to the case be converted to PDF in order to be sent to a service that only accepts PDF documents.

/*
 * Params:
 *         strImgB64 - String that represents a Base64-encoded image
 *
 * Imports:
 *         java.io.ByteArrayOutputStream
 *         com.lowagie.text.Document
 *         com.lowagie.text.pdf.PdfWriter
 *         com.lowagie.text.Image
 *
 * Returns:
 *         A string that represents a Base64-encoded PDF document, "-1" if error
 */
String pdfStream = "";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Document document = new Document();
try{
  PdfWriter writer = PdfWriter.getInstance(document,baos);
  writer.setStrictImageSequence(true);
  document.open();
  Image jpg = Image.getInstance(Base64Util.decodeToByteArray(strImgB64));
  
  // Optional: Scale the image to cover the entire page
  float scaler = ((document.getPageSize().getWidth() - document.leftMargin() - document.rightMargin()) / jpg.getWidth()) * 100;
  jpg.scalePercent(scaler);
  
  document.add(jpg);
  document.close();
  pdfStream = Base64Util.encodeToString(baos.toByteArray());
  baos.flush();
  return pdfStream;
}catch(Exception e){
  return "-1";
}

Let's test this function using Base64-encoded image which is just a red dot.

ImgB64toPDF("iVBORw0KGgoAAAANSUhEUgAAAAUA AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO 9TXL0Y4OHwAAAABJRU5ErkJggg==")

The output will be as follows:

JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PC9Db2xvclNwYWNlL0RldmljZUdyYXkvU3VidHlwZS9JbWFnZS9IZWlnaHQgNS9GaWx0ZXIvRmxhdGVEZWNvZGUvVHlwZS9YT2JqZWN0L1dpZHRoIDUvTGVuZ3RoIDE5L0JpdHNQZXJDb21wb25lbnQgOD4+c3RyZWFtCnicY/j//z/Df1QA4jMAABAXFOwKZW5kc3RyZWFtCmVuZG9iagoyIDAgb2JqCjw8L0NvbG9yU3BhY2UvRGV2aWNlUkdCL1N1YnR5cGUvSW1hZ2UvSGVpZ2h0IDUvRmlsdGVyL0ZsYXRlRGVjb2RlL1R5cGUvWE9iamVjdC9XaWR0aCA1L1NNYXNrIDEgMCBSL0xlbmd0aCAyMi9CaXRzUGVyQ29tcG9uZW50IDg+PnN0cmVhbQp4nPv///9/BgYoQmYTg1D1AgD2jCDgCmVuZHN0cmVhbQplbmRvYmoKMyAwIG9iago8PC9GaWx0ZXIvRmxhdGVEZWNvZGUvTGVuZ3RoIDY3Pj5zdHJlYW0KeJwr5CpUMDUyVjAAQhBtbKZgZGGskJyroJ+Zm26o4JKvEMgVyFXI5RTCBZSzMDBTCEnhMlDQBSkGslxDgLIACi0OuAplbmRzdHJlYW0KZW5kb2JqCjUgMCBvYmoKPDwvQ29udGVudHMgMyAwIFIvVHlwZS9QYWdlL1Jlc291cmNlczw8L1Byb2NTZXQgWy9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUldL1hPYmplY3Q8PC9pbWcxIDIgMCBSL2ltZzAgMSAwIFI+Pj4+L1BhcmVudCA0IDAgUi9NZWRpYUJveFswIDAgNTk1IDg0Ml0+PgplbmRvYmoKNCAwIG9iago8PC9LaWRzWzUgMCBSXS9UeXBlL1BhZ2VzL0NvdW50IDEvSVRYVCgyLjEuNyk+PgplbmRvYmoKNiAwIG9iago8PC9UeXBlL0NhdGFsb2cvUGFnZXMgNCAwIFI+PgplbmRvYmoKNyAwIG9iago8PC9Nb2REYXRlKEQ6MjAyMjAyMjQxODU4MjgtMDUnMDAnKS9DcmVhdGlvbkRhdGUoRDoyMDIyMDIyNDE4NTgyOC0wNScwMCcpL1Byb2R1Y2VyKGlUZXh0IDIuMS43IGJ5IDFUM1hUKT4+CmVuZG9iagp4cmVmCjAgOAowMDAwMDAwMDAwIDY1NTM1IGYgCjAwMDAwMDAwMTUgMDAwMDAgbiAKMDAwMDAwMDE4NSAwMDAwMCBuIAowMDAwMDAwMzY5IDAwMDAwIG4gCjAwMDAwMDA2NzUgMDAwMDAgbiAKMDAwMDAwMDUwMiAwMDAwMCBuIAowMDAwMDAwNzM4IDAwMDAwIG4gCjAwMDAwMDA3ODMgMDAwMDAgbiAKdHJhaWxlcgo8PC9JbmZvIDcgMCBSL0lEIFs8ZTI1YmQyMmJjMWU5ZWI5OGNhNTVmZjBmZmFlMDhhOTM+PDdjZmRkNWNlMTZhNTZlOWQwYTZjZGViNjMzN2Q5NTlmPl0vUm9vdCA2IDAgUi9TaXplIDg+PgpzdGFydHhyZWYKOTA1CiUlRU9GCg==

You can use any Base64 decoder to get the PDF document (like base64.guru).

Reference:

- https://collaborate.pega.com/discussion/convert-any-type-image-pdf

Comments

Popular posts from this blog