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
Post a Comment