目录内图片转PDF(多图片打印助手)

最近同事经常找我帮她打印试卷,很奇葩的是,她的试卷都是*红书上下载的图片,一张张打印不好看,而且可能打印不完全,大小也不协调,所以有了这个脚本。

转成exe运行的话,速度太慢,且exe体积较大,如有需要,请自行转换。
当需要给小孩打印图片格式的试卷时比较实用 

使用方法:

方法一:直接将脚本放到图片文件夹内,并运行脚本

方法二:命令行运行

命令行参数: python convert_images_to_pdf.py [<图片文件夹路径>] [<PDF保存路径>]

图片文件夹路径:可选,默认为:python脚本所在目录

PDF保存路径:可选,默认路径为 <图片文件夹路径> ,文件名为:<图片文件夹名>.PDF。需先指定<图片文件夹路径>再指定<PDF保存路径>

命令行示例:

假设脚本名为:convert_images_to_pdf.py

只指定图片目录
> python convert_images_to_pdf.py C:\img_folder

同时指定图片目录和pdf路径
> python convert_images_to_pdf.py C:\img_folder  D:\result.pdf

代码: 

# -*- coding: utf-8 -*-
 
import os
import subprocess
import sys
 
from PIL import Image
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
 
 
def pause_exit():
    subprocess.run("pause", shell=True)
    exit()
 
 
def get_images(img_folder):
    """遍历目录,获取目录下所有的图片"""
    img_format = (".jpg", ".png", ".bmp")
    images = []
    for file_name in os.listdir(img_folder):
        if file_name.lower().endswith(img_format):
            images.append(os.path.join(img_folder, file_name))
    return sorted(images)
 
 
def get_image_size(img_file, page_width, page_height):
    """设置每个图片的大小"""
    with Image.open(img_file) as img:
        img_width, img_height = img.size
        if img_height > page_height * 0.95 or img_width > page_width * 0.95:
            height_scale = (page_height * 0.95) / img_height
            width_scale = (page_width * 0.95) / img_width
            scale = min(height_scale, width_scale)
            img_width *= scale
            img_height *= scale
    return img_width, img_height
 
 
def create_pdf(pdf_file, images, page_width, page_height):
    """创建 pdf 文件,并添加图片"""
    c = canvas.Canvas(pdf_file, pagesize=letter)
 
    total_images = len(images)
    for i, img_path in enumerate(images):
        img_width, img_height = get_image_size(img_path, page_width, page_height)
        x = (page_width - img_width) / 2
        y = (page_height - img_height) / 2
        c.drawImage(img_path, x, y, img_width, img_height)
        c.showPage()
 
        progress_bar(i + 1, total_images)
 
    c.save()
 
 
def create_pdf_from_path(img_folder, pdf_file=None):
    """遍历给定路径,将路径下的图片添加进pdf,并将pdf保存在指定路径下"""
    images = get_images(img_folder)
    if images:
        if not pdf_file:
            pdf_name = os.path.basename(img_folder) + ".pdf"
            pdf_file = os.path.join(img_folder, pdf_name)
        page_width, page_height = letter
        create_pdf(pdf_file, images, page_width, page_height)
        return pdf_file
    else:
        print(f"{img_folder} 下没有图片,当前支持的图片格式为 jpg、png 和 bmp")
        pause_exit()
 
 
