DEV Community

Cover image for Converting An Image File Into PDF Using Python
Ethan
Ethan

Posted on โ€ข Originally published at ethan-dev.com

2 1 1 1 1

Converting An Image File Into PDF Using Python

Introduction

Hello! ๐Ÿ˜Ž
In this tutorial I will show you how you can easily convert an image file into a PDF file easily using Python.

I recently had to do this for work so I thought I'd make my own tool. ๐Ÿ˜ธ


Creating The Virtual Environment

First we need to create a virtual environment, this is a practice I like doing because it doesn't interfere with the system packages.

Open up a terminal and type the following to create the virtual environment:

python3 -m venv env
Enter fullscreen mode Exit fullscreen mode

Next active it with the following:

source env/bin/activate
Enter fullscreen mode Exit fullscreen mode

Next we need to install the libraries required for the project, open up a file called "requirements.txt" and fill it with the following:

pillow
reportlab
Enter fullscreen mode Exit fullscreen mode

Save and close the file and then run the following command to install the libraries:

pip install -r requirements.txt
Enter fullscreen mode Exit fullscreen mode

Great now we can start coding. ๐Ÿ˜Š


Creating The Converter

Now that we have the needed libraries installed we can now move onto actually coding the project. Open a file called "main.py" and first add the following imports:

from PIL import Image
from reportlab.pdfgen import canvas
Enter fullscreen mode Exit fullscreen mode

Once we have imported the above, we next need to create a function that actually does the converting:

def image_to_pdf(image_path, output_pdf):
    # Open the image file
    with Image.open(image_path) as img:
        # Get image dimensions
        img_width, img_height = img.size

        # Create a new PDF with the same dimensions as the image
        c = canvas.Canvas(output_pdf, pagesize=(img_width, img_height))
        c.drawInlineImage(image_path, 0, 0, width=img_width, height=img_height)

        # Save the PDF file
        c.save()
Enter fullscreen mode Exit fullscreen mode

I've decided to let the comments speak for themselves, basically we create a new PDF file with the same dimensions as the image passed.

Finally we can now called the main function:

if __name__ == "__main__":
    input_image = input("Enter the path of the image file: ")
    output_file = input("Enter the name for the output PDF file (e.g. output.pdf): ")

    image_to_pdf(input_image, output_file)
    print(f"PDF saved as {output_file}")
Enter fullscreen mode Exit fullscreen mode

Done! ๐Ÿ˜ The above can be run via the following command:

python main.py
Enter fullscreen mode Exit fullscreen mode

Enter an imput image and an output PDF and your image should be converted into a PDF file. ๐Ÿ˜†


Conclusion

In this tutorial I have provided a way on you can create a Python script that converts an image into a PDF file.

I hope you find this tutorial useful, and as always happy coding. ๐Ÿ˜Ž

As always you can find the source code for the above at my Github.
https://github.com/ethand91/image-to-pdf


Like my work? I post about a variety of topics, if you would like to see more please like and follow me.
Also I love coffee.

โ€œBuy Me A Coffeeโ€

If you are looking to learn Algorithm Patterns to ace the coding interview I recommend the following course

Heroku

This site is built on Heroku

Join the ranks of developers at Salesforce, Airbase, DEV, and more who deploy their mission critical applications on Heroku. Sign up today and launch your first app!

Get Started

Top comments (2)

Collapse
 
dshaw0004 profile image
Dipankar Shaw โ€ข

You can just use PILLOW to convert an image into pdf.
I will try your technique to compare both PDFs.

Collapse
 
ethand91 profile image
Ethan โ€ข

I guess you could. Sure please compare and let me know the results.

The Most Contextual AI Development Assistant

Pieces.app image

Our centralized storage agent works on-device, unifying various developer tools to proactively capture and enrich useful materials, streamline collaboration, and solve complex problems through a contextual understanding of your unique workflow.

๐Ÿ‘ฅ Ideal for solo developers, teams, and cross-company projects

Learn more