如何修改pdf的修改时间(图文)
修改PDF文件的修改时间可以通过多种方式实现,包括修改文件系统时间戳和修改PDF文档内部的元数据。以下是详细的方法:
选择适合您技术水平和需求的方法来修改PDF的修改时间。如果只需要简单修改文件系统时间,使用命令行工具即可;如果需要修改PDF内部元数据,则需要使用编程方法或专业工具。
1. 修改PDF文件系统时间戳
命令行方式
Windows PowerShell:
powershell
# 修改PDF文件的最后写入时间 $pdfFile = Get-Item "document.pdf" $pdfFile.LastWriteTime = "2024-01-01 14:30:00" # 修改创建时间 $pdfFile.CreationTime = "2024-01-01 14:30:00" # 修改最后访问时间 $pdfFile.LastAccessTime = "2024-01-01 14:30:00"Linux/macOS:
bash
# 使用 touch 命令修改PDF文件时间 touch -m -t 202401011430 document.pdf # 修改修改时间 touch -a -t 202401011430 document.pdf # 修改访问时间 touch -t 202401011430 document.pdf # 同时修改两者2. 修改PDF内部元数据
使用Python和PyPDF2/pypdf库:
python
from datetime import datetime import os # 方法1: 使用 pypdf (推荐,PyPDF2的现代替代品) try: from pypdf import PdfWriter, PdfReader except ImportError: # 如果没有pypdf,尝试PyPDF2 from PyPDF2 import PdfWriter, PdfReader def modify_pdf_metadata_timestamp(pdf_path, new_date=None): """ 修改PDF文件的元数据时间戳 """ if new_date is None: new_date = datetime.now() # 读取PDF reader = PdfReader(pdf_path) writer = PdfWriter() # 复制所有页面 for page in reader.pages: writer.add_page(page) # 复制元数据 if reader.metadata: metadata = dict(reader.metadata) else: metadata = {} # 更新时间相关的元数据 date_str = new_date.strftime("D:%Y%m%d%H%M%S") metadata.update({ '/ModDate': date_str, # 修改日期 '/CreationDate': date_str # 创建日期 }) # 添加元数据到writer writer.add_metadata(metadata) # 保存修改后的PDF output_path = pdf_path.replace('.pdf', '_modified.pdf') with open(output_path, 'wb') as output_file: writer.write(output_file) print(f"PDF元数据已修改,保存为: {output_path}") return output_path # 示例使用 new_datetime = datetime(2024, 1, 1, 14, 30, 0) modify_pdf_metadata_timestamp('document.pdf', new_datetime)使用Python和pikepdf库:
python
import pikepdf from datetime import datetime def modify_pdf_with_pikepdf(pdf_path, new_date=None): """ 使用pikepdf修改PDF时间和元数据 """ if new_date is None: new_date = datetime.now() # 打开PDF with pikepdf.open(pdf_path) as pdf: # 获取现有元数据 with pdf.open_metadata() as meta: # 更新元数据 date_str = new_date.strftime("D:%Y%m%d%H%M%S") meta['xmp:ModifyDate'] = date_str meta['xmp:CreateDate'] = date_str meta['pdf:ModDate'] = date_str # 保存修改后的PDF output_path = pdf_path.replace('.pdf', '_modified2.pdf') pdf.save(output_path) print(f"PDF已修改并保存为: {output_path}") return output_path # 安装pikepdf: pip install pikepdf # 示例使用 # new_datetime = datetime(2024, 1, 1, 14, 30, 0) # modify_pdf_with_pikepdf('document.pdf', new_datetime)3. 综合解决方案
Python完整示例:
python
import os from datetime import datetime import shutil try: from pypdf import PdfWriter, PdfReader PDF_LIBRARY = 'pypdf' except ImportError: try: from PyPDF2 import PdfWriter, PdfReader PDF_LIBRARY = 'pypdf2' except ImportError: PDF_LIBRARY = None def modify_pdf_comprehensive(pdf_path, new_datetime=None, preserve_original=True): """ 综合修改PDF的文件系统时间和内部元数据 Args: pdf_path: PDF文件路径 new_datetime: 新的时间,默认为当前时间 preserve_original: 是否保留原文件 Returns: str: 修改后的文件路径 """ if new_datetime is None: new_datetime = datetime.now() # 1. 修改文件系统时间戳 try: timestamp = new_datetime.timestamp() os.utime(pdf_path, (timestamp, timestamp)) print(f"✓ 文件系统时间已修改为: {new_datetime}") except Exception as e: print(f"✗ 修改文件系统时间失败: {e}") # 2. 修改PDF内部元数据(如果有PDF库) if PDF_LIBRARY: try: # 读取PDF reader = PdfReader(pdf_path) writer = PdfWriter() # 复制所有页面 for page in reader.pages: writer.add_page(page) # 处理元数据 if reader.metadata: metadata = dict(reader.metadata) else: metadata = {} # 更新时间相关的元数据 date_str = new_datetime.strftime("D:%Y%m%d%H%M%S") metadata.update({ '/ModDate': date_str, '/CreationDate': date_str }) # 添加元数据 writer.add_metadata(metadata) # 确定输出路径 if preserve_original: output_path = pdf_path.replace('.pdf', '_modified.pdf') else: output_path = pdf_path # 保存文件 with open(output_path, 'wb') as output_file: writer.write(output_file) # 如果替换了原文件,也需要恢复文件系统时间 if not preserve_original: os.utime(output_path, (timestamp, timestamp)) print(f"✓ PDF元数据已修改,保存为: {output_path}") return output_path except Exception as e: print(f"✗ 修改PDF元数据失败: {e}") return pdf_path else: print("⚠️ 未安装PDF处理库(pypdf或PyPDF2),仅修改了文件系统时间") return pdf_path # 批量处理多个PDF文件 def batch_modify_pdfs(pdf_paths, new_datetime=None): """ 批量修改多个PDF文件的时间 """ if new_datetime is None: new_datetime = datetime.now() results = [] for pdf_path in pdf_paths: if os.path.exists(pdf_path) and pdf_path.lower().endswith('.pdf'): print(f"\n处理文件: {pdf_path}") result = modify_pdf_comprehensive(pdf_path, new_datetime) results.append(result) else: print(f"跳过无效文件: {pdf_path}") return results # 示例使用 if __name__ == "__main__": # 单个文件处理 new_time = datetime(2024, 1, 1, 14, 30, 0) modify_pdf_comprehensive('document.pdf', new_time) # 批量处理 # pdf_files = ['doc1.pdf', 'doc2.pdf', 'doc3.pdf'] # batch_modify_pdfs(pdf_files, new_time)4. 使用命令行工具
ExifTool (跨平台):
bash
# 安装ExifTool # Windows: 下载安装包 # macOS: brew install exiftool # Linux: sudo apt-get install libimage-exiftool-perl # 修改PDF元数据时间 exiftool -ModifyDate="2024:01:01 14:30:00" document.pdf exiftool -CreateDate="2024:01:01 14:30:00" document.pdf # 同时修改多个字段 exiftool -ModifyDate="2024:01:01 14:30:00" -CreateDate="2024:01:01 14:30:00" document.pdf # 批量处理 exiftool -ModifyDate="2024:01:01 14:30:00" *.pdf5. GUI工具
Adobe Acrobat:
- 打开PDF文件
- 文件 → 属性 → 描述
- 修改创建日期和修改日期
- 保存文件
PDFtk (图形界面版本):
- 使用PDFtk Server或相关GUI工具修改元数据
注意事项:
- 权限要求: 修改受保护的PDF可能需要密码
- 兼容性: 某些PDF阅读器可能不会显示修改后的时间
- 备份建议: 修改重要PDF前建议备份原文件
- 数字签名: 修改已签名的PDF会使签名失效
- 库依赖: Python方案需要安装相应的PDF处理库
bash
# 安装所需的Python库 pip install pypdf # 推荐 # 或 pip install PyPDF2 # 或 pip install pikepdf
更新时间:2025-12-15 14:55:52
上一篇:如何修改文件夹的修改时间(图文)
下一篇:如何修改pdf里面的内容(图文)
