之前对pdf中每张图片进行处理后,再重新合并chengpdf的时候,文件都会很大,为了保证pdf的质量,小编整合了一下使用python脚本,来自动处理这个枯燥的过程。
import os
from PIL import Image # 引入核心库
from mymodules.time_stamp import get_current_stamp # 引入自定义模块获取系统当前时间
PDF_FOLDER_NAME = 'merge_pdf' # 定义pdf所在文件夹名称
def combine_imgs_pdf(folder_path, pdf_file_path):
"""
合成文件夹下的所有图片为pdf
Args:
folder_path (str): 源文件夹
pdf_file_path (str): 输出路径
"""
files = os.listdir(folder_path)
png_files = []
sources = []
print(files)
for file in files:
if 'png' in file or 'jpg' in file: # 目前支持png和jpg两种图片格式
png_files.append(folder_path + file)
png_files.sort()
output = Image.open(png_files[0])
png_files.pop(0)
for file in png_files:
png_file = Image.open(file)
if png_file.mode != "RGB":
png_file = png_file.convert("RGB")
sources.append(png_file)
# 如果文件夹不存在,则创建文件夹
if os.path.exists(PDF_FOLDER_NAME) and os.path.isdir(PDF_FOLDER_NAME):
print("文件夹存在")
else:
print("文件夹不存在")
os.mkdir(PDF_FOLDER_NAME)
output.save(pdf_file_path, "pdf", save_all=True, append_images=sources)
if __name__ == "__main__":
folder = "./" # 目前只转换当前文件夹的图片
pdfFile = "./{}/{}.pdf".format(PDF_FOLDER_NAME, get_current_stamp()) # 根据系统当前时间,命名pdf文件名
combine_imgs_pdf(folder, pdfFile)
./mymodules/time_stamp.py
import datetime
def get_current_stamp():
now = datetime.datetime.now() # 获取当前时间
year = now.year # 年
month = now.month # 月
day = now.day # 日
hour = now.hour # 时
minute = now.minute # 分
second = now.second # 秒
timestamp = '{0}{1}{2}{3}{4}{5}'.format(year, month, day, hour, minute, second) # 格式化字符串
return timestamp
当前脚本没有对图片尺寸进行处理,在pdf中尺寸与图片尺寸一致。