Is there any practical way to create a PDF from a list of images files, using Python?
In Perl I know that module. With it I can create a PDF in just 3 lines:
use PDF::FromImage; ... my $pdf = PDF::FromImage->new; $pdf->load_images(@allPagesDir); $pdf->write_file($bookName . '.pdf');
I need to do something very similar to this, but in Python. I know the pyPdf module, but I would like something simple.
If you came through Google, here's the code:
from fpdf import FPDF from PIL import Image def makePdf(pdfFileName, listPages, dir = ''): if (dir): dir += "/" cover = Image.open(dir + str(listPages) + ".jpg") width, height = cover.size pdf = FPDF(unit = "pt", format = [width, height]) for page in listPages: pdf.add_page() pdf.image(dir + str(page) + ".jpg", 0, 0) pdf.output(dir + pdfFileName + ".pdf", "F")
This question is tagged with
~ Asked on 2014-12-06 02:04:23
Install FPDF for Python:
pip install fpdf
Now you can use the same logic:
from fpdf import FPDF pdf = FPDF() # imagelist is the list with all image filenames for image in imagelist: pdf.add_page() pdf.image(image,x,y,w,h) pdf.output("yourfile.pdf", "F")
~ Answered on 2014-12-06 03:30:26
The best method to convert multiple images to PDF I have tried so far is to use
PIL purely. It's quite simple yet powerful:
from PIL import Image im1 = Image.open("/Users/apple/Desktop/bbd.jpg") im2 = Image.open("/Users/apple/Desktop/bbd1.jpg") im3 = Image.open("/Users/apple/Desktop/bbd2.jpg") im_list = [im2,im3] pdf1_filename = "/Users/apple/Desktop/bbd1.pdf" im1.save(pdf1_filename, "PDF" ,resolution=100.0, save_all=True, append_images=im_list)
append_images to the list of images which you want to add.
You might encounter the
AttributeError: 'JpegImageFile' object has no attribute 'encoderinfo'. The solution is here Error while saving multiple JPEGs as a multi-page PDF
Note:Install the newest
PIL to make sure
save_all argument is available for PDF.
~ Answered on 2017-11-14 10:23:07