本帖最后由 zjg121 于 2024-4-13 11:19 编辑
与下方的代码功能完全相反。把某文件夹(d:/a)及其所有子孙后代文件夹中的jpg图片合并为pdf(放在文件夹d:/b中),保证目录树不变。
[Python] 纯文本查看 复制代码 import os
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
def merge_images_to_pdf(image_dir, pdf_dir):
# 确保PDF目录存在
if not os.path.exists(pdf_dir):
os.makedirs(pdf_dir)
# 遍历图片目录中的所有文件和子目录
for root, dirs, files in os.walk(image_dir):
# 过滤出图片文件(这里假设图片是.jpg或.png格式)
image_files = [f for f in files if f.lower().endswith(('.png', '.jpg', '.jpeg', '.tiff', '.gif'))]
# 如果当前目录有图片文件
if image_files:
# 构建相对于源目录的相对路径
rel_path = os.path.relpath(root, image_dir)
# 构建PDF文件的路径
pdf_path = os.path.join(pdf_dir, rel_path)
# 如果PDF目录的相应子目录不存在,则创建它
if not os.path.exists(pdf_path):
os.makedirs(pdf_path)
# 构建PDF文件的完整路径和名称(假设与目录名称相同,但扩展名为.pdf)
pdf_file_name = os.path.join(pdf_path, os.path.basename(root) + '.pdf')
# 创建PDF文件并添加图片
c = canvas.Canvas(pdf_file_name, pagesize=letter)
image_width, image_height = letter
for image_file in image_files:
image_path = os.path.join(root, image_file)
c.drawImage(image_path, 0, 0, width=image_width, height=image_height)
c.showPage() # 开始新页面以放置下一张图片
c.save() # 保存PDF文件
# 使用示例
source_dir = 'd:/a' # 源目录,包含图片和子目录
destination_pdf_dir = 'd:/b' # 目标PDF目录
merge_images_to_pdf(source_dir, destination_pdf_dir)
把某文件夹(d:/a)及其所有子孙后代文件夹中的pdf转换为jpg图片(d:/b),保证目录树不变。
[HTML] 纯文本查看 复制代码 import os
import fitz # PyMuPDF
def pdf_to_png(pdf_path, output_dir):
# 打开PDF文件
doc = fitz.open(pdf_path)
# 获取PDF的页数
num_pages = len(doc)
# 遍历每一页
for page_num in range(num_pages):
# 获取当前页
page = doc[page_num]
# 获取页面的像素矩阵
pix = page.get_pixmap()
# 生成PNG文件的名称
output_file = os.path.join(output_dir, f"page_{page_num + 1}.png")
# 保存PNG文件
pix.save(output_file)
# 关闭PDF文件
doc.close()
def convert_pdfs_in_dir(dir_path, output_dir):
# 如果输出目录不存在,则创建它
if not os.path.exists(output_dir):
os.makedirs(output_dir)
# 遍历目录中的文件
for root, dirs, files in os.walk(dir_path):
for file in files:
if file.lower().endswith('.pdf'):
# 获取PDF文件的完整路径
pdf_path = os.path.join(root, file)
# 获取输出子目录的路径,以保留原始目录结构
relative_path = os.path.relpath(root, dir_path)
output_sub_dir = os.path.join(output_dir + '/' + file, relative_path)
# 如果输出子目录不存在,则创建它
if not os.path.exists(output_sub_dir):
os.makedirs(output_sub_dir)
# 转换PDF为PNG
pdf_to_png(pdf_path, output_sub_dir)
# 设置输入和输出目录
input_dir = 'path_to_your_input_directory' # 替换为你的输入目录路径
output_dir = 'path_to_your_output_directory' # 替换为你的输出目录路径
input_dir = 'd:/a' # 替换为你的输入目录路径
output_dir = 'd:/b' # 替换为你的输出目录路径
# 开始转换
convert_pdfs_in_dir(input_dir, output_dir) |