Converting images to PDF. Final file has blank pages before and after.

Michael Baca jesterdev at gmail.com
Wed Dec 2 22:32:21 EST 2020


On Monday, November 30, 2020 at 7:15:37 PM UTC-7, MRAB wrote:
> On 2020-12-01 01:20, Michael Baca wrote: 
> > Hello, new to the group, rather new to programming. 
> > 
> > I'm writing a program that takes images and converts them into PDF's. It works after quite a few days of trying, however the final file has a blank page inserted before and after each page containing the images. 
> > 
> > This uses FPDF to do the conversion. I've been up and down trying to figure out where I'm adding an extra page, so it might be an FPDF issue. 
> > 
> > def multi_convert(pdf_Filename, file_path): 
> > if (dir): 
> > file_list = [] 
> > print(""), print("") 
> > print("Converting... This may take awhile depending on the number of images.") 
> > 
> > for entry in os.scandir(file_path): 
> > if (entry.path.endswith(".jpg") or entry.path.endswith(".png")) and entry.is_file(): 
> > file_list.append(entry.path) 
> > else: 
> > print("Error: ") 
> > print("Invalid Directory - {}", dir) 
> > cover = Image.open(str(file_list[0])) 
> > width, height = cover.size 
> > 
> > pdf = FPDF(unit="pt", format=[width, height]) 
> > 
> > for page in file_list: 
> > pdf.add_page() 
> > pdf.image(str(page)) 
> > 
> > pdf.output(file_path + pdf_Filename + ".pdf", "F") 
> > exit() 
> >
> It says in the documentation for the .image method: 
> 
> """ 
> x: 
> 
> Abscissa of the upper-left corner. If not specified or equal to None, 
> the current abscissa is used (version 1.7.1 and up). 
> 
> y: 
> 
> Ordinate of the upper-left corner. If not specified or equal to None, 
> the current ordinate is used; moreover, a page break is triggered first 
> if necessary (in case automatic page breaking is enabled) and, after the 
> call, the current ordinate is moved to the bottom of the image (version 
> 1.7.1 and up). 
> """ 
> 
> In other words, you're not specifying where the top-left corner of the 
> image should go, so it's putting it at the current position, wherever 
> that is, and it's responding to the positioning by inserting additional 
> pages. 
> 
> The solution is to specify the images' positions, and, perhaps, also 
> their sizes, if necessary. 
> 
> By the way, why doesn't the function end with "exit()"? That'll make it 
> exit the Python completely; rarely a good idea.

Thank you very much for the help. That makes sense, as I remember reading about the image placement, but I didn't think it mattered. My use is very simple, I occasionally need to covert images into to PDF's and this makes it easier than going online. So I figured it was okay to leave that out. I need to go back and read the  manual some more. 

It's a CLI program, it takes a few different arguments and when it's done it just returns to the shell. That's why I have the exit() where I do. Is there a better/safer way to exit the program?


More information about the Python-list mailing list