Convert Image to pdf in aspose words for java

Hello Team

I have tried the below which I found from this forum to convert image files to pdf files using aspose words. But it’s generating only blank pdf file.

Please check it from your end, I have attached two of the image files from which I’m getting a blank pdf files.

Below is the method that I have using to convert.

public static void convertImageToPdf(File inputFileName, File outputFileName) throws Exception
{
    // Create Aspose.Words.Document and DocumentBuilder.
    // The builder makes it simple to add content to the document.
    com.aspose.words.Document doc = new com.aspose.words.Document();
    DocumentBuilder builder = new DocumentBuilder(doc);

    // Load images from the disk using the approriate reader.
    // The file formats that can be loaded depends on the image readers available on the machine.
    ImageInputStream iis = ImageIO.createImageInputStream(inputFileName);
    ImageReader reader = ImageIO.getImageReaders(iis).next();
    reader.setInput(iis, false);

    try
    {
        // Get the number of frames in the image.
        int framesCount = reader.getNumImages(true);

        // Loop through all frames.
        for (int frameIdx = 0; frameIdx < framesCount; frameIdx++)
        {
            // Insert a section break before each new page, in case of a multi-frame image.
            if (frameIdx != 0)
                builder.insertBreak(BreakType.SECTION_BREAK_NEW_PAGE);

            // Select active frame.
            BufferedImage image = reader.read(frameIdx);

            // We want the size of the page to be the same as the size of the image.
            // Convert pixels to points to size the page to the actual image size.
            PageSetup ps = builder.getPageSetup();

            ps.setPageWidth(ConvertUtil.pixelToPoint(image.getWidth()));
            ps.setPageHeight(ConvertUtil.pixelToPoint(image.getHeight()));

            // Insert the image into the document and position it at the top left corner of the page.
            builder.insertImage(
                    image,
                    RelativeHorizontalPosition.PAGE,
                    0,
                    RelativeVerticalPosition.PAGE,
                    0,
                    ps.getPageWidth(),
                    ps.getPageHeight(),
                    WrapType.NONE);
        }
    }

    finally {
        if (iis != null) {
            iis.close();
            reader.dispose();
        }
    }

    // Save the document to PDF.
    doc.save(outputFileName.getAbsolutePath());
}

Thanks,
Parth.

Hi Parth,

Thanks for your inquiry. The problem occurs because the size of image is bigger than max allowed size of MS Word page. Please use the following code snippet to achieve your requirements. Hope this helps you. Please let us know if you have any more queries.

/**
 * Converts an image to PDF using Aspose.Words for Java.
 *
 * @param inputFileName File name of input image file.
 * @param outputFileName Output PDF file name.
 */
public static void convertImageToPdf(String inputFileName, String outputFileName) throws Exception
{
    // Create Aspose.Words.Document and DocumentBuilder.
    // The builder makes it simple to add content to the document.
    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);
    // Load images from the disk using the approriate reader.
    // The file formats that can be loaded depends on the image readers available on the machine.
    ImageInputStream iis = ImageIO.createImageInputStream(new File(inputFileName));
    ImageReader reader = ImageIO.getImageReaders(iis).next();
    reader.setInput(iis, false);
    try
    {
        // Get the number of frames in the image.
        int framesCount = reader.getNumImages(true);
        // Loop through all frames.
        for (int frameIdx = 0; frameIdx < framesCount; frameIdx++)
        {
            // Insert a section break before each new page, in case of a multi-frame image.
            if (frameIdx != 0)
                builder.insertBreak(BreakType.SECTION_BREAK_NEW_PAGE);
            // Select active frame.
            BufferedImage image = reader.read(frameIdx);
            // Max page size
            double maxPageHeight = 1584;
            double maxPageWidth = 1584;
            double currentImageHeight = ConvertUtil.pixelToPoint(image.getHeight());
            double currentImageWidth = ConvertUtil.pixelToPoint(image.getWidth());
            if (currentImageWidth >= maxPageWidth || currentImageHeight >= maxPageHeight)
            {
                // Get max image size.
                double[] size = CalculateImageSize(image, maxPageHeight, maxPageWidth, currentImageHeight, currentImageWidth);
                currentImageWidth = size[0];
                currentImageHeight = size[1];
            }
            // We want the size of the page to be the same as the size of the image.
            // Convert pixels to points to size the page to the actual image size.
            PageSetup ps = builder.getPageSetup();
            ps.setPageWidth(currentImageWidth);
            ps.setPageHeight(currentImageHeight);
            // Insert the image into the document and position it at the top left corner of the page.
            Shape shape = builder.insertImage(
                    image,
                    RelativeHorizontalPosition.PAGE,
                    0,
                    RelativeVerticalPosition.PAGE,
                    0,
                    ps.getPageWidth(),
                    ps.getPageHeight(),
                    WrapType.NONE);
        }
    }
    finally {
        if (iis != null) {
            iis.close();
            reader.dispose();
        }
    }
    // Save the document to PDF.
    doc.save(outputFileName);
}
public static double[] CalculateImageSize(BufferedImage img, double containerHeight, double containerWidth, double targetHeight, double targetWidth) throws Exception {
    // Calculate width and height
    targetHeight = containerHeight;
    targetWidth = containerWidth;
    // Get size of an image
    double imgHeight = ConvertUtil.pixelToPoint(img.getHeight());
    double imgWidth = ConvertUtil.pixelToPoint(img.getWidth());
    if (imgHeight < targetHeight && imgWidth < targetWidth)
    {
        targetHeight = imgHeight;
        targetWidth = imgWidth;
    }
    else
    {
        // Calculate size of an image in the document
        double ratioWidth = imgWidth / targetWidth;
        double ratioHeight = imgHeight / targetHeight;
        if (ratioWidth > ratioHeight)
            targetHeight = (targetHeight  (ratioHeight / ratioWidth));
        else
            targetWidth = (targetWidth  (ratioWidth / ratioHeight));
    }
    double[] size = new double[2];
    size[0] = targetWidth; //width
    size[1] = targetHeight; //height
    return(size);
}

Thanks Tahir for your quick response.

I’m getting compilation error on

AsposeWords obj = new AsposeWords();

and

resizeLargeImage(shape);

Can you provide me reference to AsposeWords class and a resizeLargeImage(shape) method. So I can test the code you provided to me.

Thanks in advance

Hi Parth,

Please accept my apologies for your inconvenience.

There is no need of these two lines of code. I have removed these two lines of code from my previous post. Please check the modified code from here and let us know if yous still face any issue.

Thanks Tahir,

This works perfect.

Hi Parth,

Thanks for your feedback. Please feel free to ask if you have any question about Aspose.Words, we will be happy to help you.