def progress_bar(current, total, bar_length=60):
    """进度条"""
    filled_length = int(bar_length * current // total)
    bar = "+" * filled_length + "-" * (bar_length - filled_length)
    percent = current / total * 100
    sys.stdout.write(f"\r处理进度:|{bar}| {percent:.2f}%")
    sys.stdout.flush()
 
 
if __name__ == "__main__":
    subprocess.run("title 目录内图片转PDF", shell=True)
 
    try:
        (*rest,) = sys.argv[1:]
        if not rest:
            img_folder = os.getcwd()  # 使用当前文件夹作为 img_folder
            pdf_file = None
        else:
            img_folder, *pdf_file = rest
            pdf_file = pdf_file[0] if pdf_file else None
    except ValueError:
        print("请提供图片文件夹路径作为参数")
        pause_exit()
 
    if not os.path.exists(img_folder):
        print(f"{img_folder} 路径不存在!")
        pause_exit()
    elif not os.path.isdir(img_folder):
        print(f"{img_folder} 不是一个文件夹!")
        pause_exit()
    else:
        pdf_file = create_pdf_from_path(img_folder, pdf_file)
 
        if pdf_file:
            subprocess.run(["explorer", pdf_file])
        else:
            pause_exit()

 觉得有用请点赞收藏,支持一下~

  • 36
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1、PDF编辑器 Foxit PDF Editor是第一个真正的PDF文件编辑软件。许多人都希望能找到一个象编辑其它类型的文档的编辑器,事实上在Foxit PDF Editor出现之前,根本没有这样的工具。每一个PDF文件都包含很多页面,每一页包含各种可视对象,如文本对象、图形对象和图像对象。而每一个对象都由其属性来定义其显示的方式。 Foxit PDF Editor的功能包括:-编辑现有PDF文件或创建全新的PDF文件。-以和Adobe PDF Reader几乎相同的效果显示PDF文件。-页面缩放。-可靠的所见即所得的编辑功能。-插入或删除页面。-使用嵌入或非嵌入字体添加文本对象。-插入行或其它简单的图形对象。-插入bitmap格式的图像。-从页面中删除任意对象。-改变对象的属性。-可撤消任意操作。-在不同PDF文件间拷贝粘贴任意对象。-在PDF和任意Windows应用程序间拷贝粘贴文本。-在PDF和任意Windows应用程序间拷贝粘贴图像。 2、PDF分割器 3、PDF加密器 4、PDF解密器 5、PDF阅读器 PDF Text Viewer可以从PDF文档中提取和预览文本信息。与Acrobat Reader或其它工具不同的是,PDF Text Viewer是以一种易读的格式形式摘取文本信息,对大多数的PDF文档都适用,你还可以将之打印、存档或拷贝其中的某部分。另外,它还能自动将所有提取的文本信息换成一个文本文件。这个新版本引进了全新的用户界面和书签预览功能。 6、PDF摘要信息修改器 7、PDFHTM PDF2HTML 是一个可以帮助你将PDF格式的电子文档在保持原来版面的基础上换为Html网页格式的文件的文档换工具,程序可以在技术上最大限度的保持原来文档的版面和格式,程序换速度快,重要的是程序并不需要你的电脑上一定要首先安装Adobe Acrobat 软件就可以完成换操作,支持鼠标拖放操作,支持批量文件换功能,支持PDF v1.4协议! 8、PDFPNG 9、PDFTIF 10、PDFTXT PDF2TXT使用虚拟打印机技术,可以让您从任意的程序中创建PDF/PS文档,以及BMP、TIFF、PNG、GIF、PCX等多种光栅图像,让您可以非常方便地创建、管理您的文件档案,她是您办公自动化领域中必不可少的一个得力助手PDF2TXT OCR:直接抽取PDF中的文本内容,支持OCR识别,可以支持任何PDF文件的文本抽取,是您文档管理的最佳助手。 11、pdfword PDF2Word能够从PDF格式文档中提取文字、图形和其它内容存放入Word格式文档中,因此你就能重复利用你的PDF文档内容,在Word中再编辑文字、排版及重整布局;并且它是一个独立软件,不需要安装Microsoft Word、Adobe Acrobat软件支持。 12、TxtPDF 13、图片PDF 14、PDF管理器
PDF批量图片目录是指将一个或多个PDF文件中的所有页面换成独立的图片,并按照原PDF目录结构进行分类和保存。 首先,我们需要选择一个PDF批量图片的工具或软件。市面上有很多免费或收费的工具可以完成这个任务,例如Adobe Acrobat、Smallpdf、OnlineOCR等等。选择一个功能齐全、操作简单的工具,安装或打开它。 接下来,打开工具,并导入待换的PDF文件。可以通过拖拽文件到工具界面的指定区域,或选择文件导入按钮进行选择。工具会自动加载并显示PDF的内容。 然后,我们需要设置图片换的目录结构。根据PDF目录结构,我们可以选择将图片按照章节、页码等方式进行分类。大多数工具都会提供类似的设置选项,可以根据需要进行调整。 完成目录结构设置后,点击换按钮或执行相应的操作,开始批量换。工具会自动按照设置好的目录结构,将PDF页面换为图片,并按照分类保存到指定的文件夹中。 换完成后,我们可以打开保存的文件夹,查看换后的图片。按照所设置的目录结构,我们可以方便地找到对应的页面图片。 最后,我们可以对换后的图片进行进一步处理,如改变图片格式、调整图片大小、添加水印等。这些操作可以根据具体需求自行进行。 总之,PDF批量图片目录是一种将PDF文件换为独立图片并分类保存的功能,可以提高图片管理和查找的效率。通过选择合适的工具,设置目录结构,并进行换和处理,我们可以轻松完成这一任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码云笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值