IT小春子 2023-12-12 16:00 采纳率: 72.7%
浏览 6
已结题

当前想实现遍历目录,然后按照文件名称中对应的序号进行文件按照顺序排序后组合成新的pdf文件,结果排序后的文件总不对

当前想实现遍历目录,然后按照文件名称中对应的序号进行文件按照顺序排序后组合成新的pdf文件,结果排序后的文件总不对。麻烦看看这个代码写法是否不对
输出结果图:

img


有问题的部分代码:

**# 遍历目录获取所有PDF文件路径
pdf_files = []
for root, dirs, files in os.walk(folder_path):
    for file in files:
        if file.endswith('.pdf'):
            pdf_files.append(os.path.join(root, file))
# 根据文件名中的顺序进行排序
sorted_files = sorted(files, key=lambda x: int(x.split('、')[0]))

# 输出文件名
for filehaha in sorted_files:
    filehaha=folder_path +'/'+filehaha
   
    print(filehaha)

# 依次对每个PDF文件进行操作
    pdf_writer = PyPDF2.PdfWriter()
    for pdf_file in filehaha:**


完整代码如下:

```python
import os
import re
import PyPDF2
from PyPDF2 import PdfWriter, PdfReader
# 定义PDF文件加密密码
password = 123456
folder_path='h:/pdf'
# 遍历目录获取所有PDF文件路径
pdf_files = []
for root, dirs, files in os.walk(folder_path):
    for file in files:
        if file.endswith('.pdf'):
            pdf_files.append(os.path.join(root, file))
# 根据文件名中的顺序进行排序
sorted_files = sorted(files, key=lambda x: int(x.split('、')[0]))

# 输出文件名
for filehaha in sorted_files:
    filehaha=folder_path +'/'+filehaha
   
    print(filehaha)

# 依次对每个PDF文件进行操作
pdf_writer = PyPDF2.PdfWriter()
for pdf_file in filehaha:
    print('开始')
    print(pdf_file)
    # 打开PDF文件
    with open(pdf_file, 'rb') as file:
        pdf_reader = PyPDF2.PdfReader(file)
        # 如果PDF文件加密,则需要先解密
        if pdf_reader.is_encrypted:
            pdf_reader.decrypt('lixiaochun')
        # 将所有页面添加到pdf_writer中
        
        for page_num in range(len(pdf_reader.pages)):
                pdf_writer.add_page(pdf_reader.pages[page_num])
             # 检查页面是否为空白页
            # if not page.isBlank():
                # 将非空白页添加到写入器对象中
# 将合并后的PDF文件保存为mypdf.pdf
with open('mypdf.pdf', 'wb') as file:
    pdf_writer.write(file)

# 打开 pdf 文件
with open('mypdf.pdf', 'rb') as file:
    # 创建 PdfFileReader 对象
    pdf_reader = PdfReader(file)
    # 创建 PdfFileWriter 对象
    pdf_writer = PdfWriter()

    # 遍历 pdf 文件中的每一页
    for page_num in range(len(pdf_reader.pages)):
        # 获取当前页的对象
        page_obj = pdf_reader.pages[page_num]
        # 获取当前页的内容
        page_content = page_obj.extract_text()

        # 检查当前页是否为空白页
        if page_content.strip():
            # 如果不是,则将该页添加至 pdf_writer 对象中
            pdf_writer.add_page(page_obj)

    # 将 pdf_writer 对象中的页写入到新的 pdf 文件中
    with open('mypdf.pdf', 'wb') as new_file:
        pdf_writer.write(new_file)

# 对合并后的PDF文件进行加密和限制
pdf_writer = PyPDF2.PdfWriter()
with open('mypdf.pdf', 'rb') as file:
    pdf_reader = PyPDF2.PdfReader(file)
    for page_num in range(len(pdf_reader.pages)):
        pdf_writer.add_page(pdf_reader.pages[page_num])
    # 设置密码和权限
    print(password)
    pdf_writer.encrypt(str(password), use_128bit=True)
    encrypted = pdf_writer.encrypt(str(password), use_128bit=True)
    print(encrypted)

    # 设置元数据
    pdf_writer.add_metadata({
        '/Title': 'My PDF document',
        '/Author': 'John Doe',
        '/Subject': '...',
        '/Creator': '...',
        '/Producer': '...'
    })
    #pdf_writer.setPageLayout('/SinglePage')
    page_layout = '/SinglePage'
    # 保存加密后的PDF文件
    with open('mypdf.pdf', 'wb') as file:
        pdf_writer.write(file)

    print('结束')
  • 写回答

1条回答 默认 最新

  • 无序繁星 2023-12-12 16:14
    关注
    1. pdf_files似乎后面没有用到,那这个是干嘛的
    2. filehaha变量就已经是一个文件的完整路径名了, 你后面还用for pdf_file in filehaha来遍历这个字符串,那pdf_file就是单个字符,从盘符h开始,打开文件应该会报不存在的错误吧
      其他的修改后再看看吧
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月22日
  • 已采纳回答 12月14日
  • 修改了问题 12月12日
  • 创建了问题 12月12日

悬赏问题

  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 C++行情软件的tick数据如何高效的合成K线
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。
  • ¥20 在easyX库下编写C语言扑克游戏跑的快,能实现简单的人机对